YOLO Vision 2026:

Callback#

Il framework Ultralytics supporta i callback, che fungono da punti di accesso in fasi strategiche durante le modalità train, val, export e predict. Ciascun callback accetta un oggetto Trainer, Validator o Predictor, a seconda del tipo di operazione. Tutte le proprietà di questi oggetti sono descritte in dettaglio nella sezione di riferimento della documentazione.



Watch: How to use Ultralytics Callbacks | Predict, Train, Validate and Export Callbacks | Ultralytics YOLO🚀

Esempi#

Restituzione di informazioni aggiuntive con la previsione#

In questo esempio, dimostriamo come restituire il fotogramma originale insieme a ciascun oggetto risultato:

from ultralytics import YOLO

def on_predict_batch_end(predictor):
    """Combine prediction results with corresponding frames."""
    _, image, _, _ = predictor.batch

    # Ensure that image is a list
    image = image if isinstance(image, list) else [image]

    # Combine the prediction results with the corresponding frames
    predictor.results = zip(predictor.results, image)

# Create a YOLO model instance
model = YOLO("yolo26n.pt")

# Add the custom callback to the model
model.add_callback("on_predict_batch_end", on_predict_batch_end)

# Iterate through the results and frames
for result, frame in model.predict():  # or model.track()
    pass

Accedi alle metriche del modello utilizzando il callback on_model_save#

Questo esempio mostra come recuperare i dettagli dell'addestramento, come il punteggio best_fitness, total_loss e altre metriche dopo che un checkpoint viene salvato utilizzando il callback on_model_save.

from ultralytics import YOLO

# Load a YOLO model
model = YOLO("yolo26n.pt")

def print_checkpoint_metrics(trainer):
    """Print trainer metrics and loss details after each checkpoint is saved."""
    print(
        f"Model details\n"
        f"Best fitness: {trainer.best_fitness}, "
        f"Loss names: {trainer.loss_names}, "  # List of loss names
        f"Metrics: {trainer.metrics}, "
        f"Total loss: {trainer.tloss}"  # Total loss value
    )

if __name__ == "__main__":
    # Add on_model_save callback.
    model.add_callback("on_model_save", print_checkpoint_metrics)

    # Run model training on custom dataset.
    results = model.train(data="coco8.yaml", epochs=3)

Tutti i callback#

Di seguito sono elencati tutti i callback supportati. Per maggiori dettagli, fai riferimento al codice sorgente dei callback.

Callback del Trainer#

CallbackDescrizione
on_pretrain_routine_startAttivato all'inizio della routine di pre-addestramento, prima del caricamento dei dati e dell'impostazione del modello.
on_pretrain_routine_endAttivato alla fine della routine di pre-addestramento, una volta completati il caricamento dei dati e l'impostazione del modello.
on_train_startAttivato all'avvio dell'addestramento, prima che inizi la prima epoca.
on_train_epoch_startAttivato all'inizio di ogni epoca di addestramento, prima che inizi l'iterazione dei batch.
on_train_batch_startAttivato all'inizio di ogni batch di addestramento, prima del passaggio in avanti (forward pass).
optimizer_stepAttivato durante il passaggio dell'ottimizzatore. Riservato a integrazioni personalizzate; non chiamato dal ciclo di addestramento predefinito.
on_before_zero_gradAttivato prima che i gradienti vengano azzerati. Riservato a integrazioni personalizzate; non chiamato dal ciclo di addestramento predefinito.
on_train_batch_endAttivato alla fine di ogni batch di addestramento, dopo il passaggio all'indietro (backward pass). Il passaggio dell'ottimizzatore potrebbe essere posticipato a causa dell'accumulo dei gradienti.
on_train_epoch_endAttivato alla fine di ogni epoca di addestramento, dopo l'elaborazione di tutti i batch ma prima della validazione. Le metriche di validazione e il fitness potrebbero non essere ancora disponibili.
on_model_saveAttivato quando viene salvato il checkpoint del modello, dopo la validazione.
on_fit_epoch_endAttivato alla fine di ogni epoca di fit (train + val), dopo la validazione e l'eventuale salvataggio del checkpoint. Le metriche di validazione sono disponibili e il fitness è disponibile per la chiamata di addestramento per epoca. Questo callback viene chiamato anche durante la valutazione finale del modello migliore, dove non avviene alcun salvataggio del checkpoint e il fitness potrebbe non essere presente.
on_train_endAttivato al termine del processo di addestramento, dopo la valutazione finale del modello migliore.
on_params_updateAttivato quando i parametri del modello vengono aggiornati. Riservato a integrazioni personalizzate; non chiamato dal ciclo di addestramento predefinito.
teardownAttivato quando il processo di addestramento viene ripulito.

Callback del Validator#

CallbackDescrizione
on_val_startAttivato all'avvio della validazione.
on_val_batch_startAttivato all'inizio di ogni batch di validazione.
on_val_batch_endAttivato alla fine di ogni batch di validazione.
on_val_endAttivato al termine della validazione.

Callback del Predictor#

CallbackDescrizione
on_predict_startAttivato all'avvio del processo di previsione.
on_predict_batch_startAttivato all'inizio di ogni batch di previsione.
on_predict_postprocess_endAttivato alla fine della post-elaborazione della previsione.
on_predict_batch_endAttivato alla fine di ogni batch di previsione.
on_predict_endAttivato al termine del processo di previsione.

Callback dell'Exporter#

CallbackDescrizione
on_export_startAttivato all'avvio del processo di esportazione.
on_export_endAttivato al termine del processo di esportazione.

FAQ#

  • I callback di Ultralytics sono punti di accesso specializzati che vengono attivati durante fasi chiave delle operazioni del modello come addestramento, convalida, esportazione e predizione. Questi callback consentono funzionalità personalizzate in punti specifici del processo, permettendo miglioramenti e modifiche al flusso di lavoro. Ciascun callback accetta un oggetto Trainer, Validator o Predictor, a seconda del tipo di operazione. Per le proprietà dettagliate di questi oggetti, fai riferimento alla sezione di riferimento.

    Per utilizzare un callback, definisci una funzione e aggiungila al modello utilizzando il metodo model.add_callback(). Ecco un esempio di restituzione di informazioni aggiuntive durante la predizione:

    from ultralytics import YOLO
    
    def on_predict_batch_end(predictor):
        """Handle prediction batch end by combining results with corresponding frames; modifies predictor results."""
        _, image, _, _ = predictor.batch
        image = image if isinstance(image, list) else [image]
        predictor.results = zip(predictor.results, image)
    
    model = YOLO("yolo26n.pt")
    model.add_callback("on_predict_batch_end", on_predict_batch_end)
    for result, frame in model.predict():
        pass
  • Personalizza la tua routine di addestramento Ultralytics iniettando logica in fasi specifiche del processo di addestramento. Ultralytics YOLO offre una varietà di callback di addestramento, come on_train_start, on_train_end e on_train_batch_end, che ti consentono di aggiungere metriche personalizzate, elaborazione o logging.

    Ecco come bloccare le statistiche di BatchNorm quando si bloccano i livelli con i callback:

    from ultralytics import YOLO
    
    # Add a callback to put the frozen layers in eval mode to prevent BN values from changing
    def put_in_eval_mode(trainer):
        n_layers = trainer.args.freeze
        if not isinstance(n_layers, int):
            return
    
        for i, (name, module) in enumerate(trainer.model.named_modules()):
            if name.endswith("bn") and int(name.split(".")[1]) < n_layers:
                module.eval()
                module.track_running_stats = False
    
    model = YOLO("yolo26n.pt")
    model.add_callback("on_train_epoch_start", put_in_eval_mode)
    model.train(data="coco.yaml", epochs=10)

    Per maggiori dettagli su come utilizzare efficacemente i callback di addestramento, consulta la Guida all'addestramento.

  • L'uso dei callback durante la convalida in Ultralytics YOLO migliora la valutazione del modello consentendo elaborazione personalizzata, logging o calcolo delle metriche. Callback come on_val_start, on_val_batch_end e on_val_end forniscono punti di accesso per iniettare logica personalizzata, garantendo processi di convalida dettagliati e completi.

    Ad esempio, per tracciare tutti i batch di validazione invece dei soli primi tre:

    import inspect
    
    from ultralytics import YOLO
    
    def plot_samples(validator):
        frame = inspect.currentframe().f_back.f_back
        v = frame.f_locals
        validator.plot_val_samples(v["batch"], v["batch_i"])
        validator.plot_predictions(v["batch"], v["preds"], v["batch_i"])
    
    model = YOLO("yolo26n.pt")
    model.add_callback("on_val_batch_end", plot_samples)
    model.val(data="coco.yaml")

    Per ulteriori approfondimenti sull'incorporazione dei callback nel tuo processo di convalida, consulta la Guida alla convalida.

  • Per collegare un callback personalizzato per la modalità di predizione in Ultralytics YOLO, definisci una funzione di callback e registrala con il processo di predizione. I callback di predizione comuni includono on_predict_start, on_predict_batch_end e on_predict_end. Questi consentono la modifica degli output di predizione e l'integrazione di funzionalità aggiuntive, come il data logging o la trasformazione dei risultati.

    Ecco un esempio in cui un callback personalizzato salva le previsioni in base alla presenza di un oggetto di una particolare classe:

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    
    class_id = 2
    
    def save_on_object(predictor):
        r = predictor.results[0]
        if class_id in r.boxes.cls:
            predictor.args.save = True
        else:
            predictor.args.save = False
    
    model.add_callback("on_predict_postprocess_end", save_on_object)
    results_stream = model("pedestrians.mp4", stream=True, save=True)
    
    for result in results_stream:
        pass

    Per un utilizzo più completo, fai riferimento alla Guida alla predizione, che include istruzioni dettagliate e opzioni di personalizzazione aggiuntive.

  • Ultralytics YOLO supporta varie implementazioni pratiche di callback per migliorare e personalizzare diverse fasi come addestramento, validazione e previsione. Alcuni esempi pratici includono:

    • Logging di metriche personalizzate: registra metriche aggiuntive in diverse fasi, ad esempio alla fine delle epoche di addestramento o convalida.
    • Aumento dei dati: implementa trasformazioni o aumenti di dati personalizzati durante la predizione o i batch di addestramento.
    • Risultati intermedi: Salva risultati intermedi, come previsioni o fotogrammi, per ulteriori analisi o visualizzazioni.

    Esempio: combinazione di fotogrammi con i risultati di predizione durante la predizione utilizzando on_predict_batch_end:

    from ultralytics import YOLO
    
    def on_predict_batch_end(predictor):
        """Combine prediction results with frames."""
        _, image, _, _ = predictor.batch
        image = image if isinstance(image, list) else [image]
        predictor.results = zip(predictor.results, image)
    
    model = YOLO("yolo26n.pt")
    model.add_callback("on_predict_batch_end", on_predict_batch_end)
    for result, frame in model.predict():
        pass

    Esplora il codice sorgente del callback per ulteriori opzioni ed esempi.

Commenti