Ultralytics YOLO27 :
Get Started

Validation de modèles avec Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Introduction#

La validation est une étape essentielle du pipeline d’apprentissage automatique, qui te permet d’évaluer la qualité de tes modèles entraînés. Le mode Val d’Ultralytics YOLO26 propose une suite complète d’outils et de métriques pour évaluer les performances de tes modèles de détection d’objets. Ce guide est une ressource complète pour comprendre comment utiliser efficacement le mode Val et garantir la précision et la fiabilité de tes modèles.

Consulte l’aperçu préliminaire de YOLO27 non publié pour connaître les premiers résultats de validation.



Regarder : Tutoriel sur les modes Ultralytics : validation

Pourquoi valider avec Ultralytics YOLO ?#

Voici pourquoi 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.
  • Simplicité : Utilise les fonctionnalités intégrées qui mémorisent les paramètres d’entraînement, ce qui simplifie le processus de validation.
  • Flexibilité : Valide ton modèle avec les mêmes jeux de données ou des jeux différents, et avec des tailles d’image identiques ou différentes.
  • Optimisation des hyperparamètres : Utilise les métriques de validation pour affiner ton modèle et améliorer ses performances.

Fonctionnalités clés du mode Val#

Voici les principales fonctionnalités du mode Val de YOLO26 :

  • Paramètres automatisés : Les modèles mémorisent leurs configurations d’entraînement pour faciliter la validation.
  • Prise en charge de plusieurs métriques : Évalue ton modèle à l’aide de diverses métriques de précision.
  • CLI et API Python : Choisis l’interface en ligne de commande ou l’API Python selon tes préférences pour la validation.
  • Compatibilité des données : Fonctionne parfaitement avec les jeux de données utilisés pendant l’entraînement ainsi qu’avec des jeux de données personnalisés.
Conseil
  • Les modèles YOLO26 mémorisent automatiquement leurs paramètres d’entraînement ; yolo val model=path/to/best.pt ou YOLO("path/to/best.pt").val() effectue donc la validation avec la taille d’image d’entraînement sur le jeu de données d’origine. Les poids officiels utilisent par défaut le jeu de données associé à la tâche ; passe data pour remplacer ce choix.

Exemples d'utilisation#

Valide la précision d’un modèle YOLO26n entraîné. Aucun argument n’est nécessaire, car model conserve data ainsi que les arguments d’entraînement comme attributs du modèle : path/to/best.pt effectue la validation sur le jeu de données utilisé pour l’entraînement. Les poids officiels enregistrent le chemin d’accès à un jeu de données d’entraînement qui n’existe pas sur ta machine ; ils utilisent donc par défaut coco8.yaml, le jeu de données associé à la tâche, et affichent un avertissement. Passe data pour valider le modèle sur un autre jeu de données. Consulte la section Arguments ci-dessous pour obtenir la liste complète des arguments de validation.

Erreur de traitement multiprocessus sous Windows

Sous Windows, tu peux recevoir un RuntimeError lorsque tu lances la validation sous forme de script. Ajoute un bloc if __name__ == "__main__": avant ton code de validation pour résoudre le problème.

Exemple
from ultralytics import YOLO

# Charger un modèle
model = YOLO("yolo26n.pt")  # charger un modèle officiel
model = YOLO("path/to/best.pt")  # charger un modèle personnalisé

# Valider le modèle
metrics = model.val()  # aucun argument nécessaire, le jeu de données et les paramètres sont mémorisés
metrics.box.map  # map50-95
metrics.box.map50  # map50
metrics.box.map75  # map75
metrics.box.maps  # une liste contenant mAP50-95 pour chaque catégorie
metrics.box.image_metrics  # dictionnaire de métriques par image comprenant la précision, le rappel, le F1, les TP, FP et FN

Arguments pour la validation des 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 notamment la taille des images d’entrée, le traitement par lots et les seuils de performance. Tu trouveras ci-dessous une description détaillée de chaque argument pour personnaliser efficacement tes paramètres de validation.

ArgumentTypeValeur par défautDescription
datastrNoneIndique le chemin vers le fichier YAML du jeu de données (p. ex. coco8.yaml), qui doit inclure le chemin vers les données de validation. Pour la classification, indique plutôt un répertoire de jeu de données ou le nom d'un jeu de données intégré (p. ex. imagenet10).
imgszint640Définit la taille des images d'entrée. Toutes les images sont redimensionnées à cette taille avant le traitement. Des dimensions 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 élevées exploitent plus efficacement la mémoire GPU, mais nécessitent davantage de VRAM. Ajuste cette valeur en fonction des ressources matérielles disponibles.
save_jsonboolFalseSi True, enregistre les résultats dans un fichier JSON pour une analyse ultérieure, une intégration avec d'autres outils ou une soumission à des serveurs d'évaluation comme COCO. Pour les jeux de données de détection, évalue également les prédictions avec faster-coco-eval et indique les mAP pour les objets petits, moyens et grands, consignées pendant l'entraînement sous les noms metrics/mAP_small(B), metrics/mAP_medium(B) et metrics/mAP_large(B) dans results.csv.
conffloat0.001Définit le seuil de confiance minimal des détections. Des valeurs plus basses augmentent le rappel, mais peuvent entraîner davantage de faux positifs. Les courbes précision-rappel, le mAP et les matrices de confusion des détections utilisent toutes cette valeur ; un conf plus élevé, par exemple 0.25, produit une matrice plus proche de la sortie de prédiction, mais peut réduire le mAP. La précision et le rappel récapitulatifs utilisent le seuil de confiance au F1 maximal ; ils peuvent donc différer des valeurs calculées à partir de confusion_matrix.png. La valeur par défaut est 0.01 pour la validation OBB afin de réduire l'utilisation mémoire.
ioufloat0.7Définit le seuil d'intersection sur l'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. Pour les tâches de détection, de segmentation, de pose et OBB, si la valeur est toujours de 300, elle est portée au nombre maximal d'objets annotés dans la partition de validation lorsqu'une image dépasse cette limite, avec un avertissement ; toute autre valeur est conservée, avec un avertissement indiquant que le rappel peut être plafonné lorsqu'une image dépasse la limite.
quantizeint ou strNonePrécision de validation : 16/"fp16" et 32/"fp32"/unset sélectionnent le calcul en FP16 ou en FP32 pour les modèles PyTorch et TorchScript (FP32 sur CPU) ; les autres formats utilisent la précision définie par leur artefact et leur environnement d’exécution. Avec 16, OpenVINO arrondit toujours l’entrée en FP16 côté client, puis la reconvertit en FP32, sans modifier la précision d’exécution. La quantification INT8/PTQ est configurée lors de l’exportation, puis utilisée pour valider le modèle exporté. Remplace l’indicateur half obsolète.
devicestrNoneIndique l'appareil utilisé pour la validation (cpu, cuda:0, npu, npu:0, etc.). Si None, sélectionne automatiquement le meilleur appareil disponible. Plusieurs appareils CUDA peuvent être indiqués en les séparant par des virgules.
dnnboolFalseSi True, utilise le module DNN d'OpenCV pour l'inférence des modèles ONNX, comme solution de remplacement aux méthodes d'inférence PyTorch.
plotsboolTrueLorsque la valeur est True, génère et enregistre des graphiques comparant les prédictions à la vérité terrain, des matrices de confusion et des courbes PR pour évaluer visuellement les performances du modèle.
classeslist[int]NoneIndique une liste d'identifiants de classe à évaluer. Utile pour filtrer les classes et se concentrer uniquement sur certaines d'entre elles pendant l'évaluation.
rectboolTrueSi True, regroupe les lots d'images aux rapports d'aspect similaires en formes rectangulaires. Ajoute un demi-pas avant d'arrondir chaque dimension au multiple supérieur du pas (sans demi-pas supplémentaire pour semantic). Avec un pas de 32, une image de 640×640 à imgsz=640 devient une image de 672×672 avec un décalage de 16 px, tandis que predict utilise 640×640 ; les métriques peuvent donc différer. rect=False correspond à predict pour les images carrées. Ignoré pour depth, qui étire les images pour leur donner une forme carrée de imgsz.
splitstr'val'Détermine la partition du jeu de données utilisée pour la validation (val, test ou train). Permet de choisir la portion de données utilisée pour évaluer les performances.
fractionfloat, int ou list1.0Sous-ensemble de la partition validée. Avec une liste [train, val, test], l'entrée correspondant à split s'applique (1 = partition complète, les entiers supérieurs à 1 = nombre d'images ; les entrées omises correspondent à la partition complète). Une valeur scalaire ne s'applique qu'avec split=train ; val et test utilisent alors la partition complète.
projectstrNoneNom du répertoire de projet où sont enregistrées les sorties de validation. Aide à organiser les résultats de différentes expériences ou de différents modèles.
namestrNoneNom de l'exécution de validation. Sert à créer un sous-répertoire dans le dossier du projet, où sont stockés les journaux et les résultats de validation.
verboseboolTrueSi True, affiche des informations détaillées pendant la validation, notamment les métriques par classe, la progression des lots et des informations supplémentaires de débogage.
save_txtboolFalseSi True, enregistre les résultats de détection dans des fichiers texte, un fichier par image, pour faciliter l'analyse ultérieure, le post-traitement personnalisé ou l'intégration à d'autres systèmes.
save_confboolFalseSi True, inclut les valeurs de confiance dans les fichiers texte enregistrés lorsque save_txt est activé, afin de fournir des résultats plus détaillés pour l'analyse et le filtrage.
workersint8Nombre de threads de travail pour le chargement des données. Des valeurs élevées peuvent accélérer le prétraitement des données, mais aussi augmenter l'utilisation du CPU. La valeur 0 utilise le thread principal, ce qui peut être plus stable dans certains environnements.
augmentboolFalseActive l'augmentation au moment du test (TTA) pendant la validation, ce qui peut améliorer la précision de détection au prix d'une inférence plus lente, en effectuant l'inférence sur des versions transformées de l'entrée. Disponible uniquement pour les modèles PyTorch Ultralytics.
agnostic_nmsboolFalseActive la suppression non maximale indépendante des classes, qui supprime les boîtes qui se chevauchent et dont le score est inférieur, quelle que soit leur classe prédite. Utile pour les applications axées sur les instances. Avec l'inférence sans NMS (nms=False sur YOLO26 ou YOLOv10), cette option 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 fondée sur un seuil IoU entre des boîtes distinctes.
single_clsboolFalseTraite 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 entre classes n'ont pas d'importance.
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.
show_labelsboolTrueAffiche les étiquettes de classe dans les visualisations de validation lorsque visualize=True. Définis False pour mieux distinguer les correspondances et les erreurs.
show_confboolTrueAffiche les scores de confiance dans les visualisations de validation lorsque visualize=True. Définis False pour mieux distinguer les correspondances et les erreurs.
compilebool ou strFalseActive la compilation de graphes torch.compile de PyTorch 2.x avec backend='inductor'. Accepte True → "default", False → désactivation, ou un mode sous forme de chaîne tel que "default", "reduce-overhead", "max-autotune-no-cudagraphs". En cas d’incompatibilité, revient au mode eager avec un avertissement.
channels_lastboolNoneUtilise le format mémoire channels_last (NHWC) pour la validation PyTorch native. None l'active automatiquement sur les processeurs x86 sous Linux et Windows compatibles avec oneDNN, avec PyTorch 1.13 ou version ultérieure ; False le désactive et True le demande sur les processeurs x86 ou les appareils CUDA pris en charge. Les appareils ARM64, MPS, les versions antérieures de PyTorch, les processeurs sans oneDNN et les formats exportés ne sont pas concernés ; la validation pendant l'entraînement conserve le format mémoire du modèle d'entraînement.
nmsbool, facultatifNoneExécute par défaut une inférence un-vers-plusieurs avec NMS (None ou True). Définis False pour utiliser la tête un-vers-un sans NMS lorsqu'elle est disponible. Consulte le guide sur la détection de bout en bout pour en savoir plus.

Chacun de ces paramètres joue un rôle essentiel dans le processus de validation et permet d’évaluer les modèles YOLO de manière personnalisable et efficace. Ajuster ces paramètres en fonction de tes besoins et de tes ressources peut t’aider à trouver le meilleur équilibre entre précision et performances.

Exemple de validation avec des arguments#



Regarder : Comment exporter les résultats de validation d’un modèle au format CSV, JSON, SQL, Polars DataFrame et plus encore

Explore model validation and different export methods in Google Colab

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

Exemple
from ultralytics import YOLO

# Charger un modèle
model = YOLO("yolo26n.pt")

# Personnaliser les paramètres de validation
metrics = model.val(data="coco8.yaml", imgsz=640, batch=16, conf=0.25, iou=0.7, device="0")
Exporter ConfusionMatrix

Tu peux également enregistrer les résultats de ConfusionMatrix dans différents formats à l’aide du 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 enregistre les métriques de précision, de rappel, de F1, de TP, de FP et de FN par image (au seuil IoU de 0.5) pour toutes les tâches, à l’exception de la classification. Une fois la validation terminée, tu peux y accéder 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.

from ultralytics import YOLO

# Charger un modèle
model = YOLO("yolo26n.pt")

# Valider et accéder aux métriques par image
results = model.val(data="coco8.yaml")

# image_metrics est un dictionnaire dont les clés sont les noms de fichiers image
print(results.box.image_metrics)
# Sortie : {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}

# Accéder aux métriques d’une image spécifique
results.box.image_metrics["image1.jpg"]  # {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}

Chaque entrée de 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, de segmentation, de pose et OBB.

L’objet de métriques renvoyé fournit également des méthodes d’exportation pour les analyses ultérieures :

MéthodeType de retourDescription
summary()List[Dict[str, Any]]Convertit les résultats de validation en un dictionnaire récapitulatif.
to_df()DataFrameRenvoie les résultats de validation sous forme de DataFrame Polars structuré.
to_csv()strExporte les résultats de validation au format CSV et renvoie la chaîne CSV.
to_json()strExporte 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 ensuite ?#

Les métriques te conviennent ? Exporte le modèle dans un format de déploiement. Si la précision n’est pas satisfaisante, reprends l’entraînement avec des hyperparamètres différents ou davantage de données d’entraînement.

FAQ#

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

    from ultralytics import YOLO
    
    # Charger un modèle
    model = YOLO("yolo26n.pt")
    
    # Valider le modèle
    metrics = model.val()
    print(metrics.box.map)  # map50-95

    Tu peux également utiliser l’interface en ligne de commande (CLI) :

    yolo detect val model=yolo26n.pt data=coco8.yaml

    Pour personnaliser davantage la validation, tu peux ajuster divers arguments comme imgsz, batch et conf, en Python comme via la CLI. Consulte la section Arguments pour la validation des modèles YOLO pour obtenir la liste complète des paramètres.

  • La validation d’un modèle YOLO26 fournit plusieurs métriques clés pour évaluer ses performances, notamment :

    • 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)

    Avec l’API Python, tu peux accéder à ces métriques comme suit :

    metrics = model.val()  # suppose que `model` a été chargé
    print(metrics.box.map)  # mAP50-95
    print(metrics.box.map50)  # mAP50
    print(metrics.box.map75)  # mAP75
    print(metrics.box.maps)  # liste de mAP50-95 pour chaque catégorie
    print(metrics.box.image_metrics)  # dictionnaire de métriques par image comprenant la précision, le rappel, le F1, les TP, FP et FN

    Pour évaluer complètement les performances, il est essentiel d’examiner toutes ces métriques. Pour plus de détails, consulte les fonctionnalités clés du mode Val.

  • L’utilisation d’Ultralytics YOLO pour la validation présente plusieurs avantages :

    • Précision : YOLO26 fournit des métriques de performance précises, notamment mAP50, mAP75 et mAP50-95.
    • Simplicité : Les modèles mémorisent leurs paramètres d’entraînement, ce qui facilite la validation.
    • Flexibilité : Tu peux valider le modèle sur les mêmes jeux de données ou sur des jeux différents, et avec des tailles d’image identiques ou différentes.
    • Optimisation des hyperparamètres : Les métriques de validation aident à affiner les modèles pour améliorer leurs performances.

    Ces avantages garantissent une évaluation approfondie de tes modèles et permettent de les optimiser pour obtenir de meilleurs résultats. Découvre-en davantage sur ces avantages dans la section Pourquoi valider avec Ultralytics YOLO.

  • Oui, tu peux valider ton modèle YOLO26 à l’aide d’un jeu de données personnalisé. Spécifie l’argument data avec le chemin d’accès au fichier YAML de ton jeu de données, qui doit inclure le chemin d’accès aux données de validation. Pour la classification, indique plutôt un répertoire de jeu de données ou le nom d’un jeu de données intégré (par exemple, imagenet10).

    Remarque

    La validation utilise les noms de classe propres au modèle, que tu peux consulter avec model.names ; ces noms peuvent différer de ceux définis dans le jeu de données.

    Exemple en Python :

    from ultralytics import YOLO
    
    # Charger un modèle
    model = YOLO("yolo26n.pt")
    
    # Valider avec un jeu de données personnalisé
    metrics = model.val(data="path/to/your/custom_dataset.yaml")
    print(metrics.box.map)  # map50-95

    Exemple avec la CLI :

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

    Pour découvrir davantage d’options de personnalisation pendant la validation, consulte la section Exemple de validation avec des arguments.

  • Pour enregistrer les résultats de validation dans un fichier JSON, définis l’argument save_json sur True lors de l’exécution de la validation. Tu peux le faire avec l’API Python comme avec la CLI.

    Exemple en Python :

    from ultralytics import YOLO
    
    # Charger un modèle
    model = YOLO("yolo26n.pt")
    
    # Enregistrer les résultats de validation au format JSON
    metrics = model.val(save_json=True)

    Exemple avec la CLI :

    yolo val model=yolo26n.pt save_json=True

    Sur les jeux de données de détection, save_json=True indique également la mAP pour les objets de petite, moyenne et grande taille via faster-coco-eval. Consulte la section Arguments pour la validation des modèles YOLO pour plus de détails.

Commentaires