Validation de modèle avec Ultralytics YOLO#
Introduction#
La validation est une étape critique dans le pipeline d'apprentissage automatique, 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 t'assurer que tes modèles sont à la fois précis et fiables.
Watch: Ultralytics Modes Tutorial: Validation
Pourquoi valider avec Ultralytics YOLO ?#
Voici pourquoi l'utilisation du mode Val de YOLO26 est avantageuse :
- 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 différents, ainsi qu'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 simple.
- Support multi-métriques : Évalue ton modèle en fonction d'une gamme de métriques de précision.
- API Python et CLI : Choisis entre l'interface en 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 pendant la phase d'entraînement ainsi qu'avec des jeux de données personnalisés.
- Les modèles YOLO26 se souviennent automatiquement de leurs paramètres d'entraînement, tu peux donc valider facilement 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 son data et ses arguments en tant qu'attributs du modèle. Consulte la section Arguments ci-dessous pour obtenir la liste complète des arguments de validation.
Sous Windows, tu peux recevoir un RuntimeError lors du lancement de la validation en tant que script. Ajoute un bloc if __name__ == "__main__": avant ton code de validation pour le résoudre.
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 de modèles YOLO#
Lors de la validation des modèles YOLO, plusieurs arguments peuvent être ajusté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. Tu trouveras ci-dessous 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 YAML du dataset (par exemple, coco8.yaml), qui doit inclure le chemin vers les données de validation. La classification prend plutôt un répertoire de dataset ou un nom de dataset intégré (par exemple, imagenet10). |
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 tels que COCO. |
conf | float | 0.001 | Définit le seuil de confiance minimal pour les détections. Des valeurs plus basses augmentent le rappel mais peuvent introduire davantage de faux positifs. Les courbes précision-rappel utilisent par défaut 0.001 ; les matrices de confusion de détection utilisent une valeur explicite conf, ou 0.25 lorsqu'elle est omise. La précision et le rappel récapitulatifs utilisent la confiance max-F1, ils peuvent donc différer des valeurs dérivées de confusion_matrix.png. Par défaut à 0.01 pour la validation OBB afin de réduire l'utilisation de la mémoire. |
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 maximum de détections par image. Utile dans les scènes denses pour éviter des détections excessives et gérer les ressources informatiques. |
quantize | int ou str | None | Précision de validation : 16/"fp16" active la validation FP16 sur les GPU pris en charge ; 32/"fp32"/non défini correspond à FP32. La quantification INT8/PTQ est configurée lors de l'exportation, puis utilisée en validant le modèle exporté. Remplace l'ancien fanion déprécié half. |
device | str | None | Spécifie le périphérique pour la validation (cpu, cuda:0, npu, npu:0, etc.). Lorsque réglé sur None, sélectionne automatiquement le meilleur périphérique disponible. Plusieurs périphériques CUDA peuvent être spécifiés en les séparant par des virgules. |
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 PyTorch. |
plots | bool | True | Lorsqu'il est défini sur True, génère et enregistre des graphiques de prédictions par rapport à la vérité terrain (ground truth), des matrices de confusion et des courbes PR pour une évaluation visuelle des performances du modèle. |
classes | list[int] | None | Spécifie une liste d'IDs de classes à é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, ce qui réduit le remplissage et peut augmenter la vitesse et l'efficacité en traitant les images dans leur rapport hauteur/largeur d'origine. Ignoré pour la validation depth, qui étire chaque image vers un carré fixe imgsz au lieu d'utiliser un remplissage. |
split | str | 'val' | Détermine la division du dataset à utiliser pour la validation (val, test ou train). Offre de la flexibilité dans le choix du segment de données pour l'évaluation des performances. |
project | str | None | Nom du répertoire du 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 du 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 des lots 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, à raison d'un fichier par image, ce qui est utile pour une analyse plus poussée, 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 des résultats plus détaillés 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. Définir sur 0 utilise le thread principal, ce qui peut être plus stable dans certains environnements. |
augment | bool | False | Active l'augmentation au moment du test (TTA) pendant la validation, ce qui peut améliorer la précision de la détection au détriment de la vitesse d'inférence en exécutant l'inférence sur des versions transformées de l'entrée. Uniquement disponible pour les modèles PyTorch d'Ultralytics. |
agnostic_nms | bool | False | Active la Non-Maximum Suppression agnostique aux classes, en supprimant les boîtes superposées aux scores les plus bas 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 d'IoU entre des boîtes distinctes. |
single_cls | bool | False | Traite toutes les classes comme une seule classe pendant la validation. Utile pour évaluer les performances 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. |
show_labels | bool | True | Affiche les étiquettes de classe dans les visualisations de validation lorsque visualize=True. Définis sur False pour une vue plus épurée des correspondances et des erreurs. |
show_conf | bool | True | Affiche les scores de confiance dans les visualisations de validation lorsque visualize=True. Définis sur False pour une vue plus épurée des correspondances et des erreurs. |
compile | bool ou str | False | Active la compilation de graphes PyTorch 2.x torch.compile avec backend='inductor'. Accepte True → "default", False → désactive, ou un mode textuel tel que "default", "reduce-overhead", "max-autotune-no-cudagraphs". Revient au mode dynamique (eager) avec un avertissement si non pris en charge. |
channels_last | bool | False | Utilise le format de mémoire channels_last (NHWC) pour les convolutions lors de la validation, ce qui accélère les GPU CUDA Tensor Core sans modifier les résultats. S'applique uniquement aux modèles PyTorch natifs ; ignoré pour le CPU, le MPS et les formats exportés tels que TensorRT et ONNX. |
end2end | bool | None | Remplace le mode de bout en bout dans les modèles YOLO qui prennent en charge l'inférence sans NMS (YOLO26, YOLOv10). Le définir sur False te permet d'exécuter la validation à l'aide du pipeline NMS traditionnel, tout en te permettant 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 spécifiques et de tes ressources 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 de modèles YOLO avec des arguments personnalisés en Python et en 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, de rappel, F1, TP, FP et FN par image (au seuil IoU de 0,5) pour toutes les tâches
sauf la classification. Accède-les via results.box.image_metrics pour la détection et l'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 | Renvoie les résultats de validation sous forme de Polars DataFrame structuré. |
to_csv() | str | Exporte les résultats de validation au format CSV et renvoie la chaîne CSV. |
to_json() | str | Exporte les résultats de validation au format JSON et renvoie la chaîne JSON. |
Pour plus de détails, consulte la documentation de la classe DataExportMixin.
Et après ?#
Satisfait des métriques ? Exporte le modèle vers un format de déploiement. Si la précision n'est pas au rendez-vous, reviens en arrière et réentraîne avec de nouveaux hyperparamètres ou davantage de données d'entraînement.
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 exécuter 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 en ligne de commande (CLI) :
yolo val model=yolo26n.ptPour plus de personnalisation, tu peux ajuster différents arguments tels que imgsz, batch et conf en modes Python et CLI. Consulte la section Arguments pour la validation de modèles YOLO pour obtenir la liste complète des paramètres.
Quelles métriques puis-je obtenir de la validation d'un modèle YOLO26 ?#
La validation du modèle YOLO26 fournit plusieurs métriques clés pour évaluer les performances du modèle. 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 sur 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 simple.
- Flexibilité : Tu peux valider avec les mêmes jeux de données ou des jeux différents, ainsi que des tailles d'image variables.
- Optimisation 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 de manière approfondie 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 custom dataset. Spécifie l'argument data avec le chemin vers ton fichier YAML de dataset, qui doit inclure le chemin vers les validation data. La classification prend plutôt un répertoire de dataset ou un nom de dataset intégré (par ex. imagenet10).
La validation est effectuée en utilisant les propres noms de classes du modèle, que tu peux afficher en utilisant model.names, et qui peuvent différer de ceux définis par le dataset lui-même.
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 puis-je 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 en 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 poussée ou une intégration avec d'autres outils. Consulte les Arguments pour la validation de modèles YOLO pour plus de détails.