Fréchet Inception Distance (FID)
Apprends comment la distance inception de Fréchet évalue la qualité, la fidélité et la diversité des images d'IA générative, ainsi que la manière de calculer et d'interpréter les scores.
La Fréchet Inception Distance (FID) est une métrique permettant de comparer des images produites par un modèle génératif avec un ensemble de référence d'images réelles. Elle convertit les deux ensembles en caractéristiques visuelles apprises, résume chaque distribution de caractéristiques et mesure la distance entre elles. Une FID plus faible indique généralement que les images générées sont plus similaires aux images réelles en termes de qualité visuelle et de diversité, tandis qu'une FID plus élevée suggère des artefacts, une variation manquante ou une disparité dans le contenu.
Fonctionnement de la FID#
La FID évalue des ensembles d'images plutôt que des paires d'images individuelles. Cela la rend utile pour évaluer des systèmes d'intelligence artificielle générative tels que les réseaux antagonistes génératifs et les modèles de diffusion.
Le calcul suit quatre étapes principales :
- Les images réelles et générées traversent un extracteur de caractéristiques Inception v3, généralement préentraîné sur ImageNet.
- Le réseau convertit chaque image en un plongement, une représentation numérique de ses caractéristiques visuelles de plus haut niveau.
- La FID estime la moyenne et la matrice de covariance des ensembles de caractéristiques réelles et générées. La moyenne représente leurs centres, tandis que la covariance décrit la façon dont les caractéristiques varient ensemble.
- Elle combine la distance au carré entre les moyennes avec la différence entre les matrices de covariance. Ce calcul inclut une racine carrée de matrice.
Le score FID résultant est non négatif. Des distributions de caractéristiques identiques produiraient zéro dans la limite idéalisée, bien que des échantillons finis et des effets numériques signifient que même deux sous-ensembles d'images réelles peuvent produire un score non nul.
Interprétation d'un score FID#
Plus c'est bas, mieux c'est, mais il n'y a pas de seuil universel pour un « bon » score FID. L'interprétation dépend du jeu de données, de la résolution des images, du nombre d'échantillons, du pipeline de prétraitement et de l'extracteur de caractéristiques. Les scores ne doivent être comparés que lorsque ces conditions sont cohérentes.
La FID réagit à deux aspects importants de l'imagerie générée :
- Fidélité : Des images floues, des textures irréalistes, des objets déformés et d'autres artefacts visuels peuvent éloigner les caractéristiques générées de la distribution réelle.
- Diversité : Des sorties répétitives ou un effondrement de modèle réduisent la variation des caractéristiques, modifiant la covariance de la distribution générée.
Cependant, la FID n'explique pas pourquoi un score a changé. Elle peut également omettre des cas d'échec rares mais importants, des images mémorisées, un alignement incorrect des instructions ou un biais de jeu de données. Les équipes doivent donc combiner la FID avec une inspection visuelle, des tests spécifiques à l'application et une analyse par sous-groupes.
FID et métriques associées#
La FID est souvent confondue avec d'autres métriques de génération d'images et de vision par ordinateur :
- Inception Score : Évalue les images générées sans les comparer directement à des images de référence réelles. La FID est généralement plus informative sur la disparité des distributions car elle utilise à la fois des échantillons réels et générés.
- Kernel Inception Distance : Compare également les distributions de caractéristiques mais utilise un estimateur basé sur le noyau. Il peut être utile lorsqu'une estimation efficace en termes d'échantillons ou non biaisée est importante.
- Précision moyenne globale : Mesure si un détecteur d'objets classifie et localise correctement les objets étiquetés. La FID évalue les distributions d'images générées, et non la précision de la détection.
- Similarité perceptuelle : compare généralement des paires d'images correspondantes. La FID évalue plutôt si deux collections ont des statistiques globales similaires.
Applications concrètes#
Une application pratique consiste à évaluer des données synthétiques pour l'inspection de fabrication. Une équipe peut générer des images de rayures, de fissures ou de composants manquants et calculer la FID par rapport à des photographies conservées d'une ligne de production réelle. Un score élevé peut révéler que l'éclairage synthétique, les textures ou les formes de défauts ne ressemblent pas aux conditions de déploiement. Après avoir amélioré le générateur, l'équipe doit toujours entraîner son détecteur et utiliser le mode de validation Ultralytics pour vérifier les performances spécifiques à la tâche.
Un deuxième exemple est la génération de scènes routières simulées. Les ingénieurs peuvent créer des images de nuit, de pluie ou de brouillard pour élargir les données d'entraînement à la conduite autonome. La FID peut comparer chaque condition synthétique avec des images réelles de cet environnement. Une grande distance avertit d'une inadéquation de domaine qui pourrait amener un détecteur en aval à apprendre des arrière-plans irréalistes ou des artefacts météorologiques plutôt que des caractéristiques routières transférables.
La gestion des jeux de données de la plateforme Ultralytics peut aider les équipes à organiser, inspecter et versionner les répartitions d'images réelles et synthétiques avant l'entraînement et le déploiement.
Calcul de la FID en Python#
L'implémentation TorchMetrics FID documentée accepte des lots d'images réelles et générées :
import torch
from torchmetrics.image.fid import FrechetInceptionDistance
generator = torch.Generator().manual_seed(7)
real_images = torch.randint(0, 256, (64, 3, 64, 64), dtype=torch.uint8, generator=generator)
generated_images = torch.randint(32, 224, (64, 3, 64, 64), dtype=torch.uint8, generator=generator)
fid = FrechetInceptionDistance(feature=64)
fid.set_dtype(torch.float64)
fid.update(real_images, real=True)
fid.update(generated_images, real=False)
print(f"FID: {fid.compute().item():.3f}")Ce petit exemple utilise des caractéristiques à 64 dimensions pour une démonstration rapide. Les comparaisons de benchmarks standard utilisent généralement la représentation par défaut à 2 048 dimensions et beaucoup plus d'images. Pour une évaluation fiable, gardez le prétraitement et le nombre d'échantillons fixes, rapportez la configuration exacte, répétez les mesures lorsque cela est possible et complétez la FID par le flux de travail d'évaluation des modèles Ultralytics lorsque les données générées prennent en charge une tâche de vision en aval.









