[TIL] #14 2026-04-16

2026. 4. 16. 09:30·TIL

배경 

FashionMNIST 데이터셋으으로 GAN과 LDM모델을 구현하고 성능을 보는 실험을 하고 있었는데, 이미지의 품질을 보기 위해서 FID를 사용했는데, 문제들이 많이 발생했다.

 

문제1. FID가 1 아래로 나왔다.

GAN모델의 경우 상식적인 FID값이 나왔는데, LDM학습을 하다보니 FID값이 1 아래로 나왔다. 직관적으로 말이 안되는 수치였다. 초기학습단계에는 이미지가 노이즈 수준일텐데, 1아래로 나온다는건 왜 그랬을까 ?

 

원인

FrechetInceptionDistance(feature=64)로 설정했던 것이 문제였다. feature 수가 너무 작으면 실제 이미지와 생성 이미지의 분포 차이를 제대로 잡아내지 못한다는 것을 알게 됐다.

 

# 문제가 된 코드
fid = FrechetInceptionDistance(feature=64).to(device)

 

해결

feature를 표준값인 2048로 변경했더니 초기 학습 단계에서 FID가 231로 나왔다. 이 값이 훨씬 정상적인 범위였다.

# 수정된 코드
fid = FrechetInceptionDistance(feature=2048).to(device)

 

 

문제2. GAN과 LDM의 FID 측정 방식이 달랐다

원인

GAN에서는 매 step마다 실제 이미지와 가짜 이미지를 비교해서 FID를 계산했고, LDM에서는 에폭이 끝난 후 ddpm.sample()로 생성한 이미지로 FID를 계산했다. 두 방식이 달랐기 때문에 직접 비교가 의미없다는 것을 깨달았다.

 

해결

FID를 직접 비교하는 것을 포기했다. 대신 각 모델의 FID를 따로 보고, 최종적인 성능 비교는 생성 이미지를 눈으로 직접 확인하는 방식으로 변경했다.

 

문제3. 매 에폭마다 FID를 계산하니 너무 오래 걸렸다

ddpm.sample()은 T=200 스텝을 역방향으로 모두 돌아야 하기 때문에 500장을 생성하려면 상당한 시간이 걸렸다. 매 에폭마다 FID를 계산하면 학습 시간이 너무 길어졌다.

 

해결

5에폭마다 FID를 계산하도록 변경했다. 학습 트렌드를 모니터링하는 데는 충분했다.

 

if (epoch+1) % 5 == 0:
    # FID 계산
    fid.reset()
    fid_avg = fid.compute().item()
else:
    fid_avg = float('nan')

 

문제4. Best Model 저장 기준 애매

GAN은 30에폭 학습에 feature=64 기준으로 best model을 저장했고, LDM은 150에폭 학습에 feature=2048 기준으로 best model을 저장했다. 기준이 다르다 보니 두 best model을 비교하는 것 자체가 의미없었다.

 

해결

각 모델의 마지막 에폭 결과를 사용하기로 했다. 그리고 FID 그래프에서 best값을 표시하는 것도 제거하고, 단순히 학습 진행에 따른 FID 변화 트렌드만 확인하는 방식으로 변경했다.

 

 

배운 점

●  FID는 측정 방식에 따라 값이 크게 달라진다. feature 수, 샘플 수, 어떤 이미지를 비교하느냐에 따라 완전히 다른 결과가 나오기 때문에 단순히 수치만 보고 좋고 나쁨을 판단하면 안 된다는 것을 배웠다.

 

● 정량적 지표가 항상 정답은 아니다. FID 수치가 낮다고 무조건 좋은 모델이 아닐 수 있다. 결국 생성 이미지를 직접 눈으로 확인하는 것이 가장 직관적이고 정확한 평가 방법이라는 것을 다시 한번 깨달았다.

'TIL' 카테고리의 다른 글

[TIL] #16 2026-04-23  (0) 2026.04.23
[TIL] #15 2026-04-22  (0) 2026.04.22
[TIL] #13 2026-04-12  (0) 2026.04.12
[TIL] #12 2026-04-10  (1) 2026.04.10
[TIL] #11 2026-04 -08  (2) 2026.04.08
'TIL' 카테고리의 다른 글
  • [TIL] #16 2026-04-23
  • [TIL] #15 2026-04-22
  • [TIL] #13 2026-04-12
  • [TIL] #12 2026-04-10
uj07096
uj07096
개발블로그 시작 !
  • uj07096
    김재헌 님의 블로그
    uj07096
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • Algorithm
      • My IT
        • Article
        • Codes
      • TIL
      • My Projects N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩테스트
    autoencoder
    convolution
    DenseNet
    이상치
    Tensor
    YOLO
    프로그래머스
    PyTorch
    transfer learning
    데이터전처리
    파이썬
    AI
    Faster R-CNN
    til
    EfficientNet
    LSTM
    머신러닝
    EDA
    코테
    LeetCode
    Algorithm
    python
    딥러닝
    GAN
    optuna
    ResNet
    DeepLearning
    Stack
    kaggle
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
uj07096
[TIL] #14 2026-04-16
상단으로

티스토리툴바