Validation de modèle avec Ultralytics YOLO

Ultralytics YOLO ecosystem and integrations

Introduction

La validation est une étape critique dans le pipeline de machine learning, te permettant d'évaluer la qualité de tes modèles entraînés. Le mode Val dans Ultralytics YOLO26 fournit une suite robuste d'outils et de métriques pour évaluer les performances de tes modèles de détection d'objets. Ce guide sert de ressource complète pour comprendre comment utiliser efficacement le mode Val afin de garantir que tes modèles sont à la fois précis et fiables.



Watch: Ultralytics Modes Tutorial: Validation

Pourquoi valider avec Ultralytics YOLO ?

Voici pourquoi utiliser le mode Val de YOLO26 est avantageux :

  • Précision : Obtiens des métriques précises comme mAP50, mAP75 et mAP50-95 pour évaluer ton modèle de manière exhaustive.
  • Commodité : Utilise des fonctionnalités intégrées qui mémorisent les paramètres d'entraînement, simplifiant ainsi le processus de validation.
  • Flexibilité : Valide ton modèle avec les mêmes jeux de données ou des jeux de données différents, et avec des tailles d'image variables.
  • Réglage des hyperparamètres : Utilise les métriques de validation pour affiner ton modèle et obtenir de meilleures performances.

Fonctionnalités clés du mode Val

Voici les fonctionnalités notables offertes par le mode Val de YOLO26 :

  • Paramètres automatisés : Les modèles mémorisent leurs configurations d'entraînement pour une validation simplifiée.
  • Prise en charge multi-métriques : Évalue ton modèle en fonction d'une gamme de métriques de précision.
  • Interface CLI et API Python : Choisis entre l'interface de ligne de commande ou l'API Python selon ta préférence pour la validation.
  • Compatibilité des données : Fonctionne de manière transparente avec les jeux de données utilisés lors de la phase d'entraînement ainsi qu'avec des jeux de données personnalisés.
Astuce
  • Les modèles YOLO26 mémorisent automatiquement leurs paramètres d'entraînement, tu peux donc facilement valider un modèle à la même taille d'image et sur le jeu de données d'origine avec simplement yolo val model=yolo26n.pt ou YOLO("yolo26n.pt").val()

Exemples d'utilisation

Valide la précision d'un modèle YOLO26n entraîné sur le jeu de données COCO8. Aucun argument n'est nécessaire car le model conserve ses data d'entraînement et ses arguments en tant qu'attributs de modèle. Consulte la section Arguments ci-dessous pour une liste complète des arguments de validation.

Erreur de multi-traitement sur Windows

Sur Windows, tu pourrais recevoir une RuntimeError lors du lancement de la validation en tant que script. Ajoute un bloc if __name__ == "__main__": avant ton code de validation pour résoudre ce problème.

Exemple
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val()  # no arguments needed, dataset and settings remembered
metrics.box.map  # map50-95
metrics.box.map50  # map50
metrics.box.map75  # map75
metrics.box.maps  # a list containing mAP50-95 for each category
metrics.box.image_metrics  # per-image metrics dictionary with precision, recall, F1, TP, FP, and FN

Arguments pour la validation des modèles YOLO

Lors de la validation des modèles YOLO, plusieurs arguments peuvent être affinés pour optimiser le processus d'évaluation. Ces arguments contrôlent des aspects tels que la taille de l'image d'entrée, le traitement par lots et les seuils de performance. Voici une analyse détaillée de chaque argument pour t'aider à personnaliser efficacement tes paramètres de validation.

ArgumentTypeDéfautDescription
datastrNoneSpécifie le chemin vers le fichier de configuration du jeu de données (par ex., coco8.yaml). Ce fichier doit inclure le chemin vers les données de validation.
imgszint640Définit la taille des images d'entrée. Toutes les images sont redimensionnées à cette dimension avant le traitement. Des tailles plus grandes peuvent améliorer la précision pour les petits objets mais augmentent le temps de calcul.
batchint16Définit le nombre d'images par lot. Des valeurs plus élevées utilisent la mémoire GPU plus efficacement mais nécessitent plus de VRAM. Ajuste selon les ressources matérielles disponibles.
save_jsonboolFalseSi True, enregistre les résultats dans un fichier JSON pour une analyse plus approfondie, une intégration avec d'autres outils ou une soumission à des serveurs d'évaluation comme COCO.
conffloat0.001Définit le seuil de confiance minimal pour les détections. Des valeurs plus faibles augmentent le rappel mais peuvent introduire plus de faux positifs. Utilisé pendant la validation pour calculer les courbes précision-rappel.
ioufloat0.7Définit le seuil d'Intersection Sur Union pour la Suppression Non Maximale. Contrôle l'élimination des détections en double.
max_detint300Limite le nombre maximal de détections par image. Utile dans les scènes denses pour éviter des détections excessives et gérer les ressources informatiques.
halfboolFalseActive le calcul en demi-précision (FP16), réduisant l'utilisation de la mémoire et augmentant potentiellement la vitesse avec un impact minimal sur la précision.
devicestrNoneSpécifie le périphérique pour la validation (cpu, cuda:0, npu, npu:0, etc.). Lorsque None, sélectionne automatiquement le meilleur périphérique disponible. Plusieurs périphériques CUDA peuvent être spécifiés avec une séparation par virgule.
dnnboolFalseSi True, utilise le module DNN d'OpenCV pour l'inférence du modèle ONNX, offrant une alternative aux méthodes d'inférence de PyTorch.
plotsboolTrueLorsqu'il est défini sur True, génère et enregistre des graphiques des prédictions par rapport à la vérité terrain, des matrices de confusion et des courbes PR pour une évaluation visuelle de la performance du modèle.
classeslist[int]NoneSpécifie une liste d'IDs de classe à évaluer. Utile pour filtrer et se concentrer uniquement sur certaines classes lors de l'évaluation.
rectboolTrueSi True, utilise l'inférence rectangulaire pour le traitement par lots, réduisant le rembourrage et augmentant potentiellement la vitesse et l'efficacité en traitant les images dans leur rapport d'aspect original.
splitstr'val'Détermine la division du jeu de données à utiliser pour la validation (val, test ou train). Permet une flexibilité dans le choix du segment de données pour l'évaluation de la performance.
projectstrNoneNom du répertoire de projet où les sorties de validation sont enregistrées. Aide à organiser les résultats de différentes expériences ou modèles.
namestrNoneNom de l'exécution de validation. Utilisé pour créer un sous-répertoire dans le dossier de projet, où les journaux et les sorties de validation sont stockés.
verboseboolTrueSi True, affiche des informations détaillées pendant le processus de validation, y compris les métriques par classe, la progression du lot et des informations de débogage supplémentaires.
save_txtboolFalseSi True, enregistre les résultats de détection dans des fichiers texte, avec un fichier par image, utile pour une analyse plus approfondie, un post-traitement personnalisé ou une intégration avec d'autres systèmes.
save_confboolFalseSi True, inclut les valeurs de confiance dans les fichiers texte enregistrés lorsque save_txt est activé, fournissant une sortie plus détaillée pour l'analyse et le filtrage.
workersint8Nombre de threads de travail pour le chargement des données. Des valeurs plus élevées peuvent accélérer le prétraitement des données mais peuvent augmenter l'utilisation du CPU. Régler sur 0 utilise le thread principal, ce qui peut être plus stable dans certains environnements.
augmentboolFalseActive l'augmentation en temps de test (TTA) pendant la validation, améliorant potentiellement la précision de détection au prix d'une vitesse d'inférence réduite en effectuant l'inférence sur des versions transformées de l'entrée.
agnostic_nmsboolFalseActive la Suppression Non Maximale agnostique aux classes, qui fusionne les boîtes qui se chevauchent indépendamment de leur classe prédite. Utile pour les applications axées sur les instances. Pour les modèles de bout en bout (YOLO26, YOLOv10), cela empêche uniquement la même détection d'apparaître avec plusieurs étiquettes de classe (doublons IoU=1.0) et n'effectue pas de suppression basée sur le seuil IoU entre des boîtes distinctes.
single_clsboolFalseTraite toutes les classes comme une seule classe pendant la validation. Utile pour évaluer la performance du modèle sur des tâches de détection binaire ou lorsque les distinctions de classe ne sont pas importantes.
visualizeboolFalseVisualise les vérités terrain, les vrais positifs, les faux positifs et les faux négatifs pour chaque image. Utile pour le débogage et l'interprétation du modèle.
compilebool ou strFalseActive la compilation de graphe torch.compile de PyTorch 2.x avec backend='inductor'. Accepte True"default", False → désactive, ou un mode chaîne comme "default", "reduce-overhead", "max-autotune-no-cudagraphs". Revient au mode eager avec un avertissement si non pris en charge.
end2endboolNoneRemplace le mode de bout en bout dans les modèles YOLO qui supportent l'inférence sans NMS (YOLO26, YOLOv10). Le définir sur False te permet d'exécuter la validation en utilisant le pipeline NMS traditionnel, te permettant en plus d'utiliser l'argument iou.

Chacun de ces paramètres joue un rôle vital dans le processus de validation, permettant une évaluation personnalisable et efficace des modèles YOLO. Ajuster ces paramètres en fonction de tes besoins et ressources spécifiques peut t'aider à atteindre le meilleur équilibre entre précision et performance.

Exemple de validation avec des arguments



Watch: How to Export Model Validation Results in CSV, JSON, SQL, Polars DataFrame & More

Explore model validation and different export methods in Google Colab

Les exemples ci-dessous présentent la validation des modèles YOLO avec des arguments personnalisés en Python et via CLI.

Exemple
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Customize validation settings
metrics = model.val(data="coco8.yaml", imgsz=640, batch=16, conf=0.25, iou=0.7, device="0")
Exporter la ConfusionMatrix

Tu peux également enregistrer les résultats de la ConfusionMatrix dans différents formats en utilisant le code fourni.

from ultralytics import YOLO

model = YOLO("yolo26n.pt")

results = model.val(data="coco8.yaml", plots=True)
print(results.confusion_matrix.to_df())
Précision, rappel et F1 par image

La validation stocke les métriques de précision, rappel, F1, TP, FP et FN par image (au seuil IoU 0,5) pour toutes les tâches sauf la classification. Accède-y via results.box.image_metrics pour la détection et OBB, results.seg.image_metrics pour la segmentation, et results.pose.image_metrics pour la pose une fois la validation terminée.

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Validate and access per-image metrics
results = model.val(data="coco8.yaml")

# image_metrics is a dictionary with image filenames as keys
print(results.box.image_metrics)
# Output: {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}

# Access metrics for a specific image
results.box.image_metrics["image1.jpg"]  # {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}

Chaque entrée dans image_metrics contient les clés suivantes :

CléDescription
precisionScore de précision pour l'image (tp / (tp + fp)).
recallScore de rappel pour l'image (tp / (tp + fn)).
f1Moyenne harmonique de la précision et du rappel.
tpNombre de vrais positifs pour l'image.
fpNombre de faux positifs pour l'image.
fnNombre de faux négatifs pour l'image.

Cette fonctionnalité est disponible pour les tâches de détection, segmentation, pose et OBB.

MéthodeType de retourDescription
summary()List[Dict[str, Any]]Convertit les résultats de validation en un dictionnaire résumé.
to_df()DataFrameRetourne les résultats de validation sous forme de Polars DataFrame structuré.
to_csv()strExporte les résultats de validation au format CSV et retourne la chaîne CSV.
to_json()strExporte les résultats de validation au format JSON et retourne la chaîne JSON.

Pour plus de détails, consulte la documentation de la classe DataExportMixin.

FAQ

Comment valider mon modèle YOLO26 avec Ultralytics ?

Pour valider ton modèle YOLO26, tu peux utiliser le mode Val fourni par Ultralytics. Par exemple, en utilisant l'API Python, tu peux charger un modèle et lancer la validation avec :

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Validate the model
metrics = model.val()
print(metrics.box.map)  # map50-95

Alternativement, tu peux utiliser l'interface de ligne de commande (CLI) :

yolo val model=yolo26n.pt

For further customization, you can adjust various arguments like imgsz, batch, and conf in both Python and CLI modes. Check the Arguments for YOLO Model Validation section for the full list of parameters.

Quelles métriques puis-je obtenir lors de la validation d'un modèle YOLO26 ?

La validation du modèle YOLO26 fournit plusieurs métriques clés pour évaluer ses performances. Celles-ci incluent :

  • mAP50 (précision moyenne à un seuil IoU de 0,5)
  • mAP75 (précision moyenne à un seuil IoU de 0,75)
  • mAP50-95 (précision moyenne à travers plusieurs seuils IoU de 0,5 à 0,95)

En utilisant l'API Python, tu peux accéder à ces métriques comme suit :

metrics = model.val()  # assumes `model` has been loaded
print(metrics.box.map)  # mAP50-95
print(metrics.box.map50)  # mAP50
print(metrics.box.map75)  # mAP75
print(metrics.box.maps)  # list of mAP50-95 for each category
print(metrics.box.image_metrics)  # per-image metrics dictionary with precision, recall, F1, TP, FP, and FN

Pour une évaluation complète des performances, il est crucial de passer en revue toutes ces métriques. Pour plus de détails, réfère-toi aux Fonctionnalités clés du mode Val.

Quels sont les avantages d'utiliser Ultralytics YOLO pour la validation ?

Utiliser Ultralytics YOLO pour la validation offre plusieurs avantages :

  • Précision : YOLO26 offre des métriques de performance précises, incluant mAP50, mAP75 et mAP50-95.
  • Commodité : Les modèles mémorisent leurs paramètres d'entraînement, rendant la validation directe.
  • Flexibilité : Tu peux valider avec les mêmes jeux de données ou des jeux de données différents, et avec des tailles d'image variables.
  • Réglage des hyperparamètres : Les métriques de validation aident à affiner les modèles pour de meilleures performances.

Ces avantages garantissent que tes modèles sont évalués minutieusement et peuvent être optimisés pour des résultats supérieurs. Apprends-en plus sur ces avantages dans la section Pourquoi valider avec Ultralytics YOLO.

Puis-je valider mon modèle YOLO26 en utilisant un jeu de données personnalisé ?

Oui, tu peux valider ton modèle YOLO26 en utilisant un jeu de données personnalisé. Spécifie l'argument data avec le chemin vers ton fichier de configuration de jeu de données. Ce fichier doit inclure le chemin vers les données de validation.

Remarque

La validation est effectuée en utilisant les noms de classes propres au modèle, que tu peux visualiser via model.names, et qui peuvent être différents de ceux spécifiés dans le fichier de configuration du jeu de données.

Exemple en Python :

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Validate with a custom dataset
metrics = model.val(data="path/to/your/custom_dataset.yaml")
print(metrics.box.map)  # map50-95

Exemple en utilisant CLI :

yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yaml

Pour plus d'options personnalisables lors de la validation, consulte la section Exemple de validation avec des arguments.

Comment enregistrer les résultats de validation dans un fichier JSON dans YOLO26 ?

Pour enregistrer les résultats de validation dans un fichier JSON, tu peux définir l'argument save_json sur True lors de l'exécution de la validation. Cela peut être fait à la fois dans l'API Python et via CLI.

Exemple en Python :

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Save validation results to JSON
metrics = model.val(save_json=True)

Exemple en utilisant CLI :

yolo val model=yolo26n.pt save_json=True

Cette fonctionnalité est particulièrement utile pour une analyse plus approfondie ou pour l'intégration avec d'autres outils. Consulte les Arguments pour la validation des modèles YOLO pour plus de détails.

Commentaires