Entraînement de modèles avec Ultralytics YOLO#
Introduction#
L'entraînement d'un modèle de deep learning consiste à lui fournir des données et à ajuster ses paramètres afin qu'il puisse effectuer des prédictions précises. Le mode Train d'Ultralytics YOLO26 est conçu pour entraîner efficacement des modèles de détection d'objets tout en exploitant pleinement les capacités du matériel moderne. Ce guide couvre tous les détails dont tu as besoin pour commencer à entraîner tes propres modèles à l'aide de l'ensemble robuste de fonctionnalités de YOLO26. Si tu n'as pas encore installé Ultralytics, commence par le guide de démarrage rapide.
Consulte l'aperçu unreleased YOLO27 preview pour voir les exemples d'entraînement prévus.
Watch: How to Train a YOLO model on Your Custom Dataset in Google Colab.
Pourquoi choisir Ultralytics YOLO pour l'entraînement ?#
Voici quelques raisons convaincantes d'opter pour le mode Train de YOLO26 :
- Efficacité : exploite au maximum ton matériel, que tu utilises une configuration avec un seul GPU ou que tu passes à plusieurs GPU.
- Polyvalence : entraîne tes modèles sur des jeux de données personnalisés, en plus de jeux de données disponibles tels que COCO, VOC et ImageNet.
- Simplicité d'utilisation : des interfaces CLI et Python simples, mais puissantes, pour une expérience d'entraînement fluide.
- Flexibilité des hyperparamètres : une vaste gamme d'hyperparamètres personnalisables pour affiner les performances du modèle. Pour un contrôle plus approfondi, tu peux personnaliser le trainer lui-même.
- Entraînement dans le cloud : entraîne tes modèles sur des GPU cloud via Ultralytics Platform, avec des métriques en temps réel et une sauvegarde automatique des checkpoints.
Fonctionnalités clés du mode Train#
Voici quelques fonctionnalités notables du mode Train de YOLO26 :
- Téléchargement automatique des jeux de données : les configurations de jeux de données qui indiquent une source de téléchargement sont téléchargées automatiquement lors de leur première utilisation, par exemple
yolo train data=coco8.yaml. Consulte la présentation des jeux de données pour connaître les formats et jeux de données pris en charge. - Prise en charge de plusieurs GPU : répartis facilement ton entraînement sur plusieurs GPU afin d'accélérer le processus.
- Configuration des hyperparamètres : possibilité de modifier les hyperparamètres via des fichiers de configuration YAML ou des arguments CLI.
- Visualisation et suivi : suivi en temps réel des métriques d'entraînement et visualisation du processus d'apprentissage pour obtenir de meilleures informations.
Exemples d’utilisation#
Entraîne YOLO26n sur le jeu de données COCO8 pendant 100 époques, avec une taille d'image de 640. Le périphérique d'entraînement peut être spécifié à l'aide de l'argument device. Si aucun argument n'est transmis, le GPU device=0 sera utilisé lorsqu'il est disponible ; sinon, device='cpu' sera utilisé. Consulte la section Arguments ci-dessous pour obtenir la liste complète des arguments d'entraînement.
Sous Windows, tu peux recevoir une erreur RuntimeError lors du lancement de l'entraînement sous forme de script. Ajoute un bloc if __name__ == "__main__": avant ton code d'entraînement pour résoudre le problème.
Le périphérique est déterminé automatiquement. Si un GPU est disponible, il sera utilisé (périphérique CUDA 0 par défaut) ; sinon, l'entraînement démarrera sur le CPU.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.yaml") # build a new model from YAML
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n.yaml").load("yolo26n.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)Entraînement sur plusieurs GPU#
L'entraînement sur plusieurs GPU permet d'utiliser plus efficacement les ressources matérielles disponibles en répartissant la charge d'entraînement sur plusieurs GPU. Cette fonctionnalité est disponible via l'API Python et l'interface de ligne de commande. Pour activer l'entraînement sur plusieurs GPU, indique les identifiants des périphériques GPU que tu souhaites utiliser.
Pour entraîner un modèle avec 2 GPU, les périphériques CUDA 0 et 1, utilise les commandes suivantes. Étends la configuration à d'autres GPU si nécessaire.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model with 2 GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])
# Train the model with the two most idle GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])L'entraînement sur plusieurs GPU ne fonctionne pas sous Windows avec les wheels PyTorch officielles pour torch>=2.4. Ultralytics lance DDP via torch.distributed.run, dont l'étape de rendezvous construit un TCPStore utilisant par défaut le backend libuv depuis PyTorch 2.4, tandis que les wheels Windows officielles sont compilées sans libuv. L'entraînement s'arrête immédiatement avec :
RuntimeError: use_libuv was requested but PyTorch was built without libuv support
La définition de USE_LIBUV=0 ne résout pas le problème, car le rendezvous construit directement TCPStore et ce chemin de code ne lit jamais la variable. Entraîne tes modèles sous Linux ou avec WSL2 pour utiliser plusieurs GPU, ou entraîne-les sur un seul GPU avec device=0 sous Windows.
Lorsque tu spécifies plusieurs périphériques (par exemple, device=[0, 1]), Ultralytics lance en interne une nouvelle instance du trainer et exécute torch.distributed.run en arrière-plan. Cela fonctionne de manière transparente avec l'utilisation standard de la CLI et les scripts Python non modifiés.
Cependant, si ton script contient des composants personnalisés, tels qu'un trainer, un validateur, un jeu de données ou un pipeline d'augmentation personnalisé, ces objets ne peuvent pas être automatiquement sérialisés et transférés aux sous-processus DDP. Dans ce cas, tu dois lancer directement ton script avec torch.distributed.run :
python -m torch.distributed.run --nproc_per_node 2 your_training_script.pyL'entraînement sur GPU AMD utilise une version de PyTorch ROCm avec la syntaxe standard device=0 ou device=cuda:0. Consulte le guide d'intégration AMD pour l'installation et l'état actuel du support pour MIGraphX, DirectML et Ryzen AI NPU.
L'entraînement sur GPU Intel utilise device=xpu:0, ou plusieurs identifiants XPU avec une version PyTorch fournissant XCCL.
Entraînement sur NPU Huawei Ascend#
Ultralytics prend en charge l'entraînement et la validation sur les NPU Huawei Ascend via torch_npu. Installe des versions mutuellement compatibles de CANN, PyTorch et torch_npu en suivant le guide d'installation de l'extension Ascend pour PyTorch, puis charge l'environnement CANN avant de lancer Ultralytics :
source /usr/local/Ascend/ascend-toolkit/set_env.shfrom ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Train on one Ascend NPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0")
# Train across two Ascend NPUs with HCCL
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0,1")Les fonctionnalités d'entraînement standard, y compris l'AMP, la validation, la création de points de contrôle et la reprise, utilisent le NPU actif. AutoBatch est disponible pour l'entraînement sur un seul NPU, tandis que plusieurs identifiants de NPU lancent un entraînement distribué via HCCL. Consulte le guide d'intégration Huawei Ascend pour l'exportation et le déploiement du modèle après l'entraînement.
Entraînement sur GPU inactif#
L'entraînement sur GPU inactif permet de sélectionner automatiquement les GPU les moins utilisés dans les systèmes équipés de plusieurs GPU, afin d'optimiser l'utilisation des ressources sans sélection manuelle du GPU. Cette fonctionnalité identifie les GPU disponibles en fonction des métriques d'utilisation et de la disponibilité de la VRAM.
Pour sélectionner et utiliser automatiquement le ou les GPU les plus inactifs pour l'entraînement, utilise le paramètre de périphérique -1. Cette option est particulièrement utile dans les environnements informatiques partagés ou sur les serveurs utilisés par plusieurs personnes.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train using the single most idle GPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=-1)
# Train using the two most idle GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])L'algorithme de sélection automatique donne la priorité aux GPU présentant :
- Un pourcentage d'utilisation actuel plus faible
- Une mémoire disponible plus importante (VRAM libre)
- Une température et une consommation électrique plus faibles
Cette fonctionnalité est particulièrement utile dans les environnements informatiques partagés ou lors de l'exécution de plusieurs tâches d'entraînement sur différents modèles. Elle s'adapte automatiquement à l'évolution des conditions du système, garantissant une allocation optimale des ressources sans intervention manuelle.
Entraînement MPS sur Apple Silicon#
Grâce à la prise en charge des puces Apple Silicon intégrée aux modèles Ultralytics YOLO, tu peux désormais entraîner tes modèles sur des appareils utilisant le puissant framework Metal Performance Shaders (MPS). MPS offre une méthode hautement performante pour exécuter des tâches de calcul et de traitement d'image sur le silicium personnalisé d'Apple.
Pour activer l'entraînement sur les puces Apple Silicon, tu dois spécifier « mps » comme périphérique lors du lancement du processus d'entraînement. Voici un exemple montrant comment procéder avec Python et via la ligne de commande :
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model with MPS
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")En exploitant la puissance de calcul des puces Apple Silicon, cette option permet de traiter les tâches d'entraînement plus efficacement. Pour obtenir des instructions plus détaillées et découvrir les options de configuration avancées, consulte la documentation PyTorch MPS.
Reprise des entraînements interrompus#
La reprise de l'entraînement à partir d'un état précédemment sauvegardé est une fonctionnalité essentielle lorsque tu travailles avec des modèles de deep learning. Elle peut s'avérer utile dans diverses situations, par exemple lorsque le processus d'entraînement a été interrompu de manière inattendue ou lorsque tu souhaites continuer à entraîner un modèle avec de nouvelles données ou pendant un plus grand nombre d'époques.
Quand l'entraînement est repris, Ultralytics YOLO charge les poids du dernier modèle sauvegardé et restaure également l'état de l'optimiseur, le planificateur de learning rate, le numéro d'époque et le dataset. Cela te permet de continuer le processus d'entraînement de manière transparente là où il s'était arrêté. Passe un explicite data= avec resume pour continuer sur un dataset différent au lieu de celui du point de contrôle.
Tu peux facilement reprendre un entraînement dans Ultralytics YOLO en définissant l'argument resume sur True lors de l'appel de la méthode train, et en spécifiant le chemin du fichier .pt contenant les poids du modèle partiellement entraîné.
Voici un exemple montrant comment reprendre un entraînement interrompu avec Python et via la ligne de commande :
from ultralytics import YOLO
# Load a model
model = YOLO("path/to/last.pt") # load a partially trained model
# Resume training
results = model.train(resume=True)En définissant resume=True, la fonction train poursuivra l'entraînement là où il s'était arrêté, en utilisant l'état stocké dans le fichier 'path/to/last.pt'. Si l'argument resume est omis ou défini sur False, la fonction train démarrera une nouvelle session d'entraînement.
N'oublie pas que les checkpoints sont sauvegardés à la fin de chaque époque par défaut, ou à intervalles fixes à l'aide de l'argument save_period ; tu dois donc terminer au moins 1 époque pour reprendre une session d'entraînement.
Paramètres d'entraînement#
Les paramètres d'entraînement des modèles YOLO comprennent divers hyperparamètres et configurations utilisés pendant le processus d'entraînement. Ces paramètres influencent les performances, la vitesse et la précision du modèle. Les principaux paramètres d'entraînement incluent la taille des lots, le taux d'apprentissage, le momentum et la décroissance des poids. De plus, le choix de l'optimiseur, de la fonction de perte et de la composition du jeu de données d'entraînement peut avoir un impact sur le processus d'entraînement. Un réglage précis et des expérimentations avec ces paramètres sont essentiels pour optimiser les performances.
Optimiseur MuSGD#
Dans YOLO26, MuSGD est un optimiseur hybride qui combine les mises à jour SGD standard avec des mises à jour orthogonalisées de type Muon.
Il est recommandé pour les entraînements YOLO26 plus longs et les jeux de données plus volumineux, car les mises à jour Muon orthogonalisées peuvent contribuer à stabiliser l'optimisation.
Seuls les poids linéaires 2D et les filtres convolutionnels 4D (remodelés en 2D) reçoivent la mise à jour de type Muon conjointement avec SGD, tandis que tous les autres paramètres, tels que les poids de normalisation par lots et les termes de biais, restent sur SGD standard.
Lorsque optimizer=auto est utilisé, Ultralytics sélectionne automatiquement MuSGD pour les entraînements plus longs (généralement lorsque le nombre d'itérations est > 10000). Pour les entraînements plus courts, le trainer revient à AdamW.
Exemple d'utilisation :
yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGDConsulte l'implémentation dans ultralytics/optim/muon.py et la logique de sélection automatique de l'optimiseur dans BaseTrainer.build_optimizer.
| Argument | Type | Valeur par défaut | Description |
|---|---|---|---|
model | str | None | Spécifie le fichier du modèle à utiliser pour l'entraînement. Accepte un chemin vers un modèle préentraîné .pt ou un fichier de configuration .yaml. Indispensable pour définir la structure du modèle ou initialiser les poids. |
data | str | None | Chemin vers le fichier YAML du jeu de données (par exemple, coco8.yaml), qui contient les chemins vers les données d'entraînement et de validation, les noms des classes et le nombre de classes. La classification accepte plutôt un répertoire de données ou le nom d'un jeu de données intégré (par exemple, imagenet10). |
epochs | int | 100 | Nombre total d'époques d'entraînement. Chaque époque représente un passage complet sur l'ensemble du jeu de données. La modification de cette valeur peut influer sur la durée de l'entraînement et les performances du modèle. |
time | float | None | Durée maximale d'entraînement en heures. Si cette valeur est définie, elle remplace l'argument epochs et permet à l'entraînement de s'arrêter automatiquement après la durée indiquée. Utile pour les scénarios d'entraînement soumis à des contraintes de temps. |
patience | int | 100 | Nombre d'époques à attendre sans amélioration des métriques de validation avant d'arrêter prématurément l'entraînement. Aide à prévenir le surapprentissage en arrêtant l'entraînement lorsque les performances plafonnent. |
batch | int ou float | 16 | Taille du lot, avec trois modes : une valeur entière (par exemple, batch=16), le mode automatique pour une utilisation de 60 % de la mémoire GPU (batch=-1) ou le mode automatique avec une fraction d'utilisation définie (batch=0.70). |
imgsz | int | 640 | Taille cible des images pour l'entraînement. Les images sont redimensionnées en carrés dont les côtés sont égaux à la valeur indiquée (si rect=False), en préservant le rapport hauteur/largeur pour les modèles YOLO, mais pas pour RT-DETR. Influe sur la précision du modèle et sa complexité de calcul. |
save | bool | True | Active l'enregistrement des points de contrôle d'entraînement et des poids finaux du modèle. Utile pour reprendre l'entraînement ou le déploiement du modèle. |
save_period | int | -1 | Fréquence d'enregistrement des points de contrôle du modèle, indiquée en époques. La valeur -1 désactive cette fonctionnalité. Utile pour enregistrer des modèles intermédiaires lors de longues sessions d'entraînement. |
cache | bool | False | Active la mise en cache des images du jeu de données en mémoire (True/ram), sur le disque (disk) ou la désactive (False). Accélère l'entraînement en réduisant les E/S disque, au prix d'une utilisation accrue de la mémoire. |
device | int ou str ou list | None | Spécifie le ou les périphériques de calcul utilisés pour l'entraînement : un seul GPU (device=0), plusieurs GPU (device=[0,1]), le CPU (device=cpu), MPS pour les processeurs Apple (device=mps), un NPU Huawei Ascend (device=npu:0 ou device=npu:0,1), ou la sélection automatique d'un GPU inactif (device=-1) ou de plusieurs GPU inactifs (device=[-1,-1]). |
workers | int | 8 | Nombre de threads de travail pour le chargement des données (par RANK lors d'un entraînement Multi-GPU). Influe sur la vitesse du prétraitement et de l'alimentation du modèle en données, en particulier dans les configurations multi-GPU. |
project | str | None | Nom du répertoire de projet dans lequel les sorties d'entraînement sont enregistrées. Permet de stocker de manière organisée les différentes expériences. |
name | str | None | Nom de l'exécution d'entraînement. Utilisé pour créer un sous-répertoire dans le dossier du projet, où sont stockés les journaux et les sorties d'entraînement. |
exist_ok | bool | False | Si la valeur est True, autorise l'écrasement d'un répertoire projet/nom existant. Utile pour les expérimentations itératives sans devoir supprimer manuellement les sorties précédentes. |
save_dir | str | None | Spécifie le répertoire exact dans lequel les sorties de l'exécution sont enregistrées, en remplaçant la combinaison project/name. Le chemin est utilisé tel quel sans incrémentation automatique ; les exécutions successives réutilisent donc le même répertoire. |
pretrained | bool ou str | True | Détermine s'il faut commencer l'entraînement à partir de poids préentraînés. Peut prendre une valeur booléenne ou un chemin sous forme de chaîne vers les poids à charger. pretrained=False entraîne le modèle à partir de poids initialisés aléatoirement tout en conservant son architecture. |
cls_remap | bool | True | Lors d'un réglage fin sur plusieurs jeux de données, copie les lignes de la tête de classification préentraînée dans le nouveau modèle lorsque les noms de classes correspondent, afin que les classes communes conservent leur biais appris, ainsi que leurs poids lorsque la largeur de la tête reste inchangée. S'applique que le nombre de classes diffère ou corresponde avec un ordre de classes différent. |
optimizer | str | 'auto' | Choix de l'optimiseur pour l'entraînement. Les options incluent SGD, MuSGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp ou auto pour choisir AdamW ou MuSGD en fonction du nombre d'itérations d'entraînement. Influe sur la vitesse et la stabilité de la convergence. |
seed | int | 0 | Définit la graine aléatoire pour l'entraînement afin de garantir la reproductibilité des résultats entre les exécutions utilisant les mêmes configurations. |
deterministic | bool | True | Force l'utilisation d'algorithmes déterministes, ce qui garantit la reproductibilité, mais peut influer sur les performances et la vitesse en raison de la restriction des algorithmes non déterministes. |
verbose | bool | True | Active la sortie détaillée pendant l'entraînement, en affichant les barres de progression, les métriques par époque et des informations supplémentaires sur l'entraînement dans la console. |
single_cls | bool | False | Traite toutes les classes des jeux de données multiclasse comme une seule classe pendant l'entraînement. Utile pour les tâches de classification binaire ou lorsqu'on s'intéresse à la présence d'objets plutôt qu'à leur classification. |
classes | list[int] | None | Spécifie une liste d'ID de classes sur lesquelles effectuer l'entraînement. Utile pour filtrer certaines classes et se concentrer uniquement sur elles pendant l'entraînement. |
rect | bool | False | Active la stratégie de remplissage minimal : les images d'un lot reçoivent un remplissage minimal pour atteindre une taille commune, le côté le plus long étant égal à imgsz. Peut améliorer l'efficacité et la vitesse, mais peut influer sur la précision du modèle. |
multi_scale | float | 0.0 | Fait varier aléatoirement imgsz à chaque lot de +/- multi_scale (par exemple, de 0.25 -> 0.75x à 1.25x), en arrondissant aux multiples de la stride du modèle ; 0.0 désactive l'entraînement mult échelle. |
cos_lr | bool | False | Utilise un planificateur du taux d'apprentissage cosinus, qui ajuste le taux d'apprentissage suivant une courbe cosinus au fil des époques. Aide à gérer le taux d'apprentissage pour améliorer la convergence. |
close_mosaic | int | 10 | Désactive l'augmentation des données mosaïque pendant les N dernières époques afin de stabiliser l'entraînement avant son terme. La valeur 0 désactive cette fonctionnalité. |
resume | bool | False | Reprend l'entraînement à partir du dernier point de contrôle enregistré. Charge automatiquement les poids du modèle, l'état de l'optimiseur et le nombre d'époques, puis poursuit l'entraînement sans interruption. |
amp | bool ou str | True | Définit la précision de l'entraînement : True ou "fp16" utilise FP16, "bf16" utilise BF16 sur les périphériques CUDA compatibles, et False ou "fp32" utilise FP32. |
quantize | int ou str | None | Définis-le sur 8 (ou "int8") pour l'entraînement conscient de la quantification INT8 (QAT), qui affine avec une fausse quantification dans la boucle pour que les poids tolèrent l'exportation INT8. Consulte la page Quantization-Aware Training. |
fraction | float, int ou list | 1.0 | Sous-ensemble du jeu de données défini comme un ratio/nombre ou une liste [train, val, test]. 1 désigne l'ensemble du split, les entiers supérieurs à 1 correspondent au nombre d'images, et seule l'entrée de test facultative accepte 0/0.0 pour signifier aucun élément. Les listes à deux éléments conservent l'intégralité du test. |
profile | bool | False | Active le profilage des vitesses ONNX et TensorRT pendant l'entraînement, ce qui est utile pour optimiser le déploiement du modèle. |
freeze | int ou list | None | Gèle les N premières couches du modèle, ou des couches spécifiques indiquées par leur index ou leur nom de module (23.cv2, sans le model. initial), réduisant ainsi le nombre de paramètres entraînables. Utile pour le réglage fin ou l'apprentissage par transfert. |
lr0 | float | 0.01 | Taux d'apprentissage initial (c'est-à-dire SGD=1E-2, Adam=1E-3). La modification de cette valeur est essentielle au processus d'optimisation, car elle détermine la rapidité de mise à jour des poids du modèle. |
lrf | float | 0.01 | Taux d'apprentissage final sous forme de fraction du taux initial = (lr0 * lrf), utilisé avec les planificateurs pour ajuster le taux d'apprentissage au fil du temps. |
momentum | float | 0.937 | Facteur de momentum pour SGD ou beta1 pour les optimiseurs Adam, influant sur l'intégration des gradients précédents dans la mise à jour actuelle. |
weight_decay | float | 0.0005 | Terme de régularisation L2, qui pénalise les poids élevés afin de prévenir le surapprentissage. |
warmup_epochs | float | 3.0 | Nombre d'époques de montée en régime du taux d'apprentissage, qui augmente progressivement le taux d'apprentissage d'une faible valeur jusqu'au taux initial afin de stabiliser l'entraînement au début. |
warmup_momentum | float | 0.8 | Momentum initial pour la phase de montée en régime, qui s'ajuste progressivement au momentum défini pendant cette période. |
warmup_bias_lr | float | 0.1 | Taux d'apprentissage des paramètres de biais pendant la phase de montée en régime, ce qui contribue à stabiliser l'entraînement du modèle lors des premières époques. Défini automatiquement sur 0.0 avec le optimizer='auto' par défaut ; indique donc explicitement un optimiseur pour l'utiliser. |
distill_model | str | None | Chemin vers un point de contrôle du modèle enseignant (par exemple, yolo26x.pt) pour la distillation des connaissances. Lorsqu'il est défini, le modèle étudiant est entraîné avec une perte de distillation supplémentaire guidée par l'enseignant gelé. |
dis | float | 6.0 | Poids de la perte de distillation ajoutée aux pertes de détection standard. Des valeurs plus élevées augmentent l'influence des indications fournies par les caractéristiques de l'enseignant. |
box | float | 7.5 | Poids de la composante de perte des boîtes dans la fonction de perte, qui détermine l'importance accordée à la prédiction précise des coordonnées des boîtes englobantes. |
cls | float | 0.5 | Poids de la perte de classification dans la fonction de perte totale, qui influe sur l'importance d'une prédiction correcte de la classe par rapport aux autres composantes. |
cls_pw | float | 0.0 | Puissance utilisée pour pondérer les classes afin de gérer le déséquilibre des classes au moyen de la fréquence inverse des classes. 0.0 désactive la pondération des classes, tandis que 1.0 applique une pondération complète par fréquence inverse. Les valeurs comprises entre 0 et 1 fournissent une pondération partielle. |
dfl | float | 1.5 | Poids du terme de régression de la distance des boîtes : distribution focal loss (DFL) lorsque la tête de détection utilise reg_max > 1, ou perte L1 sur les distances de boîtes normalisées avec YOLO26 sans DFL (reg_max: 1). |
pose | float | 12.0 | Poids de la perte de pose dans les modèles entraînés pour l'estimation de pose, qui influe sur l'importance accordée à la prédiction précise des points clés de la pose. |
kobj | float | 1.0 | Poids de la perte d'objectness des points clés dans les modèles d'estimation de pose, qui établit un équilibre entre la confiance de détection et la précision de la pose. |
rle | float | 1.0 | Poids de la perte d'estimation de la log-vraisemblance résiduelle dans les modèles d'estimation de pose, qui influe sur la précision de la localisation des points clés. |
angle | float | 1.0 | Poids de la perte angulaire dans les modèles obb, qui influe sur la précision des prédictions d'angle des boîtes englobantes orientées. |
dlog | float | 1.0 | Poids de la perte logarithmique invariante à l'échelle (SILog) dans les modèles d'estimation de profondeur, principal terme déterminant la précision de la profondeur. |
dgrad | float | 0.5 | Poids de la perte de gradient dans les modèles d'estimation de profondeur, qui pénalise les erreurs sur les contours de profondeur et favorise des limites de surface plus nettes. |
dlam | float | 1.0 | Facteur de focalisation de la variance de la perte SILog dans les modèles d'estimation de profondeur. 1.0 rend la perte totalement invariante à l'échelle, tandis que 0.0 la réduit à une simple RMSE logarithmique. |
nbs | int | 64 | Taille de lot nominale utilisée pour normaliser la perte. |
overlap_mask | bool | True | Détermine si les masques d'objets doivent être fusionnés en un seul masque pour l'entraînement ou conservés séparément pour chaque objet. En cas de chevauchement, le masque le plus petit est superposé au plus grand lors de la fusion. |
mask_ratio | int | 4 | Ratio de sous-échantillonnage des masques de segmentation, qui influe sur la résolution des masques utilisés pendant l'entraînement. |
dropout | float | 0.0 | Taux de dropout utilisé pour la régularisation dans les tâches de classification, qui prévient le surapprentissage en omettant aléatoirement des unités pendant l'entraînement. |
val | bool | True | Active la validation pendant l'entraînement, ce qui permet d'évaluer périodiquement les performances du modèle sur un jeu de données distinct. |
nms | bool, optionnel | None | Sélectionne la tête d'inférence utilisée pour la validation des époques, la sélection des points de contrôle et l'arrêt précoce. None ou True utilise du one-to-many avec NMS ; False utilise la tête sans NMS lorsqu'elle est disponible. Les deux têtes conservent leurs pertes d'entraînement. |
plots | bool | True | Génère et enregistre des graphiques des métriques d’entraînement et de validation, ainsi que des exemples de prédictions, afin de fournir des informations visuelles sur les performances du modèle et la progression de l’apprentissage. |
compile | bool ou str | False | Active 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_last | bool | None | Utilise le format de mémoire channels_last (NHWC) pour les convolutions pendant l'entraînement. None l'active automatiquement sur CUDA avec PyTorch 1.11 ou version ultérieure, sauf sur Windows, où il s'est avéré plus lent. False le désactive, et True le demande explicitement. PyTorch 1.10 et les versions antérieures, le processeur central (CPU) et le processeur multimédia (MPS) restent par défaut au format NCHW. |
max_det | int | 300 | Nombre maximal de détections par image lors de la validation de l'entraînement. Pour detect, segment, pose et OBB, la valeur par défaut de 300 passe au nombre d'objets étiquetés d'entraînement/validation le plus élevé uniquement lorsque ce nombre dépasse 300. Les autres valeurs restent fixes ; le dépassement de la limite déclenche un avertissement. |
L'argument batch peut être configuré de trois façons :
- Taille de lot fixe : définis une valeur entière (par exemple,
batch=16) spécifiant directement le nombre d'images par lot. - Mode automatique (60 % de la mémoire GPU) : utilise
batch=-1pour ajuster automatiquement la taille des lots afin d'atteindre environ 60 % d'utilisation de la mémoire CUDA. - Mode automatique avec fraction d'utilisation : définis une valeur fractionnaire (par exemple,
batch=0.70) pour ajuster la taille des lots en fonction de la fraction spécifiée de mémoire GPU utilisée. - Nouvelle tentative automatique après erreur OOM : si une erreur CUDA de mémoire insuffisante se produit pendant la première époque, le trainer réduit automatiquement la taille des lots de moitié et réessaie (jusqu'à 3 fois). Cela s'applique uniquement à l'entraînement sur un seul GPU ; l'entraînement multi-GPU (DDP) déclenche immédiatement l'erreur.
- Aucune configuration adaptée trouvée : si aucune taille de lot candidate ne produit un profil utilisable, AutoBatch lève une
RuntimeErrorexplicite au lieu de revenir silencieusement à une valeur par défaut sans rapport.
Paramètres et hyperparamètres d'augmentation#
Les techniques d'augmentation sont essentielles pour améliorer la robustesse et les performances des modèles YOLO en introduisant de la variabilité dans les données d'entraînement, ce qui aide le modèle à mieux généraliser sur des données inédites. Le tableau suivant présente l'objectif et l'effet de chaque argument d'augmentation :
| Argument | Type | Valeur par défaut | Tâches prises en charge | Plage | Description |
|---|---|---|---|---|---|
hsv_h | float | 0.015 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Ajuste la teinte de l'image d'une fraction de la roue chromatique, ce qui introduit une variabilité des couleurs. Cela aide le modèle à généraliser dans différentes conditions d'éclairage. Pour classify, cette option s'applique uniquement lorsque auto_augment=None. |
hsv_s | float | 0.7 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Modifie la saturation de l'image d'une fraction, ce qui affecte l'intensité des couleurs. Utile pour simuler différentes conditions environnementales. Pour classify, cette option s'applique uniquement lorsque auto_augment=None. |
hsv_v | float | 0.4 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Modifie la valeur (luminosité) de l'image d'une fraction, ce qui aide le modèle à fonctionner correctement dans diverses conditions d'éclairage. Pour classify, cette option s'applique uniquement lorsque auto_augment=None. |
degrees | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 180 | Fait pivoter aléatoirement l'image dans la plage de degrés spécifiée, ce qui améliore la capacité du modèle à reconnaître les objets selon différentes orientations. |
translate | float | 0.1 | detect, segment, semantic, depth, pose, obb | 0.0 - 1.0 | Translate l'image horizontalement et verticalement d'une fraction de sa taille, ce qui aide le modèle à apprendre à détecter les objets partiellement visibles. |
scale | float | tuple | 0.5 | detect, segment, semantic, depth, classify, pose, obb | 0 - 1, ou un tuple (min, max) explicite (pas pour classify) | Redimensionne l'image selon un facteur de gain, simulant des objets situés à différentes distances de la caméra. |
shear | float | 0 | detect, segment, semantic, depth, pose, obb | -180 - +180 | Applique un cisaillement à l'image selon un degré spécifié, imitant l'effet d'objets vus sous différents angles. |
perspective | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 0.001 | Applique une transformation de perspective aléatoire à l'image, améliorant la capacité du modèle à comprendre les objets dans un espace 3D. |
flipud | float | 0 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Retourne l'image de haut en bas selon la probabilité spécifiée, augmentant la variabilité des données sans modifier les caractéristiques de l'objet. |
fliplr | float | 0.5 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Retourne l'image de gauche à droite selon la probabilité spécifiée, ce qui est utile pour apprendre les objets symétriques et accroître la diversité du jeu de données. |
bgr | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 1.0 | Inverse les canaux de l'image de RGB vers BGR selon la probabilité spécifiée, ce qui est utile pour améliorer la robustesse face à un ordre incorrect des canaux. |
mosaic | float | 1 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | Combine quatre images d'entraînement en une seule, simulant différentes compositions de scène et interactions entre objets. Particulièrement efficace pour la compréhension de scènes complexes. |
mixup | float | 0 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | Mélange deux images et leurs annotations pour créer une image composite. Améliore la capacité du modèle à généraliser en introduisant du bruit dans les annotations et une variabilité visuelle. |
cutmix | float | 0 | detect, segment, pose, obb | 0.0 - 1.0 | Combine des portions de deux images, créant un mélange partiel tout en conservant des régions distinctes. Améliore la robustesse du modèle en créant des scénarios d'occlusion. |
copy_paste | float | 0 | segment, obb | 0.0 - 1.0 | Fraction des objets éligibles collés ; flip les duplique dans l'image, tandis que mixup utilise également cette valeur comme probabilité d'application entre images. |
copy_paste_mode | str | flip | segment, obb | - | Spécifie la stratégie copy-paste à utiliser. Les options incluent 'flip' et 'mixup'. |
auto_augment | str | randaugment | classify | - | Applique une politique d'augmentation prédéfinie ('randaugment', 'autoaugment' ou 'augmix') pour améliorer les performances du modèle grâce à une diversité visuelle. |
erasing | float | 0.4 | classify | 0.0 - 1.0 | Efface aléatoirement des régions de l'image pendant l'entraînement afin d'encourager le modèle à se concentrer sur des caractéristiques moins évidentes. |
augmentations | list | None | detect, segment, semantic, depth, pose, obb | - | Transformations Albumentations personnalisées pour une augmentation avancée des données (API Python uniquement). Accepte une liste d'objets de transformation pour des besoins d'augmentation spécialisés. |
Ces paramètres peuvent être ajustés pour répondre aux exigences spécifiques du jeu de données et de la tâche concernée. Expérimenter avec différentes valeurs peut aider à trouver la stratégie d'augmentation optimale, celle qui permet d'obtenir les meilleures performances du modèle.
Pour plus d'informations sur les opérations d'augmentation lors de l'entraînement, consulte la section de référence.
Journalisation#
Les métriques d'entraînement, les graphiques et les points de contrôle sont toujours écrits dans le répertoire d'exécution, et Ultralytics les diffuse également vers n'importe quel outil de suivi des expériences que tu as installé et activé : Comet, ClearML, TensorBoard, MLflow, Weights & Biases et DVCLive. Chaque journaliseur s'active ou se désactive via les paramètres d'Ultralytics, par exemple yolo settings tensorboard=True. Les trois configurations les plus courantes sont présentées ci-dessous.
Comet#
Comet est une plateforme qui permet aux spécialistes des données et aux développeurs de suivre, comparer, expliquer et optimiser les expériences et les modèles. Elle offre notamment des fonctionnalités de suivi des métriques en temps réel, des différences de code et des hyperparamètres.
Pour utiliser Comet :
# pip install comet_ml
import comet_ml
comet_ml.init()N'oublie pas de te connecter à ton compte Comet sur leur site web et d'obtenir ta clé API. Tu devras l'ajouter à tes variables d'environnement ou à ton script pour journaliser tes expériences.
ClearML#
ClearML est une plateforme open source qui automatise le suivi des expériences et facilite le partage efficace des ressources. Elle est conçue pour aider les équipes à gérer, exécuter et reproduire plus efficacement leurs travaux de ML.
Pour utiliser ClearML :
# pip install clearml
import clearml
clearml.browser_login()Après avoir exécuté ce script, tu devras te connecter à ton compte ClearML dans le navigateur et authentifier ta session.
TensorBoard#
TensorBoard est une boîte à outils de visualisation pour TensorFlow. Elle te permet de visualiser ton graphe TensorFlow, de représenter graphiquement les métriques quantitatives relatives à l'exécution de ton graphe et d'afficher des données supplémentaires, comme les images qui le traversent.
Pour utiliser TensorBoard dans Google Colab :
%load_ext tensorboard
tensorboard --logdir ultralytics/runs # replace with 'runs' directoryPour utiliser TensorBoard localement, exécute la commande ci-dessous et consulte les résultats à l'adresse localhost:6006.
tensorboard --logdir ultralytics/runs # replace with 'runs' directoryCela chargera TensorBoard et le dirigera vers le répertoire dans lequel tes journaux d'entraînement sont enregistrés.
Après avoir configuré ton journaliseur, tu peux poursuivre l'entraînement de ton modèle. Toutes les métriques d'entraînement seront automatiquement journalisées sur la plateforme choisie, et tu pourras accéder à ces journaux pour surveiller les performances de ton modèle au fil du temps, comparer différents modèles et repérer les points à améliorer.
Et ensuite ?#
Valide ton modèle entraîné sur des données mises de côté afin de vérifier sa précision dans le monde réel, puis exporte-le vers ONNX, TensorRT ou un autre format de déploiement. Tu entraînes ton modèle sur tes propres données plutôt que sur COCO8 ? Formate-les d'abord avec le guide des jeux de données.
FAQ#
Oui. L'entraînement cloud de la plateforme Ultralytics inclut des crédits gratuits pour démarrer. Téléverse ton jeu de données, sélectionne un modèle et un GPU, puis entraîne directement depuis le navigateur.
Les principales fonctionnalités du mode Train d'Ultralytics YOLO26 incluent :
- Téléchargement automatique des jeux de données : télécharge automatiquement des jeux de données standards tels que COCO, VOC et ImageNet.
- Prise en charge de plusieurs GPU : répartit l'entraînement sur plusieurs GPU pour accélérer le traitement.
- Configuration des hyperparamètres : personnalise les hyperparamètres via des fichiers YAML ou des arguments de CLI.
- Visualisation et suivi : suit les métriques d'entraînement en temps réel pour obtenir de meilleures informations.
Ces fonctionnalités rendent l'entraînement efficace et personnalisable selon tes besoins. Pour plus de détails, consulte la section Principales fonctionnalités du mode Train.
Pour reprendre l'entraînement à partir d'une session interrompue, définis l'argument
resumesurTrueet spécifie le chemin vers le dernier checkpoint enregistré.Exemple de reprise d'entraînementfrom ultralytics import YOLO # Load the partially trained model model = YOLO("path/to/last.pt") # Resume training results = model.train(resume=True)Consulte la section Reprise des entraînements interrompus pour plus d'informations.
Un déséquilibre des classes se produit lorsque certaines classes comportent beaucoup moins d'exemples que d'autres dans tes données d'entraînement. Le modèle peut alors obtenir de mauvaises performances sur les classes rares. Ultralytics YOLO prend en charge la pondération des classes via l'argument
cls_pwpour résoudre ce problème.L'argument
cls_pwcontrôle l'intensité de la pondération des classes en fonction de la fréquence inverse des classes :cls_pw=0.0(par défaut) : désactive la pondération des classescls_pw=1.0: applique une pondération complète selon la fréquence inverse- Valeurs comprises entre
0.0et1.0: fournissent une pondération partielle pour un déséquilibre modéré
Les poids des classes sont calculés comme
(1.0 / class_counts) ^ cls_pw, puis normalisés afin que leur moyenne soit égale à 1.0.Entraînement sur un jeu de données déséquilibréfrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n.pt") # Train with full class weighting for severely imbalanced data results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=1.0) # Or use partial weighting (0.25) for moderate imbalance results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=0.25)ConseilCommence avec
cls_pw=0.25pour les jeux de données modérément déséquilibrés et augmente jusqu'à1.0si les classes rares restent moins performantes. Tu peux vérifier les poids des classes calculés dans les journaux d'entraînement afin de contrôler leur répartition.Oui, Ultralytics YOLO prend en charge l'entraînement de YOLO26 sur les puces Apple silicon à l'aide du framework Metal Performance Shaders (MPS). Spécifie 'mps' comme périphérique d'entraînement.
Exemple d'entraînement MPSfrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n.pt") # Train the model on Apple silicon chip (M1/M2/M3/M4) results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")Pour plus de détails, consulte la section Entraînement Apple Silicon avec MPS.
Ultralytics YOLO26 te permet de configurer divers paramètres d'entraînement, tels que la taille des lots, le taux d'apprentissage, le nombre d'époques, etc., via des arguments. Voici un bref aperçu :
Argument Valeur par défaut Description modelNoneChemin vers le fichier du modèle à entraîner. dataNoneChemin vers le fichier YAML du jeu de données (par exemple, coco8.yaml), ou vers un répertoire ou un nom de jeu de données (par exemple,imagenet10) pour la classification.epochs100Nombre total d'époques d'entraînement. batch16Taille des lots, réglable sous forme d'entier ou en mode automatique. imgsz640Taille cible des images pour l'entraînement. deviceNonePériphérique(s) de calcul pour l'entraînement, tels que cpu,0,0,1oumps.saveTrueActive l'enregistrement des checkpoints d'entraînement et des poids finaux du modèle. Pour consulter un guide détaillé sur les paramètres d'entraînement, consulte la section Paramètres d'entraînement.
Pour entraîner un modèle de détection d'objets avec Ultralytics YOLO26, tu peux utiliser l'API Python ou la CLI. Voici un exemple pour chacune de ces méthodes :
Pour plus de détails, consulte la section Paramètres d'entraînement.