본문 바로가기

인공지능

FID (Frechet Inception Distance) 란 무엇인가?

Frechet Inception Distance란 무엇일까?

FID는 실제 이미지와 생성된 이미지가 얼마나 유사한지 계산하는 메트릭이다.

이 점수가 낮을수록 두 그룹의 이미지(Real & Fake) 또는 통계가 유사하다는 뜻이다. 그래서 점수가 낮을수록 좋은 것이다.

FID는 GAN에 의해 생성된 이미지의 quality를 평가하는데 사용된다.

 

FID는 왜? 어떻게? 개발되었을까?

FID는 "GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium"이라는 논문에서 처음 제안되었고, 기존에 있던 IS(Inception Score)를 개선시키기 위해 오직 GAN의 성능 평가를 위해 특별히 개발되었다.

 

Inception Score는 생성된 이미지만 사용하여 성능을 평가하는 반면, FID는 실제 이미지 셋과 생성된 이미지 셋을 비교하여 성능을 평가한다.

 

이미지의 평균과 공분산을 계산하여 다변량 가우시안(Multivariate Gaussian)으로 만든 뒤, Wasserstein-2 distance라고 불리는 Frechet distance를 사용하여 두 분포(실제 이미지 셋 & 생성된 이미지 셋) 사이의 거리를 측정한다.

 

FID는 어떻게 계산할까?

먼저 pretrained Inception v3 모델을 사용하는데, 출력 레이어를 제거하고 마지막 pooling 레이어의 activation을 이용한다. 여기에는 2,048개의 activation이 있으므로, 각 이미지는 2,048개의 activation feature로 예측된다.

 

실제 이미지셋에 대한 2,048개의 feature vector를 구하고, 생성된 이미지 셋에 대한 2,048개의 feature vector를 구한다.

이렇게 구한 벡터들을 활용해 아래의 식과 같은 논문의 방정식을 거쳐 FID 점수를 구한다.

 

$$d^2((m,C), (m_w,C_w))=\left\|m-m_w \right\|_{2}^{2}+T_r(C+C_w)-2(CC_w)^{1/2})$$

 

$m$과 $m_c$는 각각 실제 이미지 및 생성된 이미지의 기능별 평균(feature-wise mean)을 나타내며 이때 2,048개의 벡터에서 각 요소는 이미지에서 관찰되는 평균 특징이다.

 

$C$와 $C_w$는 실제 특징 벡터와 생성된 벡터에 대한 공분산 행렬이다.

 

$\left\|m-m_w \right\|_{2}^{2}$는 두 평균 벡터간의 합계 제곱 차이이고, $T_r$은 대각합을 나타낸다.

 

참고

https://velog.io/@viriditass/GAN%EC%9D%80-%EC%95%8C%EA%B2%A0%EB%8A%94%EB%8D%B0-%EA%B7%B8%EB%9E%98%EC%84%9C-%EC%96%B4%EB%96%A4-GAN%EC%9D%B4-%EB%8D%94-%EC%A2%8B%EC%9D%80%EA%B1%B4%EB%8D%B0-How-to-evaluate-GAN

 

GAN은 알겠는데, 그래서 어떤 GAN이 더 좋은건데? Evaluating Generative Adversarial Networks

👨‍🎓❓GAN의 성능은 도대체 어떻게 평가⚖해야 할까? Generative Adversarial Networks, 줄여서 GAN은 2014년도에 Ian J. Goodfellow의 논문을 거쳐 오늘날까지 여러 논문들이 나오면서 큰 발전을 이루고 있다

velog.io

 

더 알아봐야 할 것

Inception Socre

Inception v3 model