Fréchet Inception Distance (FID)
Fréchet Inception Distance(FID)は、生成画像のInception特徴量の統計を実写画像と比較して評価します。算出方法と比較方法を解説します。
フレシェ・インセプション距離(FID)は、生成画像の統計量と実画像の統計量を比較して、画像生成モデルを評価する指標です。両方の画像セットを学習済みInception v3ネットワークに通し、それぞれの特徴量を平均と共分散を持つ多変量ガウス分布として要約します。FIDは2つのガウス分布間のフレシェ距離です。値は低いほど良く、スコアが0の場合は両方の特徴量セットの平均と共分散が一致しています。ヨハネス・ケプラー大学リンツ校のMartin Heusel氏らは、2017年の論文GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash EquilibriumでFIDを紹介しました。FIDはすぐに、敵対的生成ネットワーク(GAN)、そして後には拡散モデルの標準指標としてInception Scoreに取って代わりました。
FIDの計算方法#
- 一般に50,000枚の大量の画像を生成し、通常は学習セットから実画像の参照セットを用意します。
- すべての画像を299 x 299ピクセルにリサイズし、画像分類用にImageNetで学習したInception v3、つまり畳み込みニューラルネットワークに通します。最後のプーリング層から得られる2,048次元の出力を、その画像の埋め込みとして使います。
- 実画像の埋め込みと生成画像の埋め込みについて、それぞれ平均ベクトルと共分散行列を計算します。
- 次のように組み合わせます。FID = (2つの平均値間の二乗距離) + trace(C_real + C_gen - 2 x sqrt(C_real x C_gen)。ここでsqrtは行列平方根です。
生成画像と実画像の平均的な違いが大きいほど、第1項の値が大きくなります。たとえば、色かぶりやコンテンツ構成の誤りが該当します。第2項は、モード崩壊のように多様性が損なわれると大きくなります。モード崩壊は、GANの生成器がわずかな種類の出力しか生成しなくなる現象です。1つの値で忠実度と多様性の両方を評価できるため、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を達成しました。MS-COCOのキャプション30,000件を使ったゼロショットのテキストから画像を生成するタスクでは、GoogleのImagenのスコアは7.27で、DALL-E 2の10.39を下回りました。
その他の生成画像指標#
- Inception Score(IS): 生成画像のみを対象に、Inceptionがどれほど高い確信度で、かつ多様に分類するかを評価します。実データを参照しないため、誤った種類の鮮明な画像を生成するモデルを検出できません。
- カーネルInception距離(KID): 同じInception特徴量を、不偏カーネル推定量で比較します。そのため、少数のサンプルでもより信頼性の高い評価ができます。
- CLIPスコア: 画像がテキストプロンプトとどの程度一致するかを測定します。FIDではこの評価ができないため、テキストから画像を生成するモデルでは通常、両方の指標を報告します。
- 生成モデルの適合率と再現率: FIDの単一スコアを、生成画像のうち実画像らしく見える割合を表す忠実度と、モデルが再現する実画像の多様性の割合を表す網羅性に分けます。
- FD-DINOv2: 自己教師ありのビジョントランスフォーマーであるDINOv2の特徴量に対し、同じフレシェ距離を計算します。George Stein氏らは2023年にこの指標を提案しました。それに先立つ大規模な人間評価では、FIDが拡散モデルの画像に対する人々のリアルさの評価を反映できないことが判明していました。
動画モデルでもフレシェ動画距離を使って同じ考え方を適用します。VBenchなどの評価スイートは、単一の距離ではなく、動画品質を個別の評価軸に分けて測定します。
合成学習データのFID#
FIDは、検出器の学習に使う前の合成データのスクリーニングにも利用できます。自動車向けビジョンで使う夜間運転や、欠陥検出で扱う特定の製品不良など、まれなシーンの生成画像をデプロイ先のカメラで撮影した実画像と比較すれば、学習に時間をかける前にドメインギャップを検出できます。最終確認では下流の精度を評価します。Ultralytics YOLO26を合成画像あり・なしの両方で学習し、検証モードで同じ実画像のホールドアウトセットに対する平均適合率(mAP)を比較します。










