Завершение изображений лиц с использованием многорезультатных оценщиков

Machine LearningMachine LearningBeginner
Практиковаться сейчас

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии показано, как использовать многорезультатные оценщики для восстановления изображений. Задача заключается в том, чтобы предсказать нижнюю часть лица по его верхней части. В качестве алгоритмов будут использоваться такие методы, как чрезвычайно случайные деревья, k-ближайших соседей, линейная регрессия и регрессия с ридж-регуляризацией. Восстановленные лица будут сравниваться с исходными, чтобы оценить эффективность алгоритмов.

Советы по использованию ВМ

После запуска виртуальной машины щелкните в левом верхнем углу, чтобы переключиться на вкладку Ноутбук и приступить к практике в Jupyter Notebook.

Иногда может потребоваться подождать несколько секунд, пока Jupyter Notebook полностью загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы столкнетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Загрузка данных

Первым шагом является загрузка датасета Olivetti faces, который содержит 400 серых изображений размером 64x64 пикселя каждый. Данные разделяются на обучающую и тестовую выборки. В обучающей выборке находятся лица 30 людей, а в тестовой - лица оставшихся людей. Для этого практического занятия мы проверим алгоритмы на подмножестве из пяти человек.

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

Настройка оценщиков

Вторым шагом является настройка многорезультатных оценщиков на обучающих данных. Мы будем использовать четыре различных алгоритма: чрезвычайно случайные деревья, k-ближайших соседей, линейную регрессию и регрессию с ридж-регуляризацией. Оценщики будут предсказывать нижнюю часть лиц на основе верхней части.

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

Резюме

В этом практическом занятии показано, как использовать многорезультатные оценщики для восстановления изображений. Мы использовали четыре различных алгоритма для предсказания нижней части лица на основе верхней части. Производительность алгоритмов была оценена путём сравнения восстановленных лиц с исходными.