다중 출력 추정기를 이용한 얼굴 이미지 완성

Beginner

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

소개

이 실습에서는 다중 출력 추정기를 사용하여 이미지를 완성하는 방법을 보여줍니다. 목표는 얼굴의 상반부를 주어진 경우 하반부를 예측하는 것입니다. 극단적으로 무작위 트리, k-최근접 이웃, 선형 회귀 및 릿지 회귀와 같은 다양한 알고리즘이 얼굴의 하반부를 완성하는 데 사용될 것입니다. 완성된 얼굴은 원본 얼굴과 비교하여 알고리즘의 성능을 평가할 것입니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근할 수 있습니다.

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

데이터 로드

첫 번째 단계는 각각 64x64 픽셀인 400 개의 회색조 얼굴 이미지를 포함하는 Olivetti 얼굴 데이터 세트를 로드하는 것입니다. 데이터는 학습 세트와 테스트 세트로 분할됩니다. 학습 세트는 30 명의 얼굴을 포함하고, 테스트 세트는 나머지 사람들의 얼굴을 포함합니다. 이 실습에서는 5 명의 사람의 하위 집합에서 알고리즘을 테스트할 것입니다.

## 얼굴 데이터 세트 로드
data, targets = fetch_olivetti_faces(return_X_y=True)

train = data[targets < 30]
test = data[targets >= 30]  ## 독립적인 사람들에 대해 테스트

## 사람들의 하위 집합에 대해 테스트
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]
## 얼굴의 상반부
X_train = train[:, : (n_pixels + 1) // 2]
## 얼굴의 하반부
y_train = train[:, n_pixels // 2 :]
X_test = test[:, : (n_pixels + 1) // 2]
y_test = test[:, n_pixels // 2 :]

추정기 적합

두 번째 단계는 다중 출력 추정기를 학습 데이터에 맞추는 것입니다. 우리는 극단적으로 무작위 트리, k-최근접 이웃, 선형 회귀 및 릿지 회귀의 네 가지 다른 알고리즘을 사용할 것입니다. 추정기는 얼굴의 상반부를 기반으로 얼굴의 하반부를 예측할 것입니다.

## 추정기 적합
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)

완성된 얼굴 플롯

마지막 단계는 각 알고리즘에 대한 완성된 얼굴을 플롯하고 원본 얼굴과 비교하는 것입니다. 원본 얼굴은 첫 번째 열에 표시되고, 완성된 얼굴은 각 알고리즘에 대한 후속 열에 표시됩니다. 알고리즘의 성능은 완성된 얼굴을 원본 얼굴과 비교하여 평가할 수 있습니다.

## 완성된 얼굴 플롯
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()

요약

이 실험에서는 다중 출력 추정기를 사용하여 이미지를 완성하는 방법을 보여주었습니다. 우리는 얼굴의 상반부를 기반으로 하반부를 예측하기 위해 네 가지 다른 알고리즘을 사용했습니다. 알고리즘의 성능은 완성된 얼굴을 원본 얼굴과 비교하여 평가했습니다.