Entraînement de modèle avec Ultralytics YOLO#
Introduction#
Entraîner un modèle de deep learning consiste à lui fournir des données et à ajuster ses paramètres pour qu'il puisse faire des prédictions précises. Le mode Train dans Ultralytics YOLO26 est conçu pour un entraînement efficace et performant de modèles de détection d'objets, en exploitant pleinement les capacités du matériel moderne. Ce guide vise à couvrir tous les détails dont tu as besoin pour commencer à entraîner tes propres modèles en utilisant l'ensemble de fonctionnalités robustes de YOLO26. Si tu n'as pas encore installé Ultralytics, commence par le guide de démarrage rapide.
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é : Tire le meilleur parti de ton matériel, que tu sois sur une configuration à un seul GPU ou que tu passes à l'échelle sur plusieurs GPU.
- Polyvalence : Entraîne sur des jeux de données personnalisés en plus de ceux facilement disponibles comme COCO, VOC et ImageNet.
- Convivialité : Interfaces CLI et Python simples mais puissantes pour une expérience d'entraînement directe.
- Flexibilité des hyperparamètres : Une large gamme d'hyperparamètres personnalisables pour affiner les performances du modèle. Pour un contrôle plus approfondi, tu peux personnaliser le formateur toi-même.
- Entraînement dans le cloud : Entraîne-toi sur des GPU cloud via Ultralytics Platform avec des métriques en temps réel et la création automatique de points de contrôle.
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 dotées d'une source de téléchargement sont téléchargées automatiquement lors de la 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 multi-GPU : Fais évoluer tes efforts d'entraînement de manière transparente sur plusieurs GPU pour accélérer le processus.
- Configuration des hyperparamètres : L'option de modifier les hyperparamètres via des fichiers de configuration YAML ou des arguments CLI.
- Visualisation et surveillance : Suivi en temps réel des métriques d'entraînement et visualisation du processus d'apprentissage pour de meilleures perspectives.
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 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 recevoir un message 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 ce problème.
Le périphérique est déterminé automatiquement. Si un GPU est disponible, il sera utilisé (périphérique CUDA par défaut 0) ; sinon, l'entraînement démarrera sur 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 multi-GPU#
L'entraînement multi-GPU permet une utilisation plus efficace des 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 en ligne de commande. Pour activer l'entraînement multi-GPU, spécifie les ID des périphériques GPU que tu souhaites utiliser.
Pour entraîner avec 2 GPU, les périphériques CUDA 0 et 1, utilise les commandes suivantes. Étends à des GPU supplémentaires 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 multi-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 par défaut le backend libuv depuis PyTorch 2.4, et les roues Windows officielles sont construites 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 le TCPStore et ce chemin de code ne lit jamais la variable. Entraîne-toi sur Linux ou WSL2 pour utiliser plusieurs GPU, ou entraîne-toi 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 de formateur et exécute torch.distributed.run en arrière-plan. Cela fonctionne de manière transparente pour l'utilisation standard en CLI et les scripts Python non modifiés.
Cependant, si ton script contient des composants personnalisés – tels qu'un formateur, un validateur, un jeu de données ou un pipeline d'augmentation personnalisés –, ces objets ne peuvent pas être automatiquement sérialisés et transférés vers les sous-processus DDP. Dans ce cas, tu dois lancer ton script directement avec torch.distributed.run :
python -m torch.distributed.run --nproc_per_node 2 your_training_script.pyL'entraînement sur GPU AMD utilise une compilation 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 de la prise en charge de MIGraphX, DirectML et Ryzen AI NPU.
L'entraînement sur GPU Intel utilise device=xpu:0, ou plusieurs identifiants XPU avec une compilation 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 mutuellement compatibles de CANN, PyTorch et torch_npu
en suivant le guide d'installation d'Ascend Extension for PyTorch,
puis charge l'environnement CANN avant de démarrer 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, notamment 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 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 une sélection automatique des GPU les moins utilisés dans les systèmes multi-GPU, optimisant l'utilisation des ressources sans sélection manuelle de GPU. Cette fonctionnalité identifie les GPU disponibles en fonction des métriques d'utilisation et de la disponibilité 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. Ceci est particulièrement utile dans les environnements informatiques partagés ou sur les serveurs comptant plusieurs utilisateurs.
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 d'auto-sélection privilégie les GPU avec :
- Des pourcentages d'utilisation actuels plus faibles
- Une mémoire disponible plus élevée (VRAM libre)
- Une température et une consommation d'énergie plus basses
Cette fonctionnalité est particulièrement précieuse 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 aux conditions changeantes du système, assurant une allocation optimale des ressources sans intervention manuelle.
Entraînement MPS sur Apple Silicon#
Avec la prise en charge des puces Apple silicon intégrée dans les modèles Ultralytics YOLO, il est désormais possible d'entraîner tes modèles sur des appareils utilisant le puissant framework Metal Performance Shaders (MPS). Le MPS offre un moyen haute performance d'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 ton périphérique lors de l'initialisation du processus d'entraînement. Voici ci-dessous un exemple de la façon dont tu pourrais faire cela en 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, cela permet un traitement plus efficace des tâches d'entraînement. Pour des conseils plus détaillés et des options de configuration avancées, réfère-toi à la documentation PyTorch MPS.
Reprise d'entraînements interrompus#
Reprendre l'entraînement à partir d'un état précédemment enregistré est une fonctionnalité cruciale lorsque tu travailles avec des modèles de deep learning. Cela peut s'avérer utile dans divers scénarios, comme lorsque le processus d'entraînement a été interrompu de manière inattendue, ou lorsque tu souhaites continuer l'entraînement d'un modèle avec de nouvelles données ou pour plus d'epochs.
Lorsque 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 taux d'apprentissage et le numéro d'époque. Cela te permet de poursuivre le processus d'entraînement de manière transparente là où il s'était arrêté.
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 spécifiant le chemin d'accès au fichier .pt contenant les poids du modèle partiellement entraîné.
Voici ci-dessous un exemple de la façon de reprendre un entraînement interrompu en utilisant 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 reprendra 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.
Rappelle-toi que les points de contrôle sont sauvegardés à la fin de chaque époque par défaut, ou à des 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 pour les modèles YOLO englobent 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 moment 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. Un réglage minutieux 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 style Muon.
Il est recommandé pour les exécutions d'entraînement YOLO26 plus longues et les jeux de données plus grands, où les mises à jour orthogonales Muon peuvent aider à 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 style Muon avec SGD, tandis que tous les autres paramètres, tels que les poids de normalisation par lot et les termes de biais, restent sur le SGD standard.
Lorsque optimizer=auto est utilisé, Ultralytics sélectionne automatiquement MuSGD pour les entraînements plus longs (généralement lorsque les itérations > 10000). Pour les entraînements plus courts, le formateur se replie sur 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 | Défaut | Description |
|---|---|---|---|
model | str | None | Spécifie le fichier de modèle pour l'entraînement. Accepte soit le chemin d'accès vers un modèle pré-entraîné .pt, soit 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 dataset (par exemple, coco8.yaml), qui contient les chemins d'accès aux données d'entraînement et de validation, les noms des classes et le nombre de classes. La classification prend plutôt un répertoire de dataset ou un nom de dataset 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 dataset. Modifier cette valeur peut influer sur la durée de l'entraînement et sur les performances du modèle. |
time | float | None | Temps d'entraînement maximal en heures. S'il est défini, ce paramètre remplace l'argument epochs, permettant à l'entraînement de s'arrêter automatiquement après la durée spécifiée. Pratique 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'interrompre prématurément l'entraînement. Aide à prévenir le surapprentissage en stoppant l'entraînement lorsque les performances se stabilisent. |
batch | int ou float | 16 | Taille de lot, avec trois modes : défini sous forme de nombre entier (par exemple, batch=16), mode automatique pour une utilisation de la mémoire GPU à 60 % (batch=-1), ou mode automatique avec une fraction d'utilisation spécifiée (batch=0.70). |
imgsz | int | 640 | Taille d'image cible pour l'entraînement. Les images sont redimensionnées sous forme de carrés dont les côtés sont égaux à la valeur spécifiée (si rect=False), en préservant le ratio d'aspect pour les modèles YOLO mais pas pour RT-DETR. Affecte la précision et la complexité de calcul du modèle. |
save | bool | True | Permet l'enregistrement des points de contrôle de l'entraînement et des poids finaux du modèle. Utile pour reprendre l'entraînement ou pour le déploiement de modèles. |
save_period | int | -1 | Fréquence d'enregistrement des points de contrôle du modèle, spécifiée en epochs. Une valeur de -1 désactive cette fonctionnalité. Utile pour enregistrer des modèles intermédiaires pendant de longues sessions d'entraînement. |
cache | bool | False | Active la mise en cache des images du dataset en mémoire (True/ram), sur disque (disk) ou la désactive (False). Améliore la vitesse d'entraînement en réduisant les E/S disque au détriment d'une augmentation de l'utilisation 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 Silicon (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 en cas d'entraînement multi-GPU). Influence la vitesse de prétraitement des données et leur acheminement vers le modèle, ce qui est particulièrement utile dans les configurations multi-GPU. |
project | str | None | Nom du répertoire de projet où les sorties d'entraînement sont enregistrées. Permet un stockage organisé des 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ù les journaux et les sorties d'entraînement sont stockés. |
exist_ok | bool | False | Si True, permet d'écraser un répertoire projet/nom existant. Utile pour l'expérimentation itérative sans avoir besoin d'effacer manuellement les sorties précédentes. |
save_dir | str | None | Spécifie le répertoire exact où sont sauvegardés les résultats d'exécution, en remplaçant la combinaison project/name. Le chemin est utilisé tel quel sans incrémentation automatique, de sorte que les exécutions consécutives réutilisent le même répertoire. |
pretrained | bool ou str | True | Détermine s'il faut démarrer l'entraînement à partir de poids pré-entraînés. Peut être une valeur booléenne ou un chemin textuel vers les poids à charger. pretrained=False entraîne à partir de poids initialisés aléatoirement tout en conservant l'architecture du modèle. |
cls_remap | bool | True | Lors du réglage fin (fine-tuning) sur plusieurs jeux de données, copie les lignes de la tête de classification pré-entraînée dans le nouveau modèle partout où les noms de classes correspondent, afin que les classes qui se chevauchent conservent leur biais appris, ainsi que leurs poids lorsque la largeur de la tête est 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. Affecte la vitesse de convergence et la stabilité. |
seed | int | 0 | Définit la graine aléatoire pour l'entraînement, assurant la reproductibilité des résultats à travers les exécutions avec les mêmes configurations. |
deterministic | bool | True | Force l'utilisation d'algorithmes déterministes, assurant la reproductibilité mais peut affecter les performances et la vitesse en raison de la restriction sur les algorithmes non déterministes. |
verbose | bool | True | Active une sortie détaillée pendant l'entraînement, affichant des barres de progression, des 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 multi-classes comme une classe unique pendant l'entraînement. Utile pour les tâches de classification binaire ou lorsque l'accent est mis sur la présence d'objets plutôt que sur la classification. |
classes | list[int] | None | Spécifie une liste d'identifiants de classe pour l'entraînement. Utile pour filtrer et se concentrer uniquement sur certaines classes pendant l'entraînement. |
rect | bool | False | Active la stratégie de remplissage minimal : les images d'un lot sont rembourrées de manière minimale pour atteindre une taille commune, le côté le plus long étant égal à imgsz. Peut améliorer l'efficacité et la vitesse, mais risque d'affecter la précision du modèle. |
multi_scale | float | 0.0 | Varie aléatoirement imgsz pour chaque lot de +/- multi_scale (par exemple, 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 en cosinus, ajustant le taux d'apprentissage selon une courbe en cosinus au fil des époques. Aide à gérer le taux d'apprentissage pour une meilleure convergence. |
close_mosaic | int | 10 | Désactive l'augmentation de données de type mosaïque lors des N dernières époques pour stabiliser l'entraînement avant sa fin. Définir cette valeur à 0 désactive cette fonctionnalité. |
resume | bool | False | Reprend l'entraînement depuis le dernier point de sauvegarde. Charge automatiquement les poids du modèle, l'état de l'optimiseur et le nombre d'époques, continuant 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 appareils CUDA pris en charge, et False ou "fp32" utilise FP32. |
fraction | float, int ou list | 1.0 | Sous-ensemble de dataset à utiliser : un ratio tel que 0.1, un nombre d'images d'entraînement tel que 300, ou [train, val] ratios/comptes tels que [0.1, 0.2], [300, 100], ou [0.1, 100]. Un entier 1 sélectionne une image, tandis qu'un nombre à virgule flottante 1.0 sélectionne toutes les images. Les datasets NDJSON sélectionnent des enregistrements espacés régulièrement avant le téléchargement, de sorte que des exécutions répétées réutilisent exactement les mêmes images. |
profile | bool | False | Active le profilage des vitesses ONNX et TensorRT pendant l'entraînement, 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 par index ou nom de module (23.cv2, sans le préfixe model.), réduisant le nombre de paramètres entraînables. Utile pour le réglage fin ou le transfer learning. |
lr0 | float | 0.01 | Taux d'apprentissage initial (c'est-à-dire SGD=1E-2, Adam=1E-3). L'ajustement de cette valeur est crucial pour le processus d'optimisation, car il influence la rapidité avec laquelle les poids du modèle sont mis à jour. |
lrf | float | 0.01 | Taux d'apprentissage final en tant que fraction du taux initial = (lr0 * lrf), utilisé conjointement avec des planificateurs pour ajuster le taux d'apprentissage au fil du temps. |
momentum | float | 0.937 | Facteur de moment pour SGD ou bêta1 pour les optimiseurs Adam, influençant l'intégration des gradients passés dans la mise à jour actuelle. |
weight_decay | float | 0.0005 | Terme de régularisation L2, pénalisant les poids trop importants pour éviter le surapprentissage. |
warmup_epochs | float | 3.0 | Nombre d'époques pour l'échauffement du taux d'apprentissage, augmentant progressivement le taux d'apprentissage d'une valeur faible vers le taux initial pour stabiliser l'entraînement dès le début. |
warmup_momentum | float | 0.8 | Momentum initial pour la phase d'échauffement, s'ajustant progressivement au momentum défini pendant la période d'échauffement. |
warmup_bias_lr | float | 0.1 | Taux d'apprentissage pour les paramètres de biais pendant la phase de préchauffage (warmup), aidant à stabiliser l'entraînement du modèle lors des premières époques. Défini automatiquement sur 0.0 sous la valeur par défaut optimizer='auto', alors nomme explicitement un optimiseur pour l'utiliser. |
distill_model | str | None | Chemin vers un point de contrôle de modèle enseignant (par exemple, yolo26x.pt) pour la distillation de connaissances. Lorsqu'il est défini, le modèle élève est entraîné avec une perte de distillation supplémentaire guidée par l'enseignant figé. |
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 du guidage des caractéristiques de l'enseignant. |
box | float | 7.5 | Poids de la composante de perte de boîte dans la fonction de perte, influençant 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, affectant l'importance de la prédiction correcte de la classe par rapport aux autres composantes. |
cls_pw | float | 0.0 | Puissance de pondération des classes pour gérer le déséquilibre des classes à l'aide de la fréquence inverse des classes. 0.0 désactive la pondération des classes, 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 de la boîte : distribution focal loss (DFL) lorsque la tête de détection utilise reg_max > 1, ou une perte L1 sur les distances de boîte normalisées sur le 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, influençant l'accent mis sur la prédiction précise des points clés de la pose. |
kobj | float | 1.0 | Poids de la perte de présence d'objet de point clé dans les modèles d'estimation de pose, équilibrant la confiance de détection avec 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, affectant la précision de la localisation des points clés. |
angle | float | 1.0 | Poids de la perte d'angle dans les modèles OBB, affectant 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, le terme principal qui pilote la précision de la profondeur. |
dgrad | float | 0.5 | Poids de la perte de gradient dans les modèles d'estimation de profondeur, pénalisant les erreurs dans les contours de profondeur et encourageant des limites de surface plus nettes. |
dlam | float | 1.0 | Facteur de focalisation de 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 à un simple 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 plus petit masque est superposé au plus grand lors de la fusion. |
mask_ratio | int | 4 | Ratio de sous-échantillonnage pour les masques de segmentation, affectant la résolution des masques utilisés pendant l'entraînement. |
dropout | float | 0.0 | Taux de dropout pour la régularisation dans les tâches de classification, empêchant le surapprentissage en omettant aléatoirement des unités pendant l'entraînement. |
val | bool | True | Active la validation pendant l'entraînement, permettant une évaluation périodique des performances du modèle sur un jeu de données distinct. |
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édiction, fournissant des aperçus visuels sur les performances du modèle et la progression de l'apprentissage. |
compile | bool ou str | False | Active la compilation de graphes PyTorch 2.x torch.compile avec backend='inductor'. Accepte True → "default", False → désactive, ou un mode textuel tel que "default", "reduce-overhead", "max-autotune-no-cudagraphs". Revient au mode dynamique (eager) avec un avertissement si non pris en charge. |
channels_last | bool | False | Utilise le format de mémoire channels_last (NHWC) pour les convolutions pendant l'entraînement, ce qui accélère les GPU CUDA Tensor Core sans modifier les résultats. Ignoré automatiquement sur les CPU et MPS, où il n'offre aucun avantage. |
max_det | int | 300 | Spécifie le nombre maximal d'objets conservés pendant la phase de validation de l'entraînement. |
L'argument batch peut être configuré de trois manières :
- Taille des lots fixe : Définis une valeur entière (par exemple,
batch=16), en spécifiant directement le nombre d'images par lot. - Mode Auto (60 % de 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 Auto 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 l'utilisation de la mémoire GPU. - Réessai automatique OOM : Si une erreur de mémoire CUDA insuffisante se produit lors de la première époque, l'entraîneur divise automatiquement la taille du lot par deux et réessaie (jusqu'à 3 fois). Cela ne s'applique qu'à l'entraînement sur un seul GPU ; l'entraînement multi-GPU (DDP) soulèvera l'erreur immédiatement.
- No Fit Found : si aucune taille de lot candidate ne produit de profil utilisable, AutoBatch lève une
RuntimeErrorexplicite au lieu de basculer silencieusement sur une valeur par défaut non liée.
Paramètres d'augmentation et hyperparamètres#
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, aidant ainsi le modèle à mieux généraliser face à des données inédites. Le tableau suivant présente le rôle et l'effet de chaque argument d'augmentation :
| Argument | Type | 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 par une fraction de la roue chromatique, introduisant une variabilité des couleurs. Aide le modèle à généraliser dans différentes conditions d'éclairage. |
hsv_s | float | 0.7 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Alterne la saturation de l'image par une fraction, affectant l'intensité des couleurs. Utile pour simuler différentes conditions environnementales. |
hsv_v | float | 0.4 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Modifie la valeur (luminosité) de l'image par une fraction, aidant le modèle à bien fonctionner dans diverses conditions d'éclairage. |
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, ce qui améliore la capacité du modèle à reconnaître les objets selon diverses 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 la taille de l'image, ce qui aide à apprendre à détecter des 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 à 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 avec la probabilité spécifiée, augmentant la variabilité des données sans affecter 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, utile pour apprendre des objets symétriques et augmenter 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, utile pour augmenter 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 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 étiquettes, créant une image composite. Améliore la capacité du modèle à généraliser en introduisant du bruit dans les étiquettes et de la 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 | 0.0 - 1.0 | Fraction d'objets éligibles collés ; flip les reflète dans l'image, tandis que mixup utilise également la valeur comme probabilité d'application inter-images. |
copy_paste_mode | str | flip | segment | - | 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 à 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 pour 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 de données avancée (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 à accomplir. Expérimenter avec différentes valeurs peut aider à trouver la stratégie d'augmentation optimale menant à la meilleure performance du modèle.
Pour plus d'informations sur les opérations d'augmentation de l'entraînement, consulte la section de référence.
Journalisation#
Lors de l'entraînement d'un modèle YOLO26, il peut être utile de suivre les performances du modèle au fil du temps. C'est là qu'intervient la journalisation. Ultralytics YOLO offre une prise en charge de trois types de journaliseurs : Comet, ClearML et TensorBoard.
Pour utiliser un outil de journalisation, sélectionne-le dans le menu déroulant du snippet de code ci-dessus et exécute-le. L'outil choisi sera installé et initialisé.
Comet#
Comet est une plateforme qui permet aux data scientists et aux développeurs de suivre, comparer, expliquer et optimiser des expériences et des modèles. Elle fournit des fonctionnalités telles que des métriques en temps réel, des différences de code et le suivi 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 de récupérer 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 de 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. Il te permet de visualiser ton graphique TensorFlow, de tracer des métriques quantitatives sur l'exécution de ton graphique et d'afficher des données supplémentaires telles que des images qui y transitent.
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 sur localhost:6006.
tensorboard --logdir ultralytics/runs # replace with 'runs' directoryCela chargera TensorBoard et le dirigera vers le répertoire où tes journaux d'entraînement sont enregistrés.
Après avoir configuré ton outil de journalisation, 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 identifier les axes d'amélioration.
Et après ?#
Valide ton modèle entraîné sur des données de test isolées pour vérifier sa précision dans le monde réel, puis exporte-le vers ONNX, TensorRT ou un autre format de déploiement. Tu t'entraînes sur tes propres données au lieu de COCO8 ? Formate-les d'abord à l'aide du guide des jeux de données.
FAQ#
Oui. L'entraînement cloud d'Ultralytics Platform inclut des crédits gratuits pour commencer. Télécharge ton jeu de données, sélectionne un modèle et un GPU, et entraîne-toi directement depuis le navigateur.
Les fonctionnalités clés du mode Entraînement d'Ultralytics YOLO26 incluent :
- Téléchargement automatique du jeu de données : Télécharge automatiquement les jeux de données standard comme COCO, VOC et ImageNet.
- Prise en charge multi-GPU : Échelonne l'entraînement sur plusieurs GPU pour un traitement plus rapide.
- Configuration des hyperparamètres : Personnalise les hyperparamètres via des fichiers YAML ou des arguments CLI.
- Visualisation et suivi : Suivi en temps réel des métriques d'entraînement pour de meilleures analyses.
Ces fonctionnalités rendent l'entraînement efficace et personnalisable selon tes besoins. Pour plus de détails, consulte la section Fonctionnalités clés du mode Train.
Pour reprendre l'entraînement à partir d'une session interrompue, définis l'argument
resumesurTrueet spécifie le chemin d'accès au dernier point de contrôle sauvegardé.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 sur la reprise des entraînements interrompus pour plus d'informations.
Le déséquilibre des classes se produit lorsque certaines classes ont nettement moins d'exemples que d'autres dans tes données d'entraînement. Cela peut amener le modèle à donner de mauvais résultats 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 la puissance de 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 par fréquence inverse- Valeurs entre
0.0et1.0: Fournissent une pondération partielle en cas de déséquilibre modéré
Les poids des classes sont calculés sous la forme
(1.0 / class_counts) ^ cls_pwet normalisés de sorte 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)AstuceCommence avec
cls_pw=0.25pour les jeux de données modérément déséquilibrés et augmente à1.0si les classes rares sous-performent toujours. Tu peux vérifier les poids de classe calculés dans les journaux d'entraînement pour vérifier la distribution des poids.Oui, Ultralytics YOLO26 prend en charge l'entraînement sur des puces Apple silicon en utilisant le 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, réfère-toi à la section Entraînement MPS Apple Silicon.
Ultralytics YOLO26 te permet de configurer une variété de paramètres d'entraînement tels que la taille de lot (batch size), le taux d'apprentissage (learning rate), les époques et plus encore via des arguments. Voici un bref aperçu :
Argument Défaut Description modelNoneChemin vers le fichier du modèle pour l'entraînement. dataNoneChemin d'accès au 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 (batch size), ajustable en entier ou en mode automatique. imgsz640Taille cible de l'image pour l'entraînement. deviceNonePériphérique(s) de calcul pour l'entraînement tel(s) que cpu,0,0,1oumps.saveTrueActive l'enregistrement des points de contrôle d'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.
Pour entraîner un modèle de détection d'objets en utilisant Ultralytics YOLO26, tu peux utiliser soit l'API Python, soit la CLI. Voici un exemple pour les deux :
Pour plus de détails, réfère-toi à la section Paramètres d'entraînement.