Validation de modèle avec Ultralytics YOLO
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.
- 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.ptouYOLO("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.
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.
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 FNArguments 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.
| Argument | Type | Défaut | Description |
|---|---|---|---|
data | str | None | Spé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. |
imgsz | int | 640 | Dé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. |
batch | int | 16 | Dé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_json | bool | False | Si 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. |
conf | float | 0.001 | Dé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. |
iou | float | 0.7 | Définit le seuil d'Intersection Sur Union pour la Suppression Non Maximale. Contrôle l'élimination des détections en double. |
max_det | int | 300 | Limite 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. |
half | bool | False | Active 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. |
device | str | None | Spé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. |
dnn | bool | False | Si 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. |
plots | bool | True | Lorsqu'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. |
classes | list[int] | None | Spécifie une liste d'IDs de classe à évaluer. Utile pour filtrer et se concentrer uniquement sur certaines classes lors de l'évaluation. |
rect | bool | True | Si 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. |
split | str | '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. |
project | str | None | Nom 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. |
name | str | None | Nom 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. |
verbose | bool | True | Si 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_txt | bool | False | Si 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_conf | bool | False | Si 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. |
workers | int | 8 | Nombre 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. |
augment | bool | False | Active 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_nms | bool | False | Active 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_cls | bool | False | Traite 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. |
visualize | bool | False | Visualise 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. |
compile | bool ou str | False | Active 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. |
end2end | bool | None | Remplace 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
Les exemples ci-dessous présentent la validation des modèles YOLO avec des arguments personnalisés en Python et via CLI.
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")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())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 |
|---|---|
precision | Score de précision pour l'image (tp / (tp + fp)). |
recall | Score de rappel pour l'image (tp / (tp + fn)). |
f1 | Moyenne harmonique de la précision et du rappel. |
tp | Nombre de vrais positifs pour l'image. |
fp | Nombre de faux positifs pour l'image. |
fn | Nombre de faux négatifs pour l'image. |
Cette fonctionnalité est disponible pour les tâches de détection, segmentation, pose et OBB.
| Méthode | Type de retour | Description |
|---|---|---|
summary() | List[Dict[str, Any]] | Convertit les résultats de validation en un dictionnaire résumé. |
to_df() | DataFrame | Retourne les résultats de validation sous forme de Polars DataFrame structuré. |
to_csv() | str | Exporte les résultats de validation au format CSV et retourne la chaîne CSV. |
to_json() | str | Exporte 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-95Alternativement, tu peux utiliser l'interface de ligne de commande (CLI) :
yolo val model=yolo26n.ptFor 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 FNPour 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.
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-95Exemple en utilisant CLI :
yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yamlPour 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=TrueCette 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.