Gesichtsvervollständigung mit multi-output-Schätzern

Machine LearningMachine LearningBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab wird gezeigt, wie multi-output-Schätzer zum Vervollständigen von Bildern verwendet werden. Ziel ist es, die untere Hälfte eines Gesichts anhand der oberen Hälfte vorherzusagen. Verschiedene Algorithmen wie extrem zufällige Bäume, k-nearest neighbors, lineare Regression und Ridge Regression werden verwendet, um die untere Hälfte der Gesichter zu vervollständigen. Die vervollständigten Gesichter werden mit den ursprünglichen Gesichtern verglichen, um die Leistung der Algorithmen zu bewerten.

VM-Tipps

Nachdem die VM gestartet ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills ml/sklearn -.-> lab-49222{{"Gesichtsvervollständigung mit multi-output-Schätzern"}} end

Daten laden

Der erste Schritt besteht darin, den Olivetti Faces-Datensatz zu laden, der 400 Graustufenbilder mit je 64x64 Pixeln enthält. Die Daten werden in Trainings- und Testsets unterteilt. Das Trainingsset enthält die Gesichter von 30 Personen, und das Testset enthält die Gesichter der verbleibenden Personen. Für dieses Lab werden wir die Algorithmen auf einem Teilsatz von fünf Personen testen.

## 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 :]

Schätzer anpassen

Der zweite Schritt besteht darin, die multi-output-Schätzer an die Trainingsdaten anzupassen. Wir werden vier verschiedene Algorithmen verwenden: extrem zufällige Bäume, k-nearest neighbors, lineare Regression und Ridge Regression. Die Schätzer werden die untere Hälfte der Gesichter anhand der oberen Hälfte vorherzusagen.

## 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)

Die vervollständigten Gesichter plotten

Der letzte Schritt besteht darin, die vervollständigten Gesichter für jeden Algorithmus zu plotten und sie mit den ursprünglichen Gesichtern zu vergleichen. Die ursprünglichen Gesichter werden in der ersten Spalte gezeigt, und die vervollständigten Gesichter werden in den nachfolgenden Spalten für jeden Algorithmus gezeigt. Die Leistung der Algorithmen kann durch Vergleich der vervollständigten Gesichter mit den ursprünglichen Gesichtern bewertet werden.

## 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()

Zusammenfassung

In diesem Lab wurde gezeigt, wie multi-output-Schätzer zum Vervollständigen von Bildern verwendet werden. Wir haben vier verschiedene Algorithmen verwendet, um die untere Hälfte eines Gesichts anhand der oberen Hälfte vorherzusagen. Die Leistung der Algorithmen wurde durch Vergleich der vervollständigten Gesichter mit den ursprünglichen Gesichtern bewertet.