Addestramento e monitoraggio a distanza di Ultralytics YOLOv5 con ClearML

Team Ultralytics

4 minuti di lettura

21 ottobre 2022

Esplorate la nostra partnership con ClearML per un'esperienza Ultrlaytics YOLOv5 migliorata con un'integrazione ML perfetta, il tracciamento degli esperimenti e altro ancora.

In Ultralytics collaboriamo commercialmente con altre startup per aiutarci a finanziare la ricerca e lo sviluppo dei nostri fantastici strumenti open-source, come YOLOv5, per mantenerli gratuiti per tutti. Questo articolo può contenere link di affiliazione a tali partner.

ClearML è il nostro nuovo partner: un insieme di strumenti open-source progettati per farvi risparmiare tempo.

Con la missione di accelerare l'adozione del ML, ClearML rende possibile l'integrazione del ML in qualsiasi prodotto software e hardware.

Questa integrazione rende ancora più semplice l'addestramento di un modello YOLOv5 e l'utilizzo del gestore di esperimenti ClearML per tracciarlo automaticamente. È possibile specificare facilmente l'ID di una versione del dataset ClearML come input di dati e questo verrà automaticamente utilizzato per addestrare il modello.

Portate il monitoraggio degli esperimenti a un livello superiore

  • Traccia ogni allenamento YOLOv5 nel gestore degli esperimenti.
  • Eseguite le versioni e accedete facilmente ai vostri dati di formazione personalizzati con lo strumento integrato di versionamento dei dati ClearML.
  • Ottenere la migliore mAP utilizzando l'ottimizzazione degli iperparametri di ClearML.
  • Trasformate il vostro modello YOLOv5 appena addestrato in un'API con pochi comandi utilizzando ClearML Serving.

Sta a voi decidere quanti di questi strumenti volete usare, potete limitarvi al gestore di esperimenti o concatenarli tutti insieme in una pipeline impressionante.

Impostazione delle cose

Per tenere traccia degli esperimenti e dei dati, ClearML deve comunicare con un server. A questo scopo, avete due possibilità: iscrivervi gratuitamente al servizio ClearML Hosted Service o creare un vostro server, vedi qui.

Anche il server è open-source, quindi se avete a che fare con dati sensibili, non è un problema!

  1. Installare il pacchetto python clearml: pip install clearml
  2. Collegare l'SDK ClearML al server creando le credenziali (andare in alto a destra su Impostazioni -> Spazio di lavoro -> Crea nuove credenziali), quindi eseguire il comando qui sotto e seguire le istruzioni: clearml-init

E voilà! Siete pronti per iniziare...

Allenare YOLOv5 con ClearML

Per abilitare il tracciamento degli esperimenti ClearML, è sufficiente installare il pacchetto pip ClearML.

pip installare clearml

Ciò consentirà l'integrazione con lo script di allenamento YOLOv5. D'ora in poi, ogni sessione di allenamento sarà catturata e memorizzata dal gestore di esperimenti ClearML. Se si vuole cambiare il nome_progetto o il nome_task, si può andare al nostro logger personalizzato, dove è possibile modificarlo: utils/loggers/clearml/clearml_utils.py

python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --pesi yolov5s.pt --cache

Questo cattura:

  • Codice sorgente + modifiche non impegnate
  • Pacchetti installati
  • (Iper)parametri
  • File del modello (usare --save-period n per salvare un checkpoint ogni n epoche)
  • Uscita della console
  • Scalari (mAP_0.5, mAP_0.5:0.95, precisione, richiamo, perdite, tassi di apprendimento, ...)
  • Informazioni generali come i dettagli della macchina, il tempo di esecuzione, la data di creazione, ecc.
  • Tutti i grafici prodotti, quali il correlogramma delle etichette e la matrice di confusione
  • Immagini con riquadri di delimitazione per epoca
  • Mosaico per epoca
  • Immagini di convalida per epoch

Non male! Ora possiamo visualizzare tutte queste informazioni nell'interfaccia utente di ClearML per avere una panoramica dei progressi dell'addestramento. Aggiungete colonne personalizzate alla visualizzazione della tabella (come ad esempio mAP_0,5) in modo da poter ordinare facilmente il modello più performante. Oppure selezionare più esperimenti e confrontarli direttamente!

Possiamo fare ancora di più con tutte queste informazioni, come l'ottimizzazione degli iperparametri e l'esecuzione remota, quindi continuate a leggere per scoprire come fare!

Gestione della versione del set di dati

La versione dei dati separata da quella del codice è generalmente una buona idea e facilita l'acquisizione dell'ultima versione. Questo repository supporta la fornitura di un ID di versione del dataset e farà in modo di ottenere i dati se non sono ancora presenti. Inoltre, questo flusso di lavoro salva anche l'ID del set di dati utilizzato come parte dei parametri dell'attività, in modo da sapere sempre con certezza quali dati sono stati utilizzati in quale esperimento!

Dati, Ultralytics YOLOv5 e ClearML

Preparare il set di dati

Il repository YOLOv5 supporta una serie di insiemi di dati diversi utilizzando file YAML contenenti le loro informazioni. Per impostazione predefinita, i set di dati vengono scaricati nella cartella ../datasets rispetto alla cartella principale del repository. Quindi, se si è scaricato il dataset coco128 usando il link nello YAML o con gli script forniti da yolov5, si ottiene questa struttura di cartelle:

..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt

Ma questo può essere qualsiasi set di dati che si desidera. Sentitevi liberi di usare i vostri, purché vi atteniate a questa struttura di cartelle.

Successivamente, ⚠️copy il file YAML corrispondente alla radice del dataset folder⚠️. Questi file YAML contengono le informazioni di cui ClearML avrà bisogno per utilizzare correttamente il dataset. Naturalmente, si possono creare anche da soli, basta seguire la struttura degli YAML di esempio.

Fondamentalmente, abbiamo bisogno delle seguenti chiavi: path, train, test, val, nc, names.

..
|_ yolov5
|_ datasets
    |_ coco128
        |_ images
        |_ labels
        |_ coco128.yaml # <---- HERE!
        |_ LICENSE
        |_ README.txt

Caricare il set di dati

Per inserire questo dataset in ClearML come dataset versionato, accedere alla cartella principale del dataset ed eseguire il seguente comando:

cd coco128

clearml-data sync --project YOLOv5 --name coco128 --folder .


Il comando clearml-data sync è in realtà un comando abbreviato. È anche possibile eseguire questi comandi uno dopo l'altro:

# Aggiungete facoltativamente --parent se volete basarvi su

# questa versione su un'altra versione del set di dati, in modo da non caricare file duplicati!

clearml-data create --name coco128 --project YOLOv5/p>

clearml-data add --files .

cancellare i dati chiudere

Eseguire l'addestramento con un set di dati ClearML

Ora che si dispone di un set di dati ClearML, è possibile utilizzarlo in modo molto semplice per addestrare modelli YOLOv5 personalizzati.

python train.py --img 640 --batch 16 --epochs 3 --data clearml:// --weights yolov5s.pt --cache

Ottimizzazione degli iperparametri

Ora che abbiamo i nostri esperimenti e la versione dei dati, è il momento di dare un'occhiata a ciò che possiamo costruire sopra!

Utilizzando le informazioni sul codice, i pacchetti installati e i dettagli dell'ambiente, l'esperimento stesso è ora completamente riproducibile. In effetti, ClearML consente di clonare un esperimento e di modificarne i parametri. Possiamo quindi eseguirlo di nuovo con i nuovi parametri in modo automatico, come fa HPO!

Per eseguire l'ottimizzazione degli iperparametri a livello locale, abbiamo incluso uno script già pronto. Assicuratevi che un compito di addestramento sia stato eseguito almeno una volta, in modo che sia presente nel gestore degli esperimenti di ClearML; in sostanza, lo cloneremo e modificheremo i suoi iperparametri.

È necessario inserire l'ID di questo task modello nello script che si trova in utils/loggers/clearml/hpo.py e poi eseguirlo. È possibile modificare task.execute_locally() in task.execute() per inserirlo in una coda ClearML e far sì che un agente remoto ci lavori sopra.

# Per usare optuna, installarlo prima, altrimenti si può cambiare l'ottimizzatore in RandomSearch pip install optuna python utils/loggers/clearml/hpo.py

HPO, Ultralytics YOLOv5 e ClearML

Esecuzione remota (avanzata)

L'esecuzione di HPO in locale è davvero comoda, ma se invece volessimo eseguire i nostri esperimenti su una macchina remota? Forse si ha accesso a una macchina con GPU molto potente in loco o si dispone di un budget per utilizzare le GPU del cloud. È qui che entra in gioco l'agente ClearML.

Scoprite cosa può fare l'agente qui:

In breve: ogni esperimento tracciato dall'experiment manager contiene informazioni sufficienti per riprodurlo su una macchina diversa (pacchetti installati, modifiche non impegnate ecc.). Un agente ClearML fa proprio questo: ascolta una coda per i task in arrivo e quando ne trova uno, ricrea l'ambiente e lo esegue, continuando a riportare scalari, grafici ecc. al gestore degli esperimenti.

È possibile trasformare qualsiasi macchina (una macchina virtuale del cloud, una macchina con GPU locale, il proprio laptop ... ) in un agente ClearML semplicemente eseguendo:

clearml-agent daemon --queue [--docker]

Clonazione, modifica e inserimento in lista

Con il nostro agente in esecuzione, possiamo fargli fare un po' di lavoro. Ricordate nella sezione HPO che possiamo clonare un task e modificare gli iperparametri? Possiamo farlo anche dall'interfaccia!

🪄 Clonare l'esperimento facendo clic con il tasto destro del mouse.

🎯 Modificate gli iperparametri in base a ciò che desiderate.

⏳ Inviare l'attività a una qualsiasi delle code facendo clic con il tasto destro del mouse.

Enqueue, Ultralytics YOLOv5 e ClearML

Esecuzione di un'attività in remoto

Ora è possibile clonare un task, come spiegato sopra, o semplicemente marcare lo script corrente aggiungendo task.execute_remotely() e, al momento dell'esecuzione, verrà messo in coda, affinché l'agente inizi a lavorare!

Per eseguire lo script di addestramento YOLOv5 in remoto, è sufficiente aggiungere questa riga allo script training.py dopo che il logger ClearML è stato istanziato:

# ... # Loggers data_dict = None if RANK in {-1, 0}: loggers = Loggers(save_dir, weights, opt, hyp, LOGGER) # loggers instance if loggers.clearml: loggers.clearml.task.execute_remotely(queue='my_queue') # <------ ADD THIS LINE # Data_dict is either None is user did not choose for ClearML dataset or is filled in by ClearML data_dict = loggers.clearml.data_dict # ...

Quando si esegue lo script di addestramento dopo questa modifica, python esegue lo script fino a quella riga, dopodiché impacchetta il codice e lo invia alla coda!

Lavoratori in autoscala

ClearML è dotato anche di scaler automatici! Questo strumento avvia automaticamente nuove macchine remote nel cloud di vostra scelta (AWS, GCP, Azure) e le trasforma in agenti ClearML per voi ogni volta che vengono rilevati esperimenti in coda. Una volta che le attività sono state elaborate, l'auto scaler spegnerà automaticamente le macchine remote e voi smetterete di pagare! Guardate il video di avvio dell'autoscaler qui sotto.

Domande? Unitevi alla nostra comunità e lasciate la vostra domanda oggi stesso!

Costruiamo insieme il futuro
dell'IA!

Iniziate il vostro viaggio nel futuro dell'apprendimento automatico

Iniziare gratuitamente
Link copiato negli appunti