Gesichtskomplettierung mit Multi-Output-Schätzern#

Dieses Beispiel zeigt die Verwendung von Multi-Output-Schätzern zur Vervollständigung von Bildern. Das Ziel ist es, die untere Hälfte eines Gesichts anhand seiner oberen Hälfte vorherzusagen.

Die erste Spalte der Bilder zeigt echte Gesichter. Die folgenden Spalten illustrieren, wie extrem zufällige Bäume, k-nächste Nachbarn, lineare Regression und Ridge-Regression die untere Hälfte dieser Gesichter vervollständigen.

Face completion with multi-output estimators, true faces, Extra trees, K-nn, Linear regression, Ridge
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

import matplotlib.pyplot as plt
import numpy as np

from sklearn.datasets import fetch_olivetti_faces
from sklearn.ensemble import ExtraTreesRegressor
from sklearn.linear_model import LinearRegression, RidgeCV
from sklearn.neighbors import KNeighborsRegressor
from sklearn.utils.validation import check_random_state

# Load the faces datasets
data, targets = fetch_olivetti_faces(return_X_y=True)

train = data[targets < 30]
test = data[targets >= 30]  # Test on independent people

# Test on a subset of people
n_faces = 5
rng = check_random_state(4)
face_ids = rng.randint(test.shape[0], size=(n_faces,))
test = test[face_ids, :]

n_pixels = data.shape[1]
# Upper half of the faces
X_train = train[:, : (n_pixels + 1) // 2]
# Lower half of the faces
y_train = train[:, n_pixels // 2 :]
X_test = test[:, : (n_pixels + 1) // 2]
y_test = test[:, n_pixels // 2 :]

# Fit estimators
ESTIMATORS = {
    "Extra trees": ExtraTreesRegressor(
        n_estimators=10, max_features=32, random_state=0
    ),
    "K-nn": KNeighborsRegressor(),
    "Linear regression": LinearRegression(),
    "Ridge": RidgeCV(),
}

y_test_predict = dict()
for name, estimator in ESTIMATORS.items():
    estimator.fit(X_train, y_train)
    y_test_predict[name] = estimator.predict(X_test)

# Plot the completed faces
image_shape = (64, 64)

n_cols = 1 + len(ESTIMATORS)
plt.figure(figsize=(2.0 * n_cols, 2.26 * n_faces))
plt.suptitle("Face completion with multi-output estimators", size=16)

for i in range(n_faces):
    true_face = np.hstack((X_test[i], y_test[i]))

    if i:
        sub = plt.subplot(n_faces, n_cols, i * n_cols + 1)
    else:
        sub = plt.subplot(n_faces, n_cols, i * n_cols + 1, title="true faces")

    sub.axis("off")
    sub.imshow(
        true_face.reshape(image_shape), cmap=plt.cm.gray, interpolation="nearest"
    )

    for j, est in enumerate(sorted(ESTIMATORS)):
        completed_face = np.hstack((X_test[i], y_test_predict[est][i]))

        if i:
            sub = plt.subplot(n_faces, n_cols, i * n_cols + 2 + j)

        else:
            sub = plt.subplot(n_faces, n_cols, i * n_cols + 2 + j, title=est)

        sub.axis("off")
        sub.imshow(
            completed_face.reshape(image_shape),
            cmap=plt.cm.gray,
            interpolation="nearest",
        )

plt.show()

Gesamtlaufzeit des Skripts: (0 Minuten 2,411 Sekunden)

Verwandte Beispiele

Online-Lernen eines Diktionärs von Gesichtsteilen

Online-Lernen eines Diktionärs von Gesichtsteilen

Merkmalsagglomeration

Merkmalsagglomeration

Zerlegung von Gesicht-Datensätzen

Zerlegung von Gesicht-Datensätzen

Gesichtserkennungsbeispiel mit Eigenfaces und SVMs

Gesichtserkennungsbeispiel mit Eigenfaces und SVMs

Galerie generiert von Sphinx-Gallery