Fréchet Inception Distance (FID)
Fréchet Inception Distance(FID)는 생성된 이미지의 Inception 특징 통계를 실제 사진과 비교해 점수를 산출합니다. 계산 및 비교 방법을 다룹니다.
프레셰 인셉션 거리(FID)는 생성 이미지 모델의 생성 이미지 통계와 실제 이미지 통계를 비교해 점수를 산출하는 지표입니다. 두 이미지 집합을 모두 사전 학습된 Inception v3 네트워크에 통과시키고, 각 집합의 특징을 평균과 공분산을 갖는 다변량 가우스 분포로 요약합니다. FID는 이 두 가우스 분포 사이의 프레셰 거리입니다. 점수는 낮을수록 좋으며, 0은 두 특징 집합의 평균과 공분산이 동일하다는 뜻입니다. 요하네스 케플러 린츠 대학교의 Martin Heusel과 동료들은 2017년 논문 GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium에서 FID를 소개했습니다. FID는 곧 생성적 적대 신경망(GAN)의 표준 지표로 인셉션 점수를 대체했으며, 이후 확산 모델에도 널리 사용되었습니다.
FID 계산 방법#
- 일반적으로 50,000장에 해당하는 대규모 이미지 샘플을 생성하고, 보통 학습 세트에서 가져온 실제 이미지 참조 세트를 준비합니다.
- 모든 이미지의 크기를 299 x 299픽셀로 조정한 다음, 이미지 분류를 위해 ImageNet으로 학습한 합성곱 신경망인 Inception v3에 입력합니다. 마지막 풀링 계층의 2,048차원 출력을 이미지의 임베딩으로 사용합니다.
- 실제 임베딩과 생성 임베딩 각각의 평균 벡터와 공분산 행렬을 계산합니다.
- 두 값을 결합합니다: FID = (두 평균 간 제곱 거리) + trace(C_real + C_gen - 2 x sqrt(C_real x C_gen)). 여기서 sqrt는 행렬 제곱근입니다.
첫 번째 항은 생성 이미지가 실제 이미지와 평균적으로 다를 때 커집니다. 예를 들어 색조가 치우치거나 콘텐츠 구성이 잘못된 경우가 이에 해당합니다. 두 번째 항은 모드 붕괴처럼 이미지 다양성이 적절하지 않을 때 커집니다. 모드 붕괴는 생성기가 몇 가지 유형의 결과물만 만드는 GAN의 실패 사례입니다. 따라서 하나의 숫자로 충실도와 다양성을 모두 반영할 수 있으며, 이 때문에 FID는 Stable Diffusion과 같은 텍스트-이미지 시스템의 기본 점수가 되었습니다.
시뮬레이션한 64차원 특징 벡터를 대상으로 동일한 계산을 NumPy로 수행합니다:
import numpy as np
rng = np.random.default_rng(0)
# Simulated 64-D feature vectors for 5,000 real and 5,000 generated images
real = rng.normal(0.0, 1.0, size=(5000, 64))
generated = rng.normal(0.3, 0.8, size=(5000, 64)) # shifted mean, less variety
# Summarize each set as a Gaussian: a mean vector and a covariance matrix
mu_r, mu_g = real.mean(axis=0), generated.mean(axis=0)
cov_r, cov_g = np.cov(real, rowvar=False), np.cov(generated, rowvar=False)
# Trace of the matrix square root of cov_r @ cov_g, via its eigenvalues
tr_covmean = np.sqrt(np.linalg.eigvals(cov_r @ cov_g)).real.sum()
# FID = squared distance between means + covariance mismatch
fid = ((mu_r - mu_g) ** 2).sum() + np.trace(cov_r) + np.trace(cov_g) - 2 * tr_covmean
print(f"FID: {fid:.2f}")스크립트는 FID 8.78을 출력합니다. 평균 이동이 약 5.8, 분포 폭의 축소가 약 2.6을 차지하며, 나머지 0.5점은 유한한 샘플에서 통계를 추정할 때 발생하는 오차에서 비롯됩니다. 이 오차는 항상 FID를 높입니다. 실제 평가에서는 TorchMetrics FID와 같은 라이브러리가 해당 지표와 함께 공개된 원본 TensorFlow Inception 가중치로 특징을 계산합니다. Torchvision의 ImageNet 학습 Inception v3는 가중치가 다르므로 해당 점수를 공개된 결과와 비교할 수 없습니다.
FID 점수 해석 및 비교#
FID 값은 참조 세트, 이미지 해상도, 샘플 수, 전처리가 동일한 조건에서만 비교할 수 있습니다. 다른 라이브러리로 이미지를 크기 조정하거나 JPEG로 저장하면 점수가 몇 점씩 달라질 수 있으며, 이러한 문제를 해결하기 위해 Clean-FID 구현이 개발되었습니다. 샘플 수가 적으면 점수가 높아지므로 원 논문 저자들은 이미지 10,000장 이상을 권장합니다. 따라서 샘플 5,000개로 계산한 점수는 샘플 50,000개로 계산한 점수와 비교할 수 없습니다.
참고로 StyleGAN2는 FFHQ 데이터셋의 1024 x 1024 얼굴 이미지에서 FID 2.84를 기록했습니다. 30,000개의 MS-COCO 캡션을 대상으로 한 제로샷 텍스트-이미지 생성에서는 Google Imagen이 7.27, DALL-E 2가 10.39를 기록했습니다.
기타 생성 이미지 지표#
- 인셉션 점수(IS): Inception이 생성 이미지의 클래스를 얼마나 확신도 높게, 그리고 다양하게 분류하는지를 바탕으로 생성 이미지만 평가합니다. 실제 데이터를 사용하지 않으므로 잘못된 유형의 선명한 이미지를 생성하는 모델은 탐지할 수 없습니다.
- 커널 인셉션 거리(KID): 동일한 Inception 특징을 편향되지 않은 커널 추정기로 비교하므로 샘플 수가 적을 때 더 신뢰할 수 있습니다.
- CLIP 점수: 이미지와 텍스트 프롬프트의 일치도를 측정합니다. FID는 이를 반영하지 않으므로 텍스트-이미지 모델은 일반적으로 두 지표를 모두 보고합니다.
- 생성 모델의 정밀도 및 재현율: FID의 단일 점수를 충실도와 커버리지로 나눕니다. 충실도는 생성 이미지 가운데 실제처럼 보이는 이미지의 비율이고, 커버리지는 모델이 재현하는 실제 이미지 다양성의 비율입니다.
- FD-DINOv2: 자기 지도 비전 트랜스포머인 DINOv2의 특징을 사용해 동일한 프레셰 거리를 계산합니다. George Stein과 동료들은 대규모 인간 대상 연구에서 FID가 확산 모델 이미지의 현실성에 대한 사람들의 평가를 제대로 반영하지 못한다는 결과가 나온 뒤, 2023년에 이 지표를 제안했습니다.
비디오 모델은 프레셰 비디오 거리로 같은 개념을 활용합니다. VBench와 같은 평가 제품군은 단일 거리 대신 비디오 품질을 여러 차원으로 나눠 평가합니다.
합성 학습 데이터의 FID#
FID는 탐지기 학습에 사용할 합성 데이터를 사전에 선별하는 데도 활용됩니다. 자동차 비전의 야간 주행이나 결함 탐지의 특정 제품 결함처럼 드문 장면을 생성한 이미지를 배포 카메라로 촬영한 실제 사진과 비교하면, 학습에 시간을 들이기 전에 도메인 격차를 확인할 수 있습니다. 최종 확인은 다운스트림 정확도입니다. Ultralytics YOLO26을 합성 이미지가 포함된 경우와 제외된 경우로 학습하고, 동일한 실제 홀드아웃 이미지에서 검증 모드로 평균 정밀도(mAP)를 비교합니다.










