GAN은 비교사 학습이므로, 교사학습의 Accurary, F1 score과 같은 확립된 평가 지표가 없다. 이번 포스팅에서는 자주 사용되는 Frechet Inception Distance이라는 평가지표와 StyleGAN에서 제안된 Perceptual Path Lenght에 대해 소개한다.
Frechet Inception Distance(FID)
Frechet Inception Distance(FID)는 생성된 이미지의 분포와 원래 이미지의 분포가 어느정도 비슷한지 측정하는 지표이다.
그러나, 이미지는 고차원 공간이므로 간단하게 분포의 거리를 계측하는 것은 힘들다. 따라서, 최근 인간을 초월한 이미지 인식 정밀도를 가진 모델을 사용하여 이미지를 저차원 공간으로 변경 한 뒤, 그 공간에서 분포의 거리를 구하는 것이 FID의 기본 컨셉이다.
정의식은 아래와 같은며, Inception V3이라는 네트워크로 저차원 공간으로 만든 벡터(Pooling의 출력)으로 Wasserstein-2 거리를 계산한다. m, c는 매립된 공간상에 평균 벡터, 공분산행렬로, 첨자로 붙은 w는 생성 이미지, 첨자가 붙지 않은 것은 실제 이미지 이다. 분산의 거리이므로, 값은 작을 수록 실제 이미지에 가까운 가짜 이미지가 생성되어 있다고 할 수 있다. 즉 Generator성능이 좋다고 할 수 있다.
Perceptual Path Length(PPL)
Perceptual Path Length(PPL)는 "지각"적으로 즉 우리가 감각적으로 봤을 때 잠재공간 상에 이미지가 부드럽게 변화하고 있는가라는 지표이다. FID와 동일하게 학습이 끝난 모델로 생성된 이미지의 거리를 사용한다.
간단하게 설명하면 "이미지를 생성하는 씨앗이 되는 잠재공간 상에 이미지의 변화가 '지각적'으로 단거리로 변화 있는가"라는 지표이다. 이미지로 설명하자면 다음과 같다.
흰 강아지를 생성하는 잠재공간 z1와 검은 강아지를 생성하는 잠재공간 z2가 있다고 가정하자. 색 이외의 요소는 변화시키지 않았기 때문에 그 사이에서 데이터는 흰색과 검은색 중간 색인 회색 강아지가 출력되도록 변화하는 경로로 잠재 공간으로 변해가는 것이 이상적이다. 즉, 색만 변화하는 파란색 경로가 "지각적"으로 최단 거리가 된다. 반대로 색 뿐만 변화시켰으나, 물체의 형이 변화하여 한 번 침실과 같은 이미지를 경유하는 초록색 경로는 "지각적"으로 긴 거리가 된다.
이것을 수치화한 것이 PPL로, 정의식은 다음과 같다. 2개의 잠재공간 z1, z2를 비율 t로 섞은 잠재 변수로 생성한 이미지를 비율 t+ε을 섞어 생성한 잠재 변수로 생성한 이미지의 거리의 기대치가 된다.
위 식은 PPL의 정의식으로, g는 Generator, f는 StyleGAN에 있어서 잠재변수 z를 스타일 w으로 한 함수, lerp는 선형 보완을 의미한다.
설명을 다시 이미지로 표현하면 다음과 같다. t를 섞은 데이터와 t+ε로 섞은 데이터가 "지각적"으로 가까우면 작은 값이 도출된다.
z1와 z2의 혼합비율 t에 미세한 변화 ε1, ε2를 전달한 잠재 변수로 이미지를 생성한 예이다. "지각적"으로 최단거리인 파란색 경로는 미세한 변화를 전달한다고 해도 동일한 회색 강아지 이미지가 출력되므로, 우리의 감각적으로는 "이미지 간의 거리가 가깝다"라는 느낌이다. 즉 "지각적"인 거리는 짧다. 그러나 "지각적"으로 먼 거리에 있는 초록색 경로에서는 침실의 이미지가 출력되고 있다. 감각적으로는 회색의 강아지와 침실의 차이가 굉장히 크므로, 지각적으로 거리가 크다고 할 수 있다.
참고자료
'IT > AI\ML' 카테고리의 다른 글
Concept drift와 Data drift란? (0) | 2022.04.12 |
---|---|
segmentation의 종류 (semantic segmentation, instance segmentation, panoptic segmentation의 차이) (0) | 2022.03.31 |
머신러닝에서의 내삽(보간, Interpolation), 외삽(보외, Extrapolation) (0) | 2022.02.28 |
[python/keras] 간단한 2차원 문제로 WGAN-gp의 기초를 이해하기 (0) | 2022.02.25 |
[python/Tensorflow2.x] Mixed Precision API (0) | 2022.01.24 |