Personnalisation avancée#
Les interfaces en ligne de commande et Python d’Ultralytics YOLO sont des abstractions de haut niveau construites sur des moteurs d’exécution de base. Ce guide se concentre sur le moteur Trainer et explique comment le personnaliser selon tes besoins.
Regarder : Maîtriser Ultralytics YOLO : personnalisation avancée
Pour des exemples pratiques de personnalisations courantes du trainer — métriques personnalisées, fonction de perte pondérée par classe, sauvegarde du modèle, gel du backbone et taux d’apprentissage par couche — consulte le guide Personnaliser le trainer.
BaseTrainer#
La classe BaseTrainer fournit une routine d’entraînement générique qui s’adapte à diverses tâches. Personnalise-la en redéfinissant des fonctions ou des opérations spécifiques, tout en respectant les formats requis. Par exemple, intègre ton propre modèle personnalisé et ton propre chargeur de données en redéfinissant ces fonctions :
get_model(cfg, weights): construit le modèle à entraîner.get_dataloader(dataset_path, batch_size, rank, mode): construit le chargeur de données.
Pour plus de détails et le code source, consulte la référence BaseTrainer.
DetectionTrainer#
Voici comment utiliser et personnaliser DetectionTrainer d’Ultralytics YOLO :
from ultralytics.models.yolo.detect import DetectionTrainer
trainer = DetectionTrainer(overrides={...})
trainer.train()
trained_model = trainer.best # Obtenir le meilleur modèlePersonnaliser DetectionTrainer#
Pour entraîner un modèle de détection personnalisé qui n’est pas directement pris en charge, surcharge les fonctionnalités existantes de get_model :
from ultralytics.models.yolo.detect import DetectionTrainer
class CustomTrainer(DetectionTrainer):
def get_model(self, cfg=None, weights=None, verbose=True):
"""Loads a custom detection model given configuration and weight files."""
trainer = CustomTrainer(overrides={...})
trainer.train()Personnalise davantage le trainer en modifiant la fonction de perte ou en ajoutant un callback exécuté à la fin de chaque epoch, par exemple pour enregistrer ou téléverser les derniers poids. Voici un exemple :
from ultralytics.models.yolo.detect import DetectionTrainer
from ultralytics.nn.tasks import DetectionModel
class MyCustomModel(DetectionModel):
def init_criterion(self):
"""Initializes a custom loss function for the model."""
class CustomTrainer(DetectionTrainer):
def get_model(self, cfg=None, weights=None, verbose=True):
"""Returns a customized detection model instance configured with specified config and weights."""
return MyCustomModel(...)
# Callback pour enregistrer les poids du modèle
def log_model(trainer):
"""Logs the path of the last model weight used by the trainer."""
last_weight_path = trainer.last
print(last_weight_path)
trainer = CustomTrainer(overrides={...})
trainer.add_callback("on_train_epoch_end", log_model) # S’ajoute aux callbacks existants
trainer.train()Pour en savoir plus sur les événements qui déclenchent les callbacks et leurs points d’entrée, consulte le guide des callbacks.
Autres composants du moteur#
Personnalise de la même manière d’autres composants comme Validators et Predictors. Pour en savoir plus, consulte la documentation des validateurs et des prédicteurs.
Utiliser YOLO avec des trainers personnalisés#
La classe de modèle YOLO fournit une enveloppe de haut niveau pour les classes Trainer. Tu peux tirer parti de cette architecture pour gagner en flexibilité dans tes workflows de machine learning :
from ultralytics import YOLO
from ultralytics.models.yolo.detect import DetectionTrainer
# Créer un trainer personnalisé
class MyCustomTrainer(DetectionTrainer):
def get_model(self, cfg=None, weights=None, verbose=True):
"""Custom code implementation."""
# Initialiser le modèle YOLO
model = YOLO("yolo26n.pt")
# Entraîner avec un trainer personnalisé
results = model.train(trainer=MyCustomTrainer, data="coco8.yaml", epochs=3)Cette approche te permet de conserver la simplicité de l’interface YOLO tout en personnalisant le processus d’entraînement sous-jacent selon tes besoins spécifiques.
FAQ#
Personnalise
DetectionTrainerpour des tâches spécifiques en redéfinissant ses méthodes afin de l’adapter à ton modèle et à ton chargeur de données personnalisés. Commence par hériter deDetectionTraineret redéfinis des méthodes commeget_modelpour implémenter des fonctionnalités personnalisées. Voici un exemple :from ultralytics.models.yolo.detect import DetectionTrainer class CustomTrainer(DetectionTrainer): def get_model(self, cfg=None, weights=None, verbose=True): """Loads a custom detection model given configuration and weight files.""" trainer = CustomTrainer(overrides={...}) trainer.train() trained_model = trainer.best # Obtenir le meilleur modèlePour personnaliser davantage le système, par exemple en modifiant la fonction de perte ou en ajoutant un callback, consulte le guide des callbacks.
BaseTrainerest la base des routines d’entraînement et peut être personnalisé pour diverses tâches en redéfinissant ses méthodes génériques. Parmi ses principaux composants figurent :get_model(cfg, weights): construit le modèle à entraîner.get_dataloader(dataset_path, batch_size, rank, mode): construit le chargeur de données.preprocess_batch(): gère le prétraitement des lots avant la passe avant du modèle.set_model_attributes(): définit les attributs du modèle à partir des informations du jeu de données.get_validator(): renvoie un validateur pour l’évaluation du modèle.
Pour plus de détails sur la personnalisation et le code source, consulte la référence
BaseTrainer.Ajoute des callbacks pour surveiller et modifier le processus d’entraînement dans
DetectionTrainer. Voici comment ajouter un callback qui enregistre les poids du modèle après chaque epoch d’entraînement :from ultralytics.models.yolo.detect import DetectionTrainer # Callback pour enregistrer les poids du modèle def log_model(trainer): """Logs the path of the last model weight used by the trainer.""" last_weight_path = trainer.last print(last_weight_path) trainer = DetectionTrainer(overrides={...}) trainer.add_callback("on_train_epoch_end", log_model) # S’ajoute aux callbacks existants trainer.train()Pour en savoir plus sur les événements des callbacks et leurs points d’entrée, consulte le guide des callbacks.
Ultralytics YOLO fournit une abstraction de haut niveau reposant sur de puissants moteurs d’exécution, ce qui en fait une solution idéale pour le développement rapide et la personnalisation. Ses principaux avantages sont les suivants :
- Facilité d’utilisation : les interfaces en ligne de commande et Python simplifient les tâches complexes.
- Performances : optimisé pour la détection d’objets en temps réel et diverses applications d’IA pour la vision.
- Personnalisation : facile à étendre pour les modèles personnalisés, les fonctions de perte et les chargeurs de données.
- Modularité : tu peux modifier les composants indépendamment sans affecter l’ensemble du pipeline.
- Intégration : fonctionne parfaitement avec les frameworks et outils courants de l’écosystème ML.
Découvre les capacités de YOLO en explorant la page principale Ultralytics YOLO.
Oui,
DetectionTrainerest très flexible et personnalisable pour les modèles non standard. Hérite deDetectionTraineret surcharge des méthodes pour répondre aux besoins spécifiques de ton modèle. Voici un exemple simple :from ultralytics.models.yolo.detect import DetectionTrainer class CustomDetectionTrainer(DetectionTrainer): def get_model(self, cfg=None, weights=None, verbose=True): """Loads a custom detection model.""" trainer = CustomDetectionTrainer(overrides={...}) trainer.train()Pour obtenir des instructions et des exemples détaillés, consulte la référence
DetectionTrainer.