평가(Evaluation) — FID, CLIP 점수(CLIP Score), 사람 선호도(Human Preference)

생성 모델(generative model) 리더보드는 거의 예외 없이 FID, CLIP 점수, 사람 선호도 평가장(human-preference arena)의 승률을 인용합니다. 그런데 각 숫자에는 마음먹은 연구자가 충분히 악용할 수 있는 실패 양상(failure mode)이 존재합니다. 이 실패 양상을 모르면 진짜 개선과 지표를 흔드는 조작 실행(gaming run)을 구별할 수 없습니다.

유형: Build 언어: Python 선수 지식: Phase 8 · 01 (분류 체계), Phase 2 · 04 (평가 지표) 예상 시간: 약 45분

문제

생성 모델은 *샘플 품질(sample quality)*과 *조건 준수(conditioning adherence)*로 평가됩니다. 그런데 두 항목 모두 닫힌 형태의 측정값(closed-form measure)이 존재하지 않습니다. 모델이 이미지 10,000장을 렌더링해야 하고, 어떤 지표가 그 결과에 숫자를 매기며, 우리는 모델 계열과 해상도, 아키텍처가 달라도 그 숫자를 신뢰해야 합니다. 2014년부터 2026년 사이의 가혹한 검증을 살아남은 지표는 다음 세 가지입니다.

  • FID(Fréchet Inception Distance). Inception 네트워크의 특징 공간(feature space)에서 실제 분포와 생성 분포 사이의 거리입니다. 낮을수록 좋습니다.
  • CLIP 점수. 생성 이미지의 CLIP 이미지 임베딩(CLIP-image embedding)과 프롬프트의 CLIP 텍스트 임베딩(CLIP-text embedding) 사이의 코사인 유사도(cosine similarity)입니다. 높을수록 좋고, 프롬프트 준수(prompt adherence)를 측정합니다.
  • 사람 선호도. 같은 프롬프트에 대해 두 모델을 일대일로 맞붙이고 사람 또는 GPT-4급 모델이 더 나은 쪽을 고른 결과를 엘로 점수(Elo score)로 집계합니다.

그 외에도 IS(Inception Score), KID, CMMD, ImageReward, PickScore, HPSv2, MJHQ-30k 같은 지표를 만나게 됩니다. 각 지표는 이전 지표의 한 가지 실패를 보완하려는 시도입니다.

사전 테스트

2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요

1.FID는 실제 분포와 생성 분포의 특징 공간(feature space)에서 프레셰 거리를 측정합니다. 왜 최소 N=10,000개의 표본이 필요한가요?

2.CLIP 점수(CLIP score)는 CLIP 이미지 임베딩과 텍스트 임베딩 사이의 코사인 유사도를 측정합니다. 평가 지표로서의 주요 사각지대는 무엇인가요?

0/2 답변 완료

개념

three-pillar evaluation of generative models FID (sample quality) ||μ_r - μ_g||² + Tr(Σ_r + Σ_g - 2√Σ_rΣ_g) Fréchet distance between Gaussian fits in Inception-v3 space use N ≥ 10k or numbers lie ImageNet-biased; use FD-DINO or CMMD out of domain lower = better CLIP score (adherence) cos( CLIP_image(x), CLIP_text(p) ) how well does output match prompt? compositional failures slip through short prompts score higher mechanically CMMD + VQA tests cover CLIP blind spots higher = better human preference (truth) Elo from pairwise wins A vs B on same prompt HPSv2 / ImageReward / PickScore as automated proxies Chatbot-Arena-style image arenas higher win rate = better each metric has a known game FID: overfit Inception prior → low FID, same quality CLIP: saturate with 'masterpiece, 4k' → inflated score preference: prompt set overlap with training → rigged production eval report 1. FID on 10-30k + 2. CLIP / CMMD on the same pool + 3. 200+ blind human-pair Elo + 4. qualitative failure audit on 50 outputs one metric = marketing; four = evidence

FID — 샘플 품질

FID는 Heusel 등(2017)이 제안한 지표입니다. 절차는 다음과 같습니다.

  1. N장의 실제 이미지와 N장의 생성 이미지에서 Inception-v3 특징(2048차원)을 추출합니다.
  2. 각 풀(pool)에 가우시안 분포를 맞추어 평균 μ_r, μ_g와 공분산 Σ_r, Σ_g를 계산합니다.
  3. FID = ||μ_r - μ_g||² + Tr(Σ_r + Σ_g - 2 · (Σ_r · Σ_g)^0.5)로 정의됩니다.

해석하면, 이는 특징 공간에 놓인 두 다변량 가우시안 분포 사이의 프레셰 거리(Fréchet distance)입니다. 값이 낮을수록 두 분포가 비슷하다고 봅니다.

실패 양상은 다음과 같습니다.

  • 작은 N에서 편향. FID는 특징 분포에 대한 평균 제곱(mean-squared) 성격을 띱니다. N이 작으면 공분산이 과소추정되어 거짓으로 낮은 FID가 나오기 쉽습니다. 항상 N ≥ 10,000을 사용합니다.
  • Inception 의존성. Inception-v3는 ImageNet으로 학습되었기 때문에, 얼굴이나 예술 작품, 텍스트 이미지처럼 ImageNet에서 멀리 떨어진 도메인에서는 의미 없는 FID 값이 나옵니다. 이런 경우에는 도메인 특화 특징 추출기를 사용합니다.
  • 지표 조작(gaming). Inception의 사전분포에 과적합하면 실제 시각 품질이 좋아지지 않아도 FID가 낮아질 수 있습니다. 아래에 소개하는 CMMD로 보완합니다.

CLIP 점수 — 프롬프트 준수

CLIP 점수는 Radford 등(2021)의 CLIP을 활용합니다. 생성 이미지 한 장과 프롬프트가 주어졌을 때 다음과 같이 계산합니다.

clip_score = cos_sim( CLIP_image(x_gen), CLIP_text(prompt) )

이를 30k개의 생성 이미지에 대해 평균 내면, 모델 사이를 비교할 수 있는 하나의 스칼라(scalar) 값이 됩니다.

실패 양상은 다음과 같습니다.

  • CLIP 자체의 사각지대. CLIP은 구성적 추론(compositional reasoning)이 약합니다. 예를 들어 "파란 구 위의 빨간 정육면체(a red cube on a blue sphere)" 같은 프롬프트에서는 자주 실패합니다. 결과적으로 모델이 복잡한 프롬프트를 제대로 따르지 않더라도 CLIP 점수에서는 높은 순위를 받을 수 있습니다.
  • 짧은 프롬프트 편향. 짧은 프롬프트는 자연 상태의 이미지 분포에서 CLIP 이미지 매칭이 많이 나타납니다. 반대로 긴 프롬프트는 기계적으로 CLIP 점수가 낮아지는 경향이 있습니다.
  • 프롬프트 조작. "high quality, 4k, masterpiece" 같은 문구를 프롬프트에 끼워 넣으면 실제 이미지-텍스트 결합(image-text binding)이 좋아지지 않아도 CLIP 점수가 부풀려질 수 있습니다.

CMMD(Jayasumana 등, 2024)는 이런 문제 중 일부를 바로잡습니다. Inception 대신 CLIP 특징을 사용하고, 프레셰 거리 대신 최대 평균 차이(maximum-mean discrepancy)를 사용합니다. 미묘한 품질 차이를 감지하는 데 더 유리합니다.

사람 선호도 — 기준 정답(ground truth)

프롬프트 풀을 정한 뒤, 모델 A와 모델 B로 같은 프롬프트의 이미지를 생성합니다. 만들어진 쌍을 사람 또는 강력한 LLM 심판(LLM judge)에게 보여주고, 그 승리 결과를 엘로(Elo) 또는 브래들리-테리(Bradley-Terry) 점수로 집계합니다. 대표적인 벤치마크는 다음과 같습니다.

  • PartiPrompts(Google): 12개 카테고리에 걸친 다양한 프롬프트 1,600개.
  • HPSv2: 사람 주석 107k개로 만든 자동 대리 지표(automated proxy).
  • ImageReward: MIT 라이선스의 프롬프트-이미지 선호 쌍 137k개.
  • PickScore: Pick-a-Pic 선호도 2.6M개로 학습.
  • Chatbot-Arena-style image arenas: https://imagearena.ai/ 등.

실패 양상은 다음과 같습니다.

  • 심판 분산(judge variance). 비전문가와 전문가는 선호가 다릅니다. 둘을 함께 사용합니다.
  • 프롬프트 분포. 체리픽(cherry-picked)된 프롬프트는 특정 모델 계열에 유리합니다. 어떤 프롬프트를 썼는지 항상 문서화합니다.
  • LLM 심판의 보상 해킹(reward hacking). GPT-4 심판은 보기에는 좋지만 틀린 출력에 속을 수 있습니다. 사람 평가와 교차해 삼각 검증(triangulate)합니다.

함께 사용하기

운영 평가 보고서(production eval report)에는 다음 항목이 모두 들어가야 합니다.

  1. 보류된 실제 분포(held-out real distribution)에 대해 샘플 10-30k장으로 측정한 FID. 샘플 품질을 봅니다.
  2. 같은 샘플과 그 프롬프트에 대해 측정한 CLIP 점수 또는 CMMD. 프롬프트 준수를 봅니다.
  3. 이전 모델 대비 블라인드 평가장(blinded arena)에서의 승률. 전반적 선호도를 봅니다.
  4. 실패 양상 분석. 무작위로 뽑은 출력 50개를 가져와 손 해부학(hand anatomy), 텍스트 렌더링(text rendering), 객체 개수의 일관성(consistent object count)처럼 잘 알려진 문제를 표시합니다.

단 하나의 지표는 거짓말일 수 있습니다. 서로 보강하는 세 지표와 정성 검토(qualitative review)가 함께 있을 때 비로소 주장(claim)이 됩니다.

직접 만들기

code/main.py는 합성 특징 벡터에서 FID, CLIP 점수 유사 지표, 엘로 집계를 구현합니다. 여기서는 4차원 벡터를 Inception 특징의 대체물로 사용합니다. 확인할 내용은 다음과 같습니다.

  • 작은 N과 큰 N에서 FID를 계산해 편향을 관찰합니다.
  • 특징 풀 사이의 코사인 유사도로 "CLIP 점수"를 흉내 냅니다.
  • 합성 선호도 흐름에서 엘로 갱신 규칙을 적용해 봅니다.

Step 1: 네 줄로 보는 FID

def fid(real_features, gen_features):
    mu_r, cov_r = mean_and_cov(real_features)
    mu_g, cov_g = mean_and_cov(gen_features)
    mean_diff = sum((a - b) ** 2 for a, b in zip(mu_r, mu_g))
    trace_term = trace(cov_r) + trace(cov_g) - 2 * sqrt_cov_product(cov_r, cov_g)
    return mean_diff + trace_term

Step 2: CLIP 방식의 코사인 유사도

def clip_like(image_feat, text_feat):
    dot = sum(a * b for a, b in zip(image_feat, text_feat))
    norm = math.sqrt(dot_self(image_feat) * dot_self(text_feat))
    return dot / max(norm, 1e-8)

Step 3: 엘로 집계

def elo_update(r_a, r_b, winner, k=32):
    expected_a = 1 / (1 + 10 ** ((r_b - r_a) / 400))
    actual_a = 1.0 if winner == "a" else 0.0
    r_a_new = r_a + k * (actual_a - expected_a)
    r_b_new = r_b - k * (actual_a - expected_a)
    return r_a_new, r_b_new

주의할 점

  • N=1000에서의 FID. N이 10k 미만이면 휴리스틱(heuristic)이 불안정합니다. 낮은 N에서 낮은 FID를 보고하는 논문은 지표 조작에 가깝습니다.
  • 해상도가 다른 FID 비교. Inception의 299×299 크기 조정이 특징 분포를 바꿉니다. 반드시 해상도를 맞춘 경우에만 비교합니다.
  • 하나의 시드만 보고하기. 최소 3개의 시드(seed)로 실행하고 표준편차를 함께 보고합니다.
  • 부정 프롬프트(negative prompt)로 CLIP 점수 부풀리기. 일부 파이프라인은 프롬프트에 과적합해 CLIP 점수를 인위적으로 올립니다. 시각적 과포화(visual saturation)가 일어났는지 확인합니다.
  • 프롬프트 중복에서 오는 엘로 편향. 두 모델이 학습 과정에서 벤치마크 프롬프트를 본 적이 있다면 엘로는 의미가 없습니다. 보류된 프롬프트 집합(held-out prompt set)을 사용합니다.
  • 유료 크라우드 평가의 쏠림. Prolific, MTurk 주석자는 비교적 젊고 기술 친화적인 쪽으로 치우치는 경향이 있습니다. 따로 모집한 예술/디자인 전문가와 섞어 평가합니다.

사용해보기

2026년 기준 운영 평가 프로토콜은 다음과 같습니다.

축(Pillar)최소(Minimum)권장(Recommended)
샘플 품질(Sample quality)보류된 실제 데이터 대비 10k FID+ 5k CMMD + 카테고리별 부분집합 FID
프롬프트 준수(Prompt adherence)30k CLIP 점수+ HPSv2 + ImageReward + VQA 방식 질의응답
선호도(Preference)기준 모델 대비 블라인드 쌍 200개+ 사람 평가 2000쌍 + LLM 심판 + Chatbot Arena
실패 분석(Failure analysis)사람이 직접 표시한 50개사람이 직접 표시한 500개 + 자동 안전 분류기

네 축이 하나의 보고서에 모두 담겨 있을 때 비로소 주장이 됩니다. 어느 하나만 있으면 그저 마케팅입니다.

산출물 만들기

outputs/skill-eval-report.md로 저장합니다. 이 스킬(skill)은 새 모델 체크포인트와 기준 모델을 입력으로 받아 샘플 크기, 지표, 실패 양상 조사, 승인 기준(sign-off criteria)을 포함한 전체 평가 계획을 출력합니다.

연습문제

  1. 쉬움. code/main.py를 실행합니다. 같은 합성 분포에서 N=100과 N=1000의 FID를 비교하고, 편향 크기(bias magnitude)를 보고합니다.
  2. 중간. 합성 CLIP 방식 특징에서 CMMD를 구현합니다. Jayasumana 등(2024)의 공식을 참고하고, 품질 차이에 대한 민감도(sensitivity)를 FID와 비교합니다.
  3. 어려움. HPSv2 설정을 재현합니다. Pick-a-Pic 부분집합(subset)에서 이미지-프롬프트 쌍 1000개를 가져와, 작은 CLIP 기반 점수기(scorer)를 선호도에 맞춰 미세조정(fine-tune)한 뒤 보류된 집합과의 일치율(agreement)을 측정합니다.

핵심 용어

용어흔한 설명실제 의미
FID"Fréchet Inception Distance"실제와 생성 Inception 특징에 가우시안을 맞춘 뒤 그 사이의 프레셰 거리를 계산한 값이다.
CLIP 점수(CLIP score)"텍스트-이미지 유사도(Text-image similarity)"CLIP 이미지 임베딩과 텍스트 임베딩 사이의 코사인 유사도다.
CMMD"FID의 대체 지표(FID's replacement)"CLIP 특징에 대해 계산한 최대 평균 차이(MMD)다. 편향이 더 작고 가우시안 가정이 없다.
IS(Inception Score)"Inception score"`KL(p(y
HPSv2 / ImageReward / PickScore"학습된 선호도 대리 지표(Learned preference proxies)"사람 선호도로 학습한 작은 모델로, 자동 심판으로 사용된다.
Elo"체스 등급(Chess rating)"쌍대 승리(pairwise wins)를 Bradley-Terry 방식으로 집계한 등급이다.
PartiPrompts"벤치마크 프롬프트 집합(The benchmark prompt set)"12개 카테고리에 걸친 Google 선별 프롬프트 1,600개다.
FD-DINO"자기지도 대체 지표(Self-sup replacement)"DINOv2 특징을 사용하는 프레셰 거리다. ImageNet 바깥 도메인에 더 잘 맞는다.

운영 참고: 평가도 하나의 추론 워크로드(inference workload)다

10k 샘플로 FID를 돌린다는 것은 이미지를 10k장 생성한다는 뜻입니다. 1024² 해상도의 50-step SDXL base를 단일 L4 GPU에서 단일 요청 추론(single-request inference)으로 돌리면 약 11시간이 소요됩니다. 평가 예산은 실제 비용이며, 이 상황은 정확히 오프라인 추론(offline inference) 시나리오에 해당합니다. 처리량(throughput)을 최대화하고 첫 토큰까지 시간(TTFT)은 무시합니다.

  • 배치를 크게 잡고, 지연 시간은 잊으십시오. 오프라인 평가에서는 메모리에 들어가는 가장 큰 정적 배치(static batching)를 사용합니다. 80GB H100에서 num_images_per_prompt=8로 호출한 pipe(...).images는 단일 요청 방식보다 실제 경과 시간(wall-clock)이 4-6배 빠릅니다.
  • 실제 특징은 캐시합니다. 실제 참조 집합에 대한 Inception(FID) 또는 CLIP(CLIP 점수, CMMD) 특징 추출은 한 번만 실행하고 .npz 파일로 저장해 둡니다. 평가할 때마다 다시 계산하지 않습니다.

CI / 회귀 게이트(regression gate) 용도로는 PR마다 500개 샘플 부분집합으로 FID + CLIP 점수를 약 30분 안에 돌리고, 야간(nightly) 작업으로 전체 10k FID + HPSv2 + Elo를 돌립니다.

더 읽을거리

실습 코드

이 강의의 실습 코드 1개

main
Code

산출물

이 강의에서 생성된 프롬프트, 스킬, 코드 산출물 1개

eval-report

Plan a full generative-model evaluation: sample quality, adherence, preference, failure audit.

Skill

확인 문제

3문제 · 모두 맞추면 완료 표시가 가능합니다

1.어떤 논문이 N=500개 생성 표본으로 256x256에서 FID=3.2를 측정한 뒤, 512x512로 리사이즈해 FID=2.8을 보고합니다. 두 수치 모두에 회의적이어야 하는 이유는 무엇인가요?

2.프로덕션 평가 보고서에서 새 모델이 우수한 FID(낮음)와 높은 CLIP 점수를 보이지만, 블라인드 A/B 테스트에서 사람 평가자들이 기준 모델보다 낮게 평가합니다. 이 불일치는 무엇을 드러내나요?

3.단일 L4 GPU에서 SDXL 1024x1024, 50 단계로 10k 표본 FID 평가를 실행하면 약 11시간이 걸립니다. CI/회귀 테스트와 야간 평가에 권장되는 전략은 무엇인가요?

0/3 답변 완료

추가 문제 풀기

AI가 강의 내용을 바탕으로 새로운 문제를 생성합니다