Contents

Frechet Inception Distance

생성모델을 훈련시킬 때 어려운 점 중 하나는 현재의 모델이 얼마나 “진짜"같은 이미지를 만드는 지를 정량적으로 평가하는 것이다. “진짜같음"은 많은 의미를 내포하므로 수치화하기가 어려우나 학습을 위해서는, 그리고 평가를 위해서는 반드시 계량할 수 있는 방법이 필요하다. 이런 상황에서 사용할 수 있는 도구 중 하나가 Frechet Inception Distance(FID)이다.

지도학습에서의 모델평가는 정답지가 있어 쉽다. 생성된 이미지와 진짜 이미지에 대한 레이블이 있다면 이는 지도학습으로 단순하게 이진분류 문제를 풀면 된다. 이 때는 accuracy, precision, recall, F1과 같은 다양한 지표를 사용할 수 있다. 히지만 지도학습이 아닌 framework이라면 어떨까? 특히 GAN과 같이 판별자(discriminator)가 학습과정에서 함께 훈련되는 경우라면 “진짜같음"의 구별문제는 그리 간단하지 않다. FID는 GAN을 사용한 모델에 국한되지는 않지만 이 글에서의 생성모델은 GAN을 가정하여 작성하였음을 밝힌다.

GAN의 생성결과를 판단할 때 “진짜같음"도 중요하지만 “다양함"도 중요한 요소이다. GAN의 훈련이 무너지는 경우를 생각해보면 학습일 잘 안되어 진짜같은 이미지를 만드는데 실패하는 경우도 있지만, 어떠한 방법으로 discriminator를 잘 속이는 특정 경우를 찾아 여러 입력에 대해 동일한 출력만을 내보내는 경우도 있고 이러한 경우를 mode collapse라고 한다. 즉 진짜같음가 다양성 두 가지 측면을 고려하여야 한다. 이 때 진짜같음을 fidelity, 다양성을 diversity라고 한다.

Pixel Distance and Feature Distance

이러한 문제를 다루는 기존의 방식으로는 pixel distance와 feature distance가 있다. pixel distance는 두 이미지의 값을 단순하게 빼서 사용하는 것이며 feature distance는 이미 훈련된 분류기의 중간 layer의 activation을 활용하는 것으로 high level수준에서의 비교가 가능하다는 장점이 있으며 pixel distance방식보다 더 선호된다.

Frechet Inception Distance (FID)

현재 생성모델의 이미지와 진짜 이미지를 비교하는 용도로 가장 많이 사용되는 지표 중 하나가 FID이다. 특히 이 두 지표는 고해상도 이미지를 생성하는 StyleGan에서 사용한 지표이기도 하다. 생성된 이미지의 분포만을 평가하는 incepstion score와는 다르게 FID는 생성이미지와 실제 이미지의의 분포를 비교한다는데 차이가 있다.

우선 FID의 정의를 살펴보자.

$$ \text{FID} =\lvert\mu -\mu _{w}\rvert^{2}+\operatorname {tr} (\Sigma +\Sigma _{w}-2(\Sigma \Sigma _{w})^{1/2}) $$

FID는 두 Gaussian 분포비교로 가정하며 $\mathcal{N}(\mu, \Sigma)$는 GAN과 같은 생성모델에서의 분포를, $\mathcal{N}(\mu _{w}, \Sigma _{w})$는 진짜 이미지의 분포를 나타낸다. 이를 통해서 FID는 두 분포의 거리를 측정하는 것이다.

FID는 기본적으로 multivariate 분포비교를 위해 사용하지만 간단하게 univariate에서의 비교를 살펴보자. Univariate인 경우에는 covariance의 대각선 이외의 성분이 모두 0이므로 $\Sigma = \begin{bmatrix}\sigma^{2} & 0 \cr 0 & \sigma^{2} \end{bmatrix}$, $\Sigma_{w} = \begin{bmatrix}\sigma_{w}^{2} & 0 \cr 0 & \sigma_{w}^{2} \end{bmatrix}$로 놓고 계산해보면 다음의 distance로 표현된다.

$$ \text{FID} =\lvert \mu -\mu _{w} \rvert^{2}+ \lvert \sigma - \sigma_{w} \rvert^{2} $$

즉, univariate인 경우에는 두 분포의 평균, 편차의 차이를 각각 제곱하는 것과 같다. 같은 원리로 multivariate으로 확장하면 아래의 정의로 표현할 수 있다.

$$ \text{FID} =\lvert\mu -\mu _{w}\rvert^{2}+\operatorname {tr} (\Sigma +\Sigma _{w}-2(\Sigma \Sigma _{w})^{1/2}) $$

단순 픽셀값의 차이인 pixel distance와는 다르게 분포의 moment를 비교하므로 pixel distance보다 더 의미있는 지표로 사용할 수 있다. FID를 산출하기 위해 사용하는 값은 Inception v3모델의 coding layer값을 사용한다고 한다. 여기서 coding layer는 가장 마지막 pooling layer로 이미지 클래스를 분류하는 레이어 직전의 레이어이다. 다른 pretrained 모델이라해도 분류직전의 layer 값을 사용하면 FID를 산출할 수 있다.