본문 바로가기
Deep Learning

[DL] GAN을 평가하는 방법 - IS, FID, LPIPS

by JJuOn 2022. 2. 20.

이번 포스팅에서는 GAN을 평가하는 데 주로 사용되는 metric인 IS, FID 그리고 LPIPS에 대해 알아보도록 하겠습니다.

GAN은 두가지 관점에서 평가됩니다.

  • Quality: 실제 이미지와 유사한 이미지가 생성되는가
  • Diversity: 여러 noise vector에 걸쳐 다양한 이미지가 생성되는가


앞으로 소개해 드릴 metric들은 위 두가지 관점에서 GAN을 평가하기 위해 사용됩니다.


Inception Score (IS)

IS는 ImageNet pretrained model인 inception-v3를 이용하여 GAN을 측정합니다. IS를 계산하기 위해 두가지 확률이 필요한데 하나는 조건부 확률 P(y|x)로 생성된 이미지 x에 대해서 어떤 클래스에 속할지 예측하는 것입니다. 고품질의 이미지를 생성할 수록, 하나의 클래스에만 속할 확률이 높아 엔트로피가 낮게 측정될 것입니다. 두번째로 필요한 확률은 주변 확률입니다. 주변 확률은 P(y)=zP(y|G(z))로 여러 noise vector에 대해서 예측된 class들을 의미합니다. 만약 GAN이 diverse한 이미지를 생성한다면 엔트로피가 P(y) 가 uniform 하게 나올것이며, 높은 엔트로피를 갖게됩니다. IS를 계산하기 위해서 조건부 확률과 주변 확률의 KL-divergence를 계산해줍니다. 따라서 최종 IS는 아래와 같습니다.

IS=exp(ExpdataDKL(P(y|x)P(y)))


Frechet Inception Distance (FID)

FID를 측정하기 위해 ImageNet으로 pretrain된 Inception-v3 모델이 필요합니다.
Inception-v3 모델을 feature extractor로 사용하여 실제 이미지와 생성된 이미지 사이의 activation map을 추출합니다. Activation map을 통해 multivariate gaussian distribution을 구할 수 있습니다. 그럼 이제 실제 이미지의 확률 분포와와 생성된 이미지의 확률 분포 사이의 Wassertein-2 distance를 측정하여 FID를 구할 수 있습니다:

FID=d2=μ1μ222Tr(Σ1+Σ22Σ1Σ2)

여기서 μ,Σ 는 각각 mean과 covariance matrix를 의미합니다. 그리고 Tr은 matrix에서 주 대각선의 합입니다.

FID가 낮게 나온 생성된 이미지는 실제 이미지와 확률 분포적으로 유사하다고 볼 수 있습니다.
따라서 GAN의 FID가 낮게 측정될 수록 high-quality의 이미지를 생성한다고 평가됩니다.

Pytorch의 경우 https://github.com/mseitzer/pytorch-fid의 라이브러리를 주로 사용합니다.


Learned Perceptual Image Patch Similarity (LPIPS)

LPIPS는 비교적 초기의 ImageNet classsification 모델인 AlexNet, VGG, SqueezeNet을 사용합니다. LPIPS는 "The Unresonable Effectiveness of Deep Features as a Perceptual Metric"에서 처음 소개된 것인데, 기존의 IS나 FID와는 다르게 유사도를 사람의 인식에 기반하여 측정하려 시도했습니다. 그 과정에서 AlexNet, VGG, SqueezeNet의 feature map이 사람의 인식과 유사하기 때문에 이를 활용하고자 하였습니다.

두 이미지 x, x0가 주어졌을 때, ImageNet으로 pretrain된 network의 몇몇 layer l에서의 activation map y^hwl,y^0hwl을 얻어 Euclidean distance 계산한 후 wl로 scaling한 다음 channel-wise averaging을 한 값을 l에 대해 평균을 내면 LPIPS가 얻어집니다. 수식으로 표현하면 아래와 같습니다.

LPIPS=l1HlWlh,wwl(y^hwly^0hwl)22

낮은 LPIPS는 두 이미지가 perceptually similar하다고 볼 수 있습니다.
Pytorch의 경우 https://github.com/richzhang/PerceptualSimilarity의 라이브러리를 주로 사용합니다.


References

[1] https://m.blog.naver.com/chrhdhkd/222013835684
[2] https://github.com/mseitzer/pytorch-fid
[3] https://arxiv.org/abs/1801.03924
[4] https://github.com/richzhang/PerceptualSimilarity

댓글