Personalizzazione avanzata#
Le interfacce a riga di comando e Python di Ultralytics YOLO sono astrazioni di alto livello basate su esecutori del motore di base. Questa guida si concentra sul motore Trainer e spiega come personalizzarlo in base alle tue esigenze specifiche.
Guarda: Padroneggiare Ultralytics YOLO: personalizzazione avanzata
Per esempi pratici di personalizzazioni comuni del trainer — metriche personalizzate, funzione di perdita pesata per classe, salvataggio del modello, congelamento del backbone e tassi di apprendimento per layer — consulta la guida Personalizzare il Trainer.
BaseTrainer#
La classe BaseTrainer fornisce una routine di addestramento generica, adattabile a varie attività. Personalizzala sovrascrivendo funzioni o operazioni specifiche e rispettando i formati richiesti. Ad esempio, integra il tuo modello personalizzato e il tuo dataloader sovrascrivendo queste funzioni:
get_model(cfg, weights): crea il modello da addestrare.get_dataloader(dataset_path, batch_size, rank, mode): crea il dataloader.
Per maggiori dettagli e per il codice sorgente, consulta il riferimento di BaseTrainer.
DetectionTrainer#
Ecco come usare e personalizzare DetectionTrainer di Ultralytics YOLO:
from ultralytics.models.yolo.detect import DetectionTrainer
trainer = DetectionTrainer(overrides={...})
trainer.train()
trained_model = trainer.best # Ottieni il modello migliorePersonalizzare DetectionTrainer#
Per addestrare un modello di rilevamento personalizzato non supportato direttamente, sovraccarica la funzionalità esistente di 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()Personalizza ulteriormente il trainer modificando la funzione di perdita o aggiungendo una callback eseguita al termine di ogni epoca, ad esempio per registrare o caricare i pesi più recenti. Ecco un esempio:
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 per registrare i pesi del modello
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) # Si aggiunge alle callback esistenti
trainer.train()Per ulteriori informazioni sugli eventi che attivano le callback e sui punti di ingresso, consulta la Guida alle callback.
Altri componenti del motore#
Personalizza allo stesso modo altri componenti come Validators e Predictors. Per ulteriori informazioni, consulta la documentazione di Validators e Predictors.
Usare YOLO con trainer personalizzati#
La classe del modello YOLO fornisce un wrapper di alto livello per le classi Trainer. Puoi sfruttare questa architettura per ottenere maggiore flessibilità nei tuoi flussi di lavoro di machine learning:
from ultralytics import YOLO
from ultralytics.models.yolo.detect import DetectionTrainer
# Crea un trainer personalizzato
class MyCustomTrainer(DetectionTrainer):
def get_model(self, cfg=None, weights=None, verbose=True):
"""Custom code implementation."""
# Inizializza il modello YOLO
model = YOLO("yolo26n.pt")
# Addestra con un trainer personalizzato
results = model.train(trainer=MyCustomTrainer, data="coco8.yaml", epochs=3)Questo approccio ti permette di mantenere la semplicità dell'interfaccia YOLO e di personalizzare al contempo il processo di addestramento sottostante in base alle tue esigenze specifiche.
Domande frequenti#
Personalizza
DetectionTrainerper attività specifiche sovrascrivendone i metodi, così da adattarlo al tuo modello e al tuo dataloader personalizzati. Inizia ereditando daDetectionTrainere ridefinisci metodi comeget_modelper implementare funzionalità personalizzate. Ecco un esempio: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 # Ottieni il modello migliorePer ulteriori personalizzazioni, come la modifica della funzione di perdita o l'aggiunta di una callback, consulta la Guida alle callback.
BaseTrainerè la base delle routine di addestramento e può essere personalizzato per varie attività sovrascrivendone i metodi generici. Tra i componenti principali:get_model(cfg, weights): crea il modello da addestrare.get_dataloader(dataset_path, batch_size, rank, mode): crea il dataloader.preprocess_batch(): gestisce la preelaborazione dei batch prima del passaggio in avanti del modello.set_model_attributes(): imposta gli attributi del modello in base alle informazioni del dataset.get_validator(): restituisce un validator per la valutazione del modello.
Per ulteriori dettagli sulla personalizzazione e sul codice sorgente, consulta il riferimento di
BaseTrainer.Aggiungi callback per monitorare e modificare il processo di addestramento in
DetectionTrainer. Ecco come aggiungere una callback per registrare i pesi del modello dopo ogni epoca di addestramento:from ultralytics.models.yolo.detect import DetectionTrainer # Callback per registrare i pesi del modello 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) # Si aggiunge alle callback esistenti trainer.train()Per ulteriori dettagli sugli eventi delle callback e sui punti di ingresso, consulta la Guida alle callback.
Ultralytics YOLO offre un'astrazione di alto livello sopra potenti esecutori del motore, ideale per sviluppare e personalizzare rapidamente. Tra i principali vantaggi:
- Facilità d'uso: le interfacce a riga di comando e Python semplificano le attività complesse.
- Prestazioni: ottimizzato per il rilevamento degli oggetti in tempo reale e per diverse applicazioni di IA visiva.
- Personalizzazione: facilmente estensibile con modelli, funzioni di perdita e dataloader personalizzati.
- Modularità: puoi modificare i componenti in modo indipendente, senza influire sull'intera pipeline.
- Integrazione: funziona perfettamente con i framework e gli strumenti più diffusi nell'ecosistema ML.
Scopri di più sulle capacità di YOLO visitando la pagina principale di Ultralytics YOLO.
Sì,
DetectionTrainerè altamente flessibile e personalizzabile per i modelli non standard. Eredita daDetectionTrainere sovraccarica i metodi per supportare le esigenze specifiche del tuo modello. Ecco un semplice esempio: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()Per istruzioni ed esempi completi, consulta il riferimento di
DetectionTrainer.