Scopri la nostra partnership con ClearML per migliorare l'esperienza di Ultrlaytics YOLOv5 con l'integrazione di ML, il tracciamento degli esperimenti e molto altro ancora.
Noi di 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 questi partner.
ClearML è il nostro nuovo partner: una cassetta degli attrezzi open-source progettata per farti 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 e l'utilizzo del gestore di esperimenti di per monitorarlo automaticamente. YOLOv5 e utilizzare il gestore di esperimenti di ClearML per seguirlo automaticamente. Puoi facilmente specificare l'ID della versione del dataset ClearML come input di dati e questo verrà automaticamente utilizzato per addestrare il tuo modello.
Sta a te decidere quanti di questi strumenti vuoi utilizzare, puoi limitarti al gestore degli esperimenti o concatenarli tutti insieme in un'impressionante pipeline.
Per tenere traccia dei tuoi esperimenti e dei tuoi dati, ClearML deve comunicare con un server. Hai due possibilità: iscriverti gratuitamente al servizio ClearML Hosted Service oppure creare un tuo server, vedi qui.
Anche il server è open-source, quindi se hai a che fare con dati sensibili, non è un problema!
E voilà! Sei pronto per iniziare...
Per abilitare il tracciamento degli esperimenti di ClearML , basta installare il pacchetto pip ClearML .
pip installa clearml
Questo permetterà l'integrazione con lo script di addestramento di YOLOv5 . D'ora in poi ogni sessione di allenamento sarà catturata e memorizzata dal gestore di esperimenti di ClearML . Se vuoi cambiare il nome_del_progetto o il nome_del_task, vai al nostro logger personalizzato, dove potrai modificarlo: utils/loggers/clearml/clearml_utils.py
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache
Questo catturerà:
Niente male! Ora possiamo visualizzare tutte queste informazioni nell'interfaccia utente di ClearML per avere una panoramica dei progressi della formazione. Aggiungi colonne personalizzate alla visualizzazione della tabella (come ad esempio mAP_0.5) in modo da poter ordinare facilmente il modello più performante. Oppure seleziona più esperimenti e confrontali direttamente!
Possiamo fare ancora di più con tutte queste informazioni, come l'ottimizzazione degli iperparametri e l'esecuzione remota, quindi continua a leggere per scoprire come fare!
In genere è una buona idea mantenere i dati separati dal codice e rendere più facile l'acquisizione dell'ultima versione. Questo repository supporta la fornitura di un ID di versione del dataset e si assicurerà di ottenere i dati se non sono ancora disponibili. Inoltre, questo flusso di lavoro salva anche l'ID del dataset utilizzato come parte dei parametri dell'attività, così saprai sempre con certezza quali dati sono stati utilizzati in quale esperimento!
Il repository YOLOv5 supporta diversi set di dati 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 hai scaricato il dataset coco128 utilizzando il link nello YAML o con gli script forniti da yolov5, otterrai questa struttura di cartelle:
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt
Ma può trattarsi di qualsiasi set di dati che desideri. Sentiti libero di usare i tuoi, a patto di rispettare questa struttura di cartelle.
Successivamente, ⚠️copy il file YAML corrispondente alla radice del set di dati folder⚠️. Questi file YAML contengono le informazioni di cui ClearML avrà bisogno per utilizzare correttamente il set di dati. Naturalmente puoi creare anche questi file da solo, basta seguire la struttura degli YAML di esempio.
In pratica, abbiamo bisogno delle seguenti chiavi: path, train, test, val, nc, names.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # <---- HERE!
|_ LICENSE
|_ README.txt
Per inserire questo dataset in ClearML come dataset versionato, vai alla cartella principale del dataset ed esegui il seguente comando:
cd coco128
clearml-data sync --progetto YOLOv5 --nome coco128 -cartella .
Il comando clearml-data sync è in realtà un comando abbreviato. Puoi anche eseguire questi comandi uno dopo l'altro:
# Aggiungi facoltativamente --parent se vuoi basarti su
# questa versione su un'altra versione del dataset, in modo da non caricare file duplicati!
clearml-data create --nome coco128 --progetto YOLOv5/p>
clearml-data add --files .
clearml-Chiudi i dati
Ora che hai un set di dati ClearML , puoi usarlo in modo molto semplice per addestrare modelli YOLOv5 personalizzati.
python train.py --img 640 --batch 16 --epochs 3 --data clearml:// --weights yolov5s.pt --cache
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. Infatti, ClearML ti permette di clonare un esperimento e di modificarne i parametri. Possiamo quindi eseguire nuovamente l'esperimento con i nuovi parametri in modo automatico: questo è in pratica ciò che fa HPO!
Per eseguire l'ottimizzazione degli iperparametri a livello locale, abbiamo incluso uno script già pronto per te. Assicurati che un compito di addestramento sia stato eseguito almeno una volta, in modo che sia presente nel gestore degli esperimenti di ClearML ; in pratica lo cloneremo e modificheremo i suoi iperparametri.
Dovrai inserire l'ID di questo task modello nello script che si trova in utils/loggers/clearml/hpo.py e poi eseguirlo. Puoi cambiare task.execute_locally() in task.execute() per inserirlo in una coda di ClearML e far sì che un agente remoto lo esegua.
# Per utilizzare optuna, installalo prima, altrimenti puoi cambiare l'ottimizzatore in RandomSearch pip install optuna python utils/loggers/clearml/hpo.py
L'esecuzione di HPO in locale è davvero comoda, ma se invece volessimo eseguire i nostri esperimenti su una macchina remota? Forse hai accesso a una macchina GPU molto potente in loco o hai un budget per utilizzare le GPU del cloud. È qui che entra in gioco l'agente ClearML .
Scopri cosa può fare l'agente qui:
In breve: ogni esperimento tracciato dal gestore degli esperimenti contiene informazioni sufficienti per riprodurlo su una macchina diversa (pacchetti installati, modifiche non impegnate ecc.). Un agente di 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.
Puoi trasformare qualsiasi macchina (una macchina virtuale del cloud, una macchina locale GPU , il tuo portatile...) in un agente ClearML semplicemente eseguendo:
clearml-agente demone --queue [--docker]
Con il nostro agente in funzione, possiamo fargli fare un po' di lavoro. Ricordi nella sezione HPO che possiamo clonare un'attività e modificare gli iperparametri? Possiamo farlo anche dall'interfaccia!
Clona l'esperimento cliccando con il tasto destro del mouse.
🎯 Modifica gli iperparametri in base a ciò che vuoi che siano
⏳ Metti in attesa l'attività in una qualsiasi delle code facendo clic con il tasto destro del mouse.
Ora puoi clonare un task come abbiamo spiegato sopra, oppure semplicemente marcare il tuo 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 da remoto, devi solo 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 formazione dopo questa modifica, python eseguirà lo script fino a quella riga, dopodiché impacchetterà il codice e lo invierà alla coda!
ClearML è dotato anche di scaler automatici! Questo strumento avvia automaticamente nuove macchine remote nel cloud di tua scelta (AWS, GCP, Azure) e le trasforma in agenti ClearML ogni volta che vengono rilevati esperimenti in coda. Una volta che le attività sono state elaborate, l'autoscaler spegnerà automaticamente le macchine remote e tu smetterai di pagare! Guarda il video di avvio dell'autoscaler qui sotto.
Hai qualche domanda? Unisciti alla nostra community e lascia la tua domanda oggi stesso!
Inizia il tuo viaggio nel futuro dell'apprendimento automatico