Ultralytics YOLO27 :

Validation des modèles avec Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Introduction#

La validation est une étape essentielle du pipeline de machine learning, qui te permet d’évaluer la qualité de tes modèles entraînés. Le mode Val d’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 constitue une 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.

Consulte la préversion de YOLO27 non publiée pour les résultats de validation préliminaires.



Watch: Ultralytics Modes Tutorial: Validation

Pourquoi effectuer une validation avec Ultralytics YOLO ?#

Voici pourquoi l’utilisation du mode Val de YOLO26 est avantageuse :

  • Précision : Obtiens des métriques précises telles que mAP50, mAP75 et mAP50-95 pour évaluer ton modèle de manière complète.
  • Simplicité : Utilise les fonctionnalités intégrées qui mémorisent les paramètres d’entraînement et simplifient le processus de validation.
  • Flexibilité : Valide ton modèle avec les mêmes jeux de données ou avec des jeux de données différents, ainsi qu’avec des tailles d’image 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 proposées par le mode Val de YOLO26 :

  • Paramètres automatisés : Les modèles mémorisent leurs configurations d’entraînement pour simplifier 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 de 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 les jeux de données personnalisés.
Conseil
  • Les modèles YOLO26 mémorisent automatiquement leurs paramètres d’entraînement. Tu peux donc facilement valider un modèle avec la même taille d’image et sur le jeu de données d’origine, en utilisant 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 son data d’entraînement ainsi que ses arguments comme attributs du modèle. Consulte la section Arguments ci-dessous pour obtenir la liste complète des arguments de validation.

Erreur de multiprocessus sous Windows

Sous Windows, tu peux recevoir un RuntimeError lors du lancement de 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

# 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 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 (par ex. coco8.yaml), qui doit inclure le chemin vers les données de validation. La classification utilise à la place un répertoire de jeu de données ou un nom de jeu de données intégré (par ex. imagenet10).
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 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, sauvegarde 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. Sur les jeux de données de détection, il évalue également les prédictions avec faster-coco-eval et rapporte le mAP pour les petits, moyens et grands objets, enregistré 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 pour les détections. Des valeurs plus faibles 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 explicitement la valeur conf, ou 0.25 lorsqu’elle est omise. La précision et le rappel récapitulatifs utilisent la confiance du F1 maximal et peuvent donc différer des valeurs dérivées de confusion_matrix.png. La valeur par défaut est 0.01 pour la validation OBB afin de réduire l’utilisation de la mémoire.
ioufloat0.7Définit le seuil d’Intersection over 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 detect, segment, pose et OBB, laissée à 300, cette valeur est augmentée pour atteindre le nombre d'objets étiquetés le plus élevé dans le jeu de données validé lorsqu'une image le dépasse, avec un avertissement ; toute autre valeur est conservée, accompagnée d'un avertissement indiquant que le rappel peut être limité lorsqu'une image le dépasse.
quantizeint ou strNonePrécision de validation : 16/"fp16" et 32/"fp32"/non défini sélectionnent le calcul en FP16 ou FP32 pour les modèles PyTorch et TorchScript ; les autres formats calculent à la précision que leur artefact et leur environnement d'exécution sélectionnent. À 16, OpenVINO arrondit toujours l'entrée en FP16 côté client et l'élargit à nouveau en FP32, sans modifier la précision du calcul dans l'environnement d'exécution. La quantification INT8/PTQ se configure lors de l'exportation, puis s'utilise en validant le modèle exporté. Remplace l'indicateur obsolète half.
devicestrNoneIndique le périphérique utilisé pour la validation (cpu, cuda:0, npu, npu:0, etc.). Lorsque None, le meilleur périphérique disponible est sélectionné automatiquement. Plusieurs périphériques CUDA peuvent être spécifiés en les séparant par des virgules.
dnnboolFalseSi True, utilise le module DNN d’OpenCV pour l’inférence de modèles ONNX, comme alternative aux méthodes d’inférence PyTorch.
plotsboolTrueLorsque défini sur True, génère et enregistre des graphiques comparant les prédictions aux annotations réelles, 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, utilise l’inférence rectangulaire pour les lots, réduisant le remplissage et pouvant améliorer la vitesse et l’efficacité en traitant les images selon leur rapport d’aspect d’origine. Ignoré pour la validation depth, qui étire chaque image jusqu’à un carré fixe imgsz au lieu d’ajouter du remplissage.
splitstr'val'Détermine la partition du jeu de données à utiliser pour la validation (val, test ou train). Permet de choisir librement le segment de données utilisé pour évaluer les performances.
fractionfloat, int ou list1.0Sous-ensemble de la division validée. Avec une liste [train, val, test], l'entrée correspondant à split s'applique (1 = division complète, entiers supérieurs à 1 = décomptes d'images ; les entrées omises sont complètes). Un scalaire s'applique uniquement avec split=train ; val et test utilisent ensuite la division complète.
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 de différents modèles.
namestrNoneNom de l’exécution de validation. Utilisé pour créer un sous-répertoire dans le dossier du projet, où sont stockés les journaux et sorties de validation.
verboseboolTrueSi True, affiche des informations détaillées pendant le processus de validation, notamment les métriques par classe, la progression des lots 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, pour faciliter l’analyse ultérieure, le post-traitement personnalisé ou l’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é, afin de fournir une sortie plus détaillée pour l’analyse et le filtrage.
workersint8Nombre de threads utilisés 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. 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 des détections au prix de la vitesse d’inférence en exécutant 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 agnostique aux classes, en supprimant les boîtes superposées ayant les scores les plus bas indépendamment de 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), 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_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 ne sont pas importantes.
visualizeboolFalseVisualise les annotations réelles, 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 obtenir une vue plus épurée des correspondances et des erreurs.
show_confboolTrueAffiche les scores de confiance dans les visualisations de validation lorsque visualize=True. Définis False pour obtenir une vue plus épurée des correspondances et des erreurs.
compilebool ou strFalseActive la compilation de graphes torch.compile de PyTorch 2.x avec backend='inductor'. Accepte True"default", False → désactive, ou un mode sous forme de chaîne tel que "default", "reduce-overhead", "max-autotune-no-cudagraphs". Repasse en mode eager avec un avertissement si la fonctionnalité n’est pas prise en charge.
channels_lastboolNoneUtilise le format mémoire channels_last (NHWC) pour la validation PyTorch native. None l’active automatiquement sur les processeurs Linux et Windows x86 avec oneDNN et PyTorch 1.13 ou version ultérieure, False le désactive et True le demande sur les processeurs x86 ou périphériques CUDA pris en charge. ARM64, MPS, les anciennes versions de PyTorch, les processeurs sans oneDNN et les formats exportés restent inchangés ; la validation pendant l’entraînement conserve la disposition du modèle d’entraînement.
nmsbool, optionnelNoneExécute l'inférence one-to-many avec NMS par défaut (None ou True). Définis False pour utiliser la tête one-to-one sans NMS lorsqu'elle est disponible. Consulte le guide de détection de bout en bout pour plus de détails.

Chacun de ces paramètres joue un rôle essentiel dans le processus de validation et permet une évaluation personnalisable et efficace des modèles YOLO. Ajuster ces paramètres en fonction de tes besoins et de tes ressources spécifiques peut aider à trouver le meilleur équilibre entre précision et performances.

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 montrent la validation de modèles YOLO avec des arguments personnalisés en Python et via la 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 matrice de confusion

Tu peux également enregistrer les résultats de la matrice de confusion 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, F1, TP, FP et FN par image (au seuil IoU de 0.5) pour toutes les tâches, à l’exception de la classification. 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 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 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é expose également des fonctions d'aide à l'exportation pour l'analyse en aval :

MéthodeType de retourDescription
summary()List[Dict[str, Any]]Convertit les résultats de validation en 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 ?#

Satisfait des métriques ? Exporte le modèle vers un format de déploiement. Si la précision n’est pas satisfaisante, reviens en arrière et réentraîne-le 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 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-95

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

    yolo val model=yolo26n.pt

    Pour personnaliser davantage la validation, tu peux ajuster différents arguments tels que imgsz, batch et conf en mode Python comme en mode 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 les performances du modèle. Elles comprennent :

    • 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 compris entre 0.5 et 0.95)

    Avec 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 essentiel d’examiner toutes ces métriques. Pour plus de détails, consulte la section 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 simplifie la validation.
    • Flexibilité : Tu peux effectuer la validation sur les mêmes jeux de données ou sur des jeux de données différents, ainsi qu’avec des tailles d’image 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. Pour en savoir plus sur ces avantages, consulte la section Pourquoi effectuer une validation avec Ultralytics YOLO.

  • Oui, tu peux valider ton modèle YOLO26 à l’aide d’un jeu de données personnalisé. Indique l’argument data avec le chemin vers le fichier YAML de ton jeu de données, qui doit inclure le chemin vers les données de validation. Pour la classification, il faut plutôt fournir le répertoire du jeu de données ou le nom d’un jeu de données intégré (par exemple, imagenet10).

    Remarque

    La validation est effectuée à l’aide des noms de classes propres au modèle, que tu peux afficher avec 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-95

    Exemple avec la CLI :

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

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

  • 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 avec l’API Python et la 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 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 le mAP pour les petits, moyens et grands objets via faster-coco-eval. Consulte les Arguments pour YOLO Model Validation pour plus de détails.

Commentaires