Entraîner un modèle 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 en tirant pleinement parti des capacités du matériel moderne. Ce guide a pour objectif de couvrir tout ce dont tu as besoin pour commencer à entraîner tes propres modèles avec les nombreuses fonctionnalités de YOLO26. Si tu n’as pas encore installé Ultralytics, commence par le guide de démarrage rapide.
Consulte l’aperçu de YOLO27 non encore publié pour découvrir les exemples d’entraînement prévus.
Regarder : Comment entraîner un modèle YOLO sur ton jeu de données personnalisé dans Google Colab.
Pourquoi choisir Ultralytics YOLO pour l’entraînement ?#
Voici quelques bonnes raisons de choisir le mode Train de YOLO26 :
- Efficacité : tire le meilleur parti de ton matériel, que tu utilises une configuration avec un seul GPU ou que tu répartisses la charge sur plusieurs GPU.
- Polyvalence : entraîne tes modèles sur des jeux de données personnalisés, mais aussi sur des jeux de données facilement accessibles tels que COCO, VOC et ImageNet.
- Facilité d’utilisation : des interfaces CLI et Python simples, mais puissantes, pour une expérience d’entraînement fluide.
- Flexibilité des hyperparamètres : un large éventail d’hyperparamètres personnalisables pour affiner les performances du modèle. Pour un contrôle plus poussé, tu peux aussi personnaliser le trainer lui-même.
- Entraînement dans le cloud : entraîne tes modèles sur des GPU cloud via l’Ultralytics Platform, avec des métriques en temps réel et une sauvegarde automatique des points de contrôle.
Principales fonctionnalité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 définissent 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 les jeux de données pris en charge. - Prise en charge de plusieurs GPU : répartis facilement l’entraînement sur plusieurs GPU pour accélérer le processus.
- Configuration des hyperparamètres : modifie les hyperparamètres à l’aide de fichiers de configuration YAML ou d’arguments CLI.
- Visualisation et suivi : suis les métriques d’entraînement en temps réel et visualise le processus d’apprentissage pour mieux comprendre son déroulement.
Exemples d'utilisation#
Entraîne YOLO26n sur le jeu de données COCO8 pendant 100 époques, avec une taille d’image de 640. Tu peux spécifier l’appareil d’entraînement à l’aide de l’argument device. Si aucun argument n’est fourni, le GPU device=0 sera utilisé s’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 rencontrer 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.
L’appareil est déterminé automatiquement. Si un GPU est disponible, il sera utilisé (appareil CUDA 0 par défaut) ; sinon, l’entraînement démarrera sur CPU.
from ultralytics import YOLO
# Charger un modèle
model = YOLO("yolo26n.yaml") # créer un nouveau modèle à partir du fichier YAML
model = YOLO("yolo26n.pt") # charger un modèle préentraîné (recommandé pour l’entraînement)
model = YOLO("yolo26n.yaml").load("yolo26n.pt") # créer à partir du fichier YAML et transférer les poids
# Entraîner le modèle
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 entre plusieurs GPU. Cette fonctionnalité est accessible via l’API Python et l’interface en ligne de commande. Pour activer l’entraînement sur plusieurs GPU, indique les ID des GPU que tu souhaites utiliser.
Pour entraîner le modèle sur 2 GPU, les appareils CUDA 0 et 1, utilise les commandes suivantes. Tu peux les adapter pour utiliser davantage de GPU, selon tes besoins.
from ultralytics import YOLO
# Charger un modèle
model = YOLO("yolo26n.pt") # charger un modèle préentraîné (recommandé pour l’entraînement)
# Entraîner le modèle sur 2 GPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])
# Entraîner le modèle sur les deux GPU les moins sollicités
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 roues PyTorch officielles pour torch>=2.4. Ultralytics lance DDP via torch.distributed.run, dont l’étape de rendez-vous construit un TCPStore qui utilise le backend libuv par défaut depuis PyTorch 2.4 ; or, les roues 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
Définir USE_LIBUV=0 ne résout pas le problème, car le rendez-vous construit directement TCPStore et ce chemin d’exécution ne lit jamais cette variable. Entraîne ton modèle sous Linux ou WSL2 pour utiliser plusieurs GPU, ou utilise un seul GPU avec device=0 sous Windows.
Lorsque tu spécifies plusieurs appareils (par exemple, device=[0, 1]), Ultralytics lance en interne une nouvelle instance de trainer et exécute torch.distributed.run en arrière-plan. Cela fonctionne de manière fluide 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 sérialisés et transférés automatiquement 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 compilée avec ROCm et la syntaxe standard device=0 ou device=cuda:0. Consulte le guide d’intégration AMD pour l’installation de ROCm, l’entraînement sur plusieurs GPU, les notes sur AMP et l’inférence MIGraphX des modèles exportés.
L’entraînement sur GPU Intel utilise device=xpu:0, ou plusieurs ID XPU avec une version de PyTorch qui fournit 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 compatibles entre elles 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")
# Entraîner sur un NPU Ascend
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0")
# Entraîner sur deux NPU Ascend avec HCCL
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0,1")Les fonctionnalités d’entraînement standard, notamment AMP, la validation, la sauvegarde des 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 ID NPU lancent un entraînement distribué via HCCL. Consulte le guide d’intégration Huawei Ascend pour exporter et déployer le modèle après l’entraînement.
Entraînement sur les GPU les moins sollicités#
L’entraînement sur les GPU les moins sollicités sélectionne automatiquement les GPU les moins utilisés sur les systèmes qui en possèdent plusieurs, afin d’optimiser l’utilisation des ressources sans sélection manuelle. Cette fonctionnalité repère les GPU disponibles en fonction de leur taux d’utilisation et de la mémoire VRAM disponible.
Pour sélectionner et utiliser automatiquement le ou les GPU les moins sollicités pour l’entraînement, utilise le paramètre d’appareil -1. Cette fonctionnalité est particulièrement utile dans les environnements informatiques partagés ou sur les serveurs utilisés par plusieurs personnes.
from ultralytics import YOLO
# Charger un modèle
model = YOLO("yolo26n.pt") # charger un modèle préentraîné (recommandé pour l’entraînement)
# Entraîner le modèle sur le GPU le moins sollicité
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=-1)
# Entraîner le modèle sur les deux GPU les moins sollicités
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])L’algorithme de sélection automatique privilégie les GPU qui présentent :
- Un taux d’utilisation actuel plus faible
- Une plus grande quantité de mémoire disponible (VRAM libre)
Cette fonctionnalité est particulièrement utile dans les environnements informatiques partagés ou lorsque plusieurs tâches d’entraînement sont exécutées sur différents modèles. Elle s’adapte automatiquement à l’évolution des conditions du système et garantit une allocation optimale des ressources sans intervention manuelle.
Entraînement MPS sur Apple Silicon#
Grâce à la prise en charge intégrée des puces Apple Silicon dans les 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 performante pour exécuter des tâches de calcul et de traitement d’images sur les puces conçues par Apple.
Pour activer l’entraînement sur les puces Apple Silicon, indique 'mps' comme appareil au démarrage de l’entraînement. Voici un exemple d’utilisation en Python et en ligne de commande :
from ultralytics import YOLO
# Charger un modèle
model = YOLO("yolo26n.pt") # charger un modèle préentraîné (recommandé pour l’entraînement)
# Entraîner le modèle avec MPS
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")En tirant parti de la puissance de calcul des puces Apple Silicon, cette fonctionnalité améliore l’efficacité du traitement des tâches d’entraînement. Pour obtenir des conseils plus détaillés et découvrir les options de configuration avancées, consulte la documentation PyTorch MPS.
Reprendre un entraînement interrompu#
La reprise de l’entraînement à partir d’un état précédemment enregistré est une fonctionnalité essentielle lorsqu’on travaille avec des modèles d’apprentissage profond. 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 poursuivre l’entraînement d’un modèle avec de nouvelles données ou pendant davantage d’époques.
Lors de la reprise de l’entraînement, Ultralytics YOLO charge les poids du dernier modèle enregistré et restaure également l’état de l’optimiseur, le planificateur de taux d’apprentissage, le numéro de l’époque et le jeu de données. Cela te permet de reprendre le processus d’entraînement sans interruption là où il s’était arrêté. Transmets explicitement data= avec resume pour poursuivre l’entraînement sur un autre jeu de données au lieu de celui du point de reprise.
Tu peux facilement reprendre l’entraînement dans Ultralytics YOLO en définissant l’argument resume sur True lors de l’appel de la méthode train, et en indiquant le chemin du fichier .pt contenant les poids du modèle partiellement entraîné.
Voici un exemple de reprise d’un entraînement interrompu avec Python et depuis la ligne de commande :
from ultralytics import YOLO
# Charger un modèle
model = YOLO("path/to/last.pt") # charger un modèle partiellement entraîné
# Reprendre l’entraînement
results = model.train(resume=True)En définissant resume=True, la fonction train poursuivra l’entraînement là où il s’était arrêté, à partir de l’état enregistré 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 points de reprise sont enregistrés par défaut à la fin de chaque époque, ou à intervalles fixes à l’aide de l’argument save_period ; tu dois donc terminer au moins 1 époque pour reprendre un entraînement.
Paramètres d’entraînement#
Les paramètres d’entraînement des modèles YOLO comprennent différents hyperparamètres et réglages utilisés pendant le processus d’entraînement. Ces paramètres influent sur les performances, la vitesse et la précision du modèle. Les principaux paramètres d’entraînement comprennent la taille de lot, 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 influer sur le processus d’entraînement. Il est essentiel de régler ces paramètres avec soin et d’expérimenter afin d’optimiser les performances.
Optimiseur MuSGD#
Dans YOLO26, MuSGD est un optimiseur hybride qui combine les mises à jour standard de SGD avec les mises à jour orthogonalisées de type Muon.
Il est recommandé pour les entraînements YOLO26 de longue durée et les jeux de données plus volumineux, où les mises à jour Muon orthogonalisées peuvent contribuer à stabiliser l’optimisation.
Seuls les poids linéaires 2D et les filtres de convolution 4D (redimensionnés en 2D) reçoivent la mise à jour de type Muon avec SGD, tandis que tous les autres paramètres, comme les poids de normalisation par lot et les termes de biais, restent soumis au SGD standard.
Lorsque optimizer=auto est utilisé, Ultralytics sélectionne automatiquement MuSGD pour les entraînements de longue durée (généralement lorsque le nombre d’itérations > 10000). Pour les entraînements plus courts, l’entraîneur utilise AdamW. En mode auto, l’entraîneur sélectionne également le taux d’apprentissage ; tout lr0 fourni par l’utilisateur est donc ignoré. Pour contrôler ces paramètres manuellement, sélectionne explicitement un optimiseur, par exemple optimizer=AdamW lr0=0.001.
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 utilisé pour l’entraînement. Accepte le chemin d’accès à 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 d’accès au fichier YAML du jeu de données (p. ex. coco8.yaml), qui contient les chemins vers les données de validation et d’entraînement, les noms des classes et le nombre de classes. Pour la classification, tu peux plutôt indiquer un répertoire de jeu de données ou le nom d’un jeu de données intégré (p. ex. imagenet10). |
epochs | int | 100 | Nombre total d’époques d’entraînement. Chaque époque correspond à un passage complet sur l’ensemble du jeu de données. Modifier 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. Pratique lorsque le temps d’entraînement est limité. |
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 interrompant l’entraînement lorsque les performances stagnent. |
batch | int ou float | 16 | Taille de lot, avec trois modes : définir un entier (p. ex. batch=16), utiliser le mode automatique avec 60 % de la mémoire GPU (batch=-1) ou le mode automatique avec une fraction d’utilisation spécifiée (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 correspondent à la valeur spécifié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 la complexité des calculs. |
save | bool | True | Active l’enregistrement des points de contrôle d’entraînement et des poids finaux du modèle. Pratique pour reprendre l’entraînement ou procéder au déploiement du modèle. |
save_period | int | -1 | Fréquence d’enregistrement des points de contrôle du modèle, exprimée en époques. La valeur -1 désactive cette fonctionnalité. Pratique pour enregistrer des modèles intermédiaires au cours de longues sessions d’entraînement. |
cache | bool ou str | False | Active la mise en cache des images du jeu de données en mémoire (True/ram), sur disque (disk) ou la désactive (False). Accélère l’entraînement en réduisant les entrées-sorties 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 pour l’entraînement : un seul GPU (device=0), plusieurs GPU (device=[0,1]), un CPU (device=cpu), MPS pour les puces Apple (device=mps), un NPU Huawei Ascend (device=npu:0 ou device=npu:0,1), un Intel XPU (device=xpu:0), 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 en cas d’entraînement multi-GPU). Influe sur la vitesse du prétraitement et de l’envoi des données au modèle, ce qui est particulièrement utile dans les configurations multi-GPU. |
project | str | None | Nom du répertoire du projet dans lequel les résultats de l’entraînement sont enregistrés. Permet d’organiser le stockage de différentes expériences. |
name | str | None | Nom de la session d’entraînement. Sert à créer un sous-répertoire dans le dossier du projet, où sont stockés les journaux et les résultats de l’entraînement. |
exist_ok | bool | False | Si True, autorise l’écrasement d’un répertoire projet/nom existant. Pratique pour les expérimentations itératives sans devoir supprimer manuellement les résultats précédents. |
save_dir | str | None | Spécifie le répertoire exact dans lequel les résultats de la session sont enregistrés, 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 si l’entraînement commence à partir de poids préentraînés. La valeur peut être un booléen ou le chemin d’accès aux 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 ajustement fin sur plusieurs jeux de données, copie dans le nouveau modèle les lignes de la tête de classification préentraînée correspondant aux classes dont les noms correspondent. Les classes communes conservent ainsi le biais appris et, si la largeur de la tête reste inchangée, leurs poids. Cette option s’applique que le nombre de classes soit différent ou identique avec un ordre 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 de l’entraînement pour garantir la reproductibilité des résultats d’une exécution à l’autre avec les mêmes configurations. |
deterministic | bool | True | Force l’utilisation d’algorithmes déterministes pour garantir la reproductibilité, mais peut influer sur les performances et la vitesse en raison de l’exclusion des algorithmes non déterministes. |
verbose | bool | True | Active l’affichage détaillé pendant l’entraînement : barres de progression, métriques par époque et informations supplémentaires dans la console. |
single_cls | bool | False | Traite toutes les classes des jeux de données multi-classes comme une seule classe pendant l’entraînement. Pratique 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’identifiants de classes à utiliser pour l’entraînement. Pratique pour filtrer les classes et se concentrer uniquement sur certaines d’entre elles. |
rect | bool | False | Active la stratégie de padding minimal : les images d'un lot sont rembourrées au minimum pour atteindre une taille commune, le côté le plus long étant égal à imgsz. Cela peut améliorer l'efficacité et la vitesse, mais affecter la précision du modèle. Le trainer YOLO standard utilise rect=True pour la validation de la détection, de la segmentation, de la pose et des OBB, quel que soit ce paramètre. |
multi_scale | float | 0.0 | Fait varier aléatoirement imgsz de +/- multi_scale à chaque lot (p. ex. 0.25 -> 0.75x à 1.25x), en arrondissant aux multiples du pas du modèle ; 0.0 désactive l’entraînement multi-échelle. |
cos_lr | bool | False | Utilise un planificateur de taux d’apprentissage cosinus, qui ajuste ce taux selon 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 la mosaïque de l’augmentation des données 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 numéro de l’époque pour poursuivre 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 8 (ou "int8") pour l’entraînement tenant compte de la quantification INT8 (QAT), qui affine le modèle avec une fausse quantification intégrée afin que les poids soient compatibles avec l’export INT8. Consulte l’entraînement tenant compte de la quantification. |
fraction | float, int ou list | 1.0 | Sous-ensemble du jeu de données, exprimé sous forme de ratio, de nombre ou de liste [train, val, test]. 1 désigne l’ensemble de la partition ; les entiers supérieurs à 1 correspondent à un nombre d’images, et seule l’entrée de test facultative accepte 0/0.0 pour signifier « aucun ». Les listes de deux éléments conservent l’ensemble de la partition de 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 certaines couches selon leur indice ou le nom du module (23.cv2, sans le model. initial), ce qui réduit le nombre de paramètres entraînables. Pratique pour l’ajustement fin ou l’apprentissage par transfert. |
lr0 | float | 0.01 | Taux d’apprentissage initial (c.-à-d. SGD=1E-2, Adam=1E-3). Ignoré avec l’option par défaut optimizer='auto' ; nomme explicitement un optimiseur pour l’utiliser. |
lrf | float | 0.01 | Taux d’apprentissage final exprimé en 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 bêta 1 pour les optimiseurs Adam, qui influe sur la prise en compte des gradients passés dans la mise à jour actuelle. |
weight_decay | float | 0.0005 | Terme de régularisation L2, qui pénalise les poids élevés pour prévenir le surapprentissage. |
warmup_epochs | float | 3.0 | Nombre d’époques de montée en chauffe du taux d’apprentissage, qui augmente progressivement d’une valeur faible jusqu’au taux initial afin de stabiliser le début de l’entraînement. |
warmup_momentum | float | 0.8 | Momentum initial pendant la phase de montée en chauffe, ajusté progressivement jusqu’à la valeur de momentum définie au cours de cette période. |
warmup_bias_lr | float | 0.1 | Taux d’apprentissage des paramètres de biais pendant la phase de montée en chauffe, qui aide à stabiliser l’entraînement du modèle lors des premières époques. Défini automatiquement sur 0.0 avec l’option par défaut optimizer='auto' ; nomme explicitement un optimiseur pour l’utiliser. |
distill_model | str | None | Chemin d’accès à un point de contrôle du modèle enseignant (p. ex. yolo26x.pt) pour la distillation des connaissances. Une fois défini, le modèle étudiant est entraîné avec une perte de distillation supplémentaire guidée par le modèle enseignant figé. |
dis | float | 6.0 | Poids de la perte de distillation ajoutée aux pertes de détection standard. Une valeur plus élevée accroît l’influence des caractéristiques fournies par le modèle enseignant. |
box | float | 7.5 | Poids de la composante de perte de boîte dans la fonction de perte, qui détermine l’importance accordée à la prédiction précise des coordonnées de la boîte englobante. |
cls | float | 0.5 | Poids de la perte de classification dans la fonction de perte totale, qui influe sur l’importance accordée à la prédiction correcte de la classe par rapport aux autres composantes. |
cls_pw | float | 0.0 | Exposant de pondération des classes permettant de gérer le déséquilibre des classes en fonction de leur fréquence inverse. 0.0 désactive la pondération des classes ; 1.0 applique une pondération complète par fréquence inverse. Les valeurs entre 0 et 1 appliquent une pondération partielle. |
dfl | float | 1.5 | Poids du terme de régression de distance des boîtes : perte focale de distribution (DFL) lorsque la tête de détection utilise reg_max > 1, ou perte L1 sur les distances normalisées des boîtes 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’objectivité des points clés dans les modèles d’estimation de pose, qui équilibre la confiance de détection et la précision de la pose. |
rle | float | 1.0 | Poids de la perte d’estimation de 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, terme principal qui détermine 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 pondération de la variance de la perte SILog dans les modèles d’estimation de profondeur. 1.0 rend la perte entièrement invariante à l’échelle, tandis que 0.0 la réduit à une simple erreur quadratique moyenne logarithmique (log-RMSE). |
nbs | int | 64 | Taille de lot nominale pour la normalisation de 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 | Facteur de sous-échantillonnage des masques de segmentation, qui influe sur la résolution des masques utilisés pendant l’entraînement. Ne modifie pas la résolution des masques prédits. |
dropout | float | 0.0 | Taux de dropout pour la régularisation des 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 afin d’évaluer périodiquement les performances du modèle sur un jeu de données distinct. |
nms | bool, facultatif | 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 anticipé. None ou True utilise la stratégie un-vers-plusieurs 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 un aperçu visuel des performances du modèle et de 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é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_last | bool | None | Utilise le format mémoire channels_last (NHWC) pour les convolutions pendant l’entraînement. None l’active automatiquement sur CUDA avec PyTorch 1.11 ou ultérieur, sauf sous Windows, où les mesures ont montré un ralentissement. False le désactive et True l’active explicitement. L’entraînement sur CPU ou MPS utilise toujours NCHW (True est ignoré avec un avertissement). |
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 augmente jusqu’au nombre maximal d’objets annotés dans les partitions train/val, uniquement si 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) pour indiquer directement le nombre d’images par lot. - Mode automatique (60 % de mémoire GPU) : utilise
batch=-1pour ajuster automatiquement la taille de lot afin d’utiliser environ 60 % 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 de lot selon la fraction spécifiée de mémoire GPU utilisée. - Nouvelle tentative automatique en cas de mémoire insuffisante : si une erreur de mémoire CUDA insuffisante survient pendant la première époque, l’entraîneur réduit automatiquement de moitié la taille de lot et réessaie (jusqu’à 3 fois). Cette option s’applique uniquement à l’entraînement sur un seul GPU ; l’entraînement multi-GPU (DDP) déclenche immédiatement l’erreur.
- Aucune taille adaptée trouvée : si aucune taille de lot candidate ne produit un profil exploitable, AutoBatch renvoie une erreur
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, car elles introduisent de la variabilité dans les données d’entraînement, ce qui aide le modèle à mieux généraliser à 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, en introduisant une variabilité des couleurs. 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 influe sur 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 l’image de manière aléatoire dans la plage de degrés spécifiée, améliorant la capacité du modèle à reconnaître des objets selon différentes orientations. |
translate | float | 0.1 | detect, segment, semantic, depth, pose, obb | 0.0 - 1.0 | Déplace 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) | Met l’image à l’échelle 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 | Cisaille l’image selon un degré spécifié, imitant l’effet d’objets observés 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 avec 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 avec la probabilité spécifiée, ce qui est utile pour apprendre à reconnaître 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 à BGR avec la probabilité spécifiée, ce qui est utile pour améliorer la robustesse face à un ordre de canaux incorrect. |
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ènes et interactions entre objets. Très efficace pour comprendre des scènes complexes. |
mixup | float | 0 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | Mélange deux images et leurs étiquettes pour créer une image composite. Améliore la capacité de généralisation du modèle en introduisant du bruit dans les étiquettes et une variabilité visuelle. |
cutmix | float | 0 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | Combine des portions de deux images pour créer un mélange partiel tout en conservant des régions distinctes. Améliore la robustesse du modèle en créant des situations d’occlusion. |
copy_paste | float | 0 | segment, semantic, obb | 0.0 - 1.0 | Fraction des objets admissibles qui sont copiés-collés ; flip les met en miroir dans l’image, tandis que mixup utilise aussi cette valeur comme probabilité d’application entre images. |
copy_paste_mode | str | flip | segment, semantic, obb | - | Indique la stratégie copy-paste à utiliser. Les options comprennent '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 à la 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’inciter 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 l’augmentation avancée des données (API Python uniquement). Accepte une liste d’objets de transformation pour des besoins d’augmentation spécifiques. |
Tu peux ajuster ces paramètres pour répondre aux exigences spécifiques du jeu de données et de la tâche. L’expérimentation avec différentes valeurs peut aider à trouver la stratégie d’augmentation optimale pour obtenir les meilleures performances du modèle.
Pour en savoir plus sur les opérations d’augmentation de l’entraînement, consulte la section de référence.
Journalisation#
Les métriques d’entraînement, les graphiques et les points de reprise sont toujours écrits dans le répertoire d’exécution. Ultralytics les transmet également à tout outil de suivi d’expériences que tu as installé et activé : Comet, ClearML, TensorBoard, MLflow, Weights & Biases et DVCLive. Chaque outil de journalisation s’active via les paramètres 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 des expériences et des modèles. Elle propose notamment des métriques en temps réel, la comparaison des différences de code et le suivi des hyperparamètres.
Pour utiliser Comet :
# pip install comet_ml
import comet_ml
comet_ml.login()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 leur travail en ML plus efficacement.
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 le graphe TensorFlow, de tracer des métriques quantitatives sur l’exécution du 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’emplacement localhost:6006.
tensorboard --logdir ultralytics/runs # replace with 'runs' directoryCette commande chargera TensorBoard et l’orientera vers le répertoire où sont enregistrés tes journaux d’entraînement.
Après avoir configuré ton outil de journalisation, tu peux lancer l’entraînement de ton modèle. Toutes les métriques d’entraînement seront automatiquement journalisées sur la plateforme de ton choix. Tu pourras consulter ces journaux pour suivre les performances de ton modèle au fil du temps, comparer différents modèles et repérer les points à améliorer.
Et ensuite ?#
Évalue ton modèle entraîné sur des données mises de côté pour vérifier sa précision en conditions réelles, puis exporte-le au format ONNX, TensorRT ou dans un autre format de déploiement. Tu entraînes ton modèle sur tes propres données plutôt que sur COCO8 ? Commence par les formater à l’aide du guide des jeux de données.
FAQ#
Oui. L’entraînement dans le cloud Ultralytics Platform inclut des crédits gratuits pour commencer. Charge ton jeu de données, sélectionne un modèle et un GPU, puis entraîne directement depuis le navigateur.
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 des méthodes :
Exemple d’entraînement sur un seul GPU et sur CPUfrom ultralytics import YOLO # Charger un modèle model = YOLO("yolo26n.pt") # charger un modèle préentraîné (recommandé pour l’entraînement) # Entraîner le modèle results = model.train(data="coco8.yaml", epochs=100, imgsz=640)Pour plus de détails, consulte la section Paramètres d’entraînement.
Les principales fonctionnalités du mode Train d’Ultralytics YOLO26 comprennent :
- Téléchargement automatique des jeux de données : télécharge automatiquement des jeux de données standard comme COCO, VOC et ImageNet.
- Prise en charge multi-GPU : répartis l’entraînement sur plusieurs GPU pour accélérer le traitement.
- Configuration des hyperparamètres : personnalise les hyperparamètres à l’aide de fichiers YAML ou d’arguments CLI.
- Visualisation et suivi : suis les métriques d’entraînement en temps réel pour obtenir de meilleures informations.
Ces fonctionnalités rendent l’entraînement efficace et adaptable à tes besoins. Pour plus de détails, consulte la section Principales fonctionnalités du mode Train.
Pour reprendre l’entraînement après une interruption de session, définis l’argument
resumesurTrueet indique le chemin du dernier point de reprise enregistré.Exemple de reprise de l’entraînementfrom ultralytics import YOLO # Charger le modèle partiellement entraîné model = YOLO("path/to/last.pt") # Reprendre l’entraînement results = model.train(resume=True)Consulte la section sur la reprise des entraînements interrompus pour en savoir plus.
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. Cela peut nuire aux performances du modèle 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 le degré de pondération des classes en fonction de l’inverse de leur fréquence :cls_pw=0.0(par défaut) : désactive la pondération des classescls_pw=1.0: applique une pondération complète selon l’inverse de la fréquence- Les valeurs entre
0.0et1.0: appliquent une pondération partielle en cas de déséquilibre modéré
Les poids des classes sont calculés selon
(1.0 / class_counts) ^ cls_pwet normalisés pour que leur moyenne soit égale à 1.0.Entraînement sur un jeu de données déséquilibréfrom ultralytics import YOLO # Charger un modèle préentraîné model = YOLO("yolo26n.pt") # Entraîner avec une pondération complète des classes pour des données fortement déséquilibrées results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=1.0) # Ou utiliser une pondération partielle (0.25) en cas de déséquilibre modéré 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 cette valeur à1.0si les performances des classes rares restent insuffisantes. Tu peux vérifier les poids des classes calculés dans les journaux d’entraînement pour contrôler leur distribution.Oui, Ultralytics YOLO26 prend en charge l’entraînement sur les puces Apple silicon grâce à l’infrastructure Metal Performance Shaders (MPS). Spécifie 'mps' comme périphérique d’entraînement.
Exemple d’entraînement MPSfrom ultralytics import YOLO # Charger un modèle préentraîné model = YOLO("yolo26n.pt") # Entraîner le modèle sur une puce Apple silicon (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 MPS sur Apple silicon.
Ultralytics YOLO26 te permet de configurer différents paramètres d’entraînement, comme la taille de lot, le taux d’apprentissage, le nombre d’époques et bien d’autres, à l’aide d’arguments. Voici un bref aperçu :
Argument Valeur par défaut Description modelNoneChemin du fichier du modèle à entraîner. dataNoneChemin du fichier YAML du jeu de données (par exemple, coco8.yaml), ou répertoire ou nom de jeu de données (par exemple,imagenet10) pour la classification.epochs100Nombre total d’époques d’entraînement. batch16Taille de lot, réglable sous forme d’entier ou en mode automatique. imgsz640Taille d’image cible pour l’entraînement. deviceNonePériphérique(s) de calcul pour l’entraînement, comme cpu,0,0,1oumps.saveTrueActive l’enregistrement des points de reprise de l’entraînement et des poids finaux du modèle. Pour un guide détaillé sur les paramètres d’entraînement, consulte la section Paramètres d’entraînement.