Come addestrare un set di dati personalizzato con YOLOv5?

Come addestrare un set di dati personalizzato con YOLOv5?

Nodo di origine: 1953267

Introduzione

Abbiamo visto alcuni termini fantasiosi per AI e deep learning, come modelli pre-addestrati, transfer learning, ecc. Lascia che ti istruisca con una tecnologia ampiamente utilizzata e una delle più importanti ed efficaci: Transfer learning con YOLOv5.

You Only Look Once, o YOLO è uno dei metodi di identificazione degli oggetti basati sul deep learning più ampiamente utilizzati. Utilizzando un set di dati personalizzato, questo articolo ti mostrerà come addestrare una delle sue varianti più recenti, YOLOv5.

obiettivi formativi 

  1. Questo articolo si concentrerà principalmente sull'addestramento del modello YOLOv5 su un'implementazione di set di dati personalizzati.
  2. Vedremo cosa sono i modelli pre-addestrati e cos'è il transfer learning.
  3. Capiremo cos'è YOLOv5 e perché stiamo usando la versione 5 di YOLO.

Quindi, senza perdere tempo, iniziamo con il processo

Tabella dei Contenuti

  1. Modelli pre-addestrati
  2. Trasferimento di apprendimento
  3. Cosa e perché YOLOv5?
  4. Passi coinvolti nel trasferimento dell'apprendimento
  5. Implementazione
  6. Alcune sfide che puoi affrontare
  7. Conclusione

Modelli pre-addestrati

Potresti aver sentito i data scientist usare ampiamente il termine "modello pre-addestrato". Dopo aver spiegato cosa fa un modello/rete di deep learning, spiegherò il termine. Un modello di deep learning è un modello contenente vari livelli impilati insieme in modo da servire a uno scopo solitario, come la classificazione, il rilevamento, ecc. Le reti di deep learning apprendono scoprendo strutture complicate nei dati forniti loro e salvando i pesi in un file che vengono successivamente utilizzati per eseguire compiti simili. I modelli preaddestrati sono già modelli di Deep Learning addestrati. Ciò significa che sono già addestrati su un enorme set di dati contenente milioni di immagini.

Ecco come TensorFlow sito Web definisce i modelli pre-addestrati: Un modello pre-addestrato è una rete salvata che è stata precedentemente addestrata su un set di dati di grandi dimensioni, in genere su un'attività di classificazione delle immagini su larga scala.

Alcuni altamente ottimizzati e straordinariamente efficienti modelli pre-addestrati sono disponibili su internet. Diversi modelli vengono utilizzati per eseguire compiti diversi. Alcuni dei modelli pre-addestrati sono VGG-16, VGG-19, YOLOv5, YOLOv3 e Res Net 50.

Il modello da utilizzare dipende dall'attività che si desidera eseguire. Ad esempio, se voglio eseguire un file rilevamento oggetti compito, userò il modello YOLOv5.

Trasferimento di apprendimento

Trasferimento di apprendimento è la tecnica più importante che facilita il compito di un data scientist. L'addestramento di un modello è un'attività pesante e che richiede tempo; se un modello viene addestrato da zero, di solito non dà ottimi risultati. Anche se addestriamo un modello simile a un modello preaddestrato, non funzionerà in modo altrettanto efficace e l'addestramento di un modello può richiedere settimane. Invece, possiamo utilizzare i modelli pre-addestrati e utilizzare i pesi già appresi addestrandoli su un set di dati personalizzato per eseguire un'attività simile. Questi modelli sono altamente efficienti e raffinati in termini di architettura e prestazioni e si sono fatti strada verso l'alto ottenendo prestazioni migliori in diversi contesti. Questi modelli vengono addestrati su grandi quantità di dati, rendendoli più diversificati nella conoscenza.

Quindi trasferire l'apprendimento significa fondamentalmente trasferire le conoscenze acquisite addestrando il modello su dati precedenti per aiutare il modello ad apprendere meglio e più velocemente per eseguire un'attività diversa ma simile.

Ad esempio, utilizzando un YOLOv5 per il rilevamento di oggetti, ma l'oggetto è qualcosa di diverso dai dati precedenti dell'oggetto utilizzati.

Cosa e perché YOLOv5?

YOLOv5 è un modello pre-addestrato che indica che guardi solo una volta che la versione 5 viene utilizzata per il rilevamento di oggetti in tempo reale e ha dimostrato di essere altamente efficiente in termini di precisione e tempo di inferenza. Esistono altre versioni di YOLO, ma come si potrebbe prevedere, YOLOv5 ha prestazioni migliori rispetto ad altre versioni. YOLOv5 è veloce e facile da usare. Si basa sul framework PyTorch, che ha una comunità più ampia rispetto a Yolo v4 Darknet.

Yolov5

Ora esamineremo l'architettura di YOLOv5.

La struttura può sembrare confusa, ma non importa in quanto non dobbiamo guardare l'architettura invece utilizzare direttamente il modello e i pesi.

Nel transfer learning, utilizziamo il set di dati personalizzato, ovvero i dati che il modello non ha mai visto prima OPPURE i dati su cui il modello non è stato addestrato. Poiché il modello è già addestrato su un set di dati di grandi dimensioni, abbiamo già i pesi. Ora possiamo addestrare il modello per un certo numero di epoche sui dati su cui vogliamo lavorare. La formazione è necessaria poiché il modello ha visto i dati per la prima volta e richiederà alcune conoscenze per eseguire l'attività.

Passi coinvolti nel trasferimento dell'apprendimento

Trasferire l'apprendimento è un processo semplice e possiamo farlo in pochi semplici passaggi:

  1. Preparazione dei dati
  2. Il formato giusto per le annotazioni
  3. Cambia alcuni livelli se lo desideri
  4. Riaddestrare il modello per alcune iterazioni
  5. Convalida/Test

Preparazione dei dati

La preparazione dei dati può richiedere molto tempo se i dati scelti sono un po' grandi. La preparazione dei dati significa annotare le immagini, che è un processo in cui si etichettano le immagini creando un riquadro attorno all'oggetto nell'immagine. In questo modo, le coordinate dell'oggetto contrassegnato verranno salvate in un file che verrà poi fornito al modello per l'addestramento. Ci sono alcuni siti web, come ad esempio makeense.ai ed roboflow.com, che può aiutarti a etichettare i dati. 

Ecco come puoi annotare i dati per il modello YOLOv5 su makeense.ai.

1. Visita https://www.makesense.ai/. 

2. Fare clic su inizia in basso a destra dello schermo.

Yolov5

3. Seleziona le immagini che desideri etichettare facendo clic sulla casella evidenziata al centro.

Carica le immagini che desideri annotare e fai clic su Rilevamento oggetto.
Yolov5

4. Dopo aver caricato le immagini, ti verrà chiesto di creare etichette per le diverse classi del tuo set di dati.

Sto rilevando le targhe su un veicolo, quindi l'unica etichetta che userò è "License Plate". Puoi creare più etichette semplicemente premendo Invio facendo clic sul pulsante "+" sul lato sinistro della finestra di dialogo.

Dopo aver creato tutte le etichette, fare clic su Avvia progetto.

Yolov5

Se hai perso qualche etichetta, puoi modificarla in un secondo momento facendo clic sulle azioni e quindi modificando le etichette.

5. Inizia a creare un riquadro di delimitazione attorno all'oggetto nell'immagine. Questo esercizio può essere un po' divertente all'inizio, ma con dati molto grandi può essere stancante.

rettangolo di selezione

6. Dopo aver annotato tutte le immagini è necessario salvare il file che conterrà le coordinate dei riquadri di delimitazione insieme alla classe.

Quindi devi andare al pulsante delle azioni e fare clic su Esporta annotazioni, non dimenticare di selezionare l'opzione "Un pacchetto zip contenente file in formato YOLO", in quanto ciò salverà i file nel formato corretto come richiesto nel modello YOLO.

Modello YOLO

7. Questo è un passaggio significativo, quindi seguilo attentamente.

Dopo aver ottenuto tutti i file e le immagini, crea una cartella con un nome qualsiasi. Fare clic sulla cartella e creare altre due cartelle con il nome immagini ed etichette all'interno della cartella. Non dimenticare di denominare la cartella come sopra, poiché il modello cerca automaticamente le etichette dopo aver inserito il percorso di formazione nel comando.

Per darti un'idea della cartella, ho creato una cartella denominata "CarsData" e in quella cartella ho creato due cartelle: "immagini" e "etichette".

yolov5

All'interno delle due cartelle, devi creare altre due cartelle denominate "train" e "val". Nella cartella delle immagini, puoi dividere le immagini secondo la tua volontà, ma devi fare attenzione mentre dividi l'etichetta, poiché le etichette devono corrispondere alle immagini che hai diviso

8. Ora crea un file zip della cartella e caricalo sull'unità in modo che possiamo usarlo in colab.

Implementazione

Passeremo ora alla parte di implementazione, che è molto semplice ma complicata. Se non sai quali file modificare esattamente, non sarai in grado di addestrare il modello sul set di dati personalizzato. 

Quindi ecco i codici che dovresti seguire per addestrare il modello YOLOv5 su un set di dati personalizzato

Ti consiglio di utilizzare google colab per questo tutorial in quanto fornisce anche GPU che fornisce calcoli più veloci.

1. !git clone https://github.com/ultralytics/yolov5
Questo creerà una copia del repository YOLOv5 che è un repository GitHub creato da ultralytics.

2. cd yolov5
Questo è un comando shell della riga di comando utilizzato per modificare la directory di lavoro corrente nella directory YOLOv5.

3. !pip install -r requisiti.txt
Questo comando installerà tutti i pacchetti e le librerie utilizzate nell'addestramento del modello.

4. !unzip '/content/drive/MyDrive/CarsData.zip'
Decomprimere la cartella che contiene immagini ed etichette in google colab

Arriva il passo più importante...

Ora hai eseguito quasi tutti i passaggi e devi scrivere un'altra riga di codice che addestrerà il modello, ma, prima, devi eseguire qualche altro passaggio e modificare alcune directory per fornire il percorso del tuo set di dati personalizzato e addestra il tuo modello su quei dati.

Ecco cosa devi fare.

Dopo aver eseguito i 4 passaggi precedenti, avrai la cartella yolov5 nel tuo google colab. Vai alla cartella yolov5 e fai clic sulla cartella "dati". Ora vedrai una cartella chiamata "coco128.yaml". 

yolov5

Vai avanti e scarica questa cartella.

Dopo che la cartella è stata scaricata, devi apportare alcune modifiche e ricaricarla nella stessa cartella da cui l'hai scaricata.

Diamo ora un'occhiata al contenuto del file che abbiamo scaricato e sarà simile a questo.

yolov5

Personalizzeremo questo file in base al nostro set di dati e annotazioni.

Abbiamo già decompresso il set di dati su colab, quindi copieremo il percorso del nostro treno e le immagini di convalida. Dopo aver copiato il percorso delle immagini del treno, che sarà nella cartella del set di dati e avrà un aspetto simile a questo '/content/yolov5/CarsData/images/train', incollalo nel file coco128.yaml, che abbiamo appena scaricato.

Fai lo stesso con le immagini di test e convalida.

Ora, dopo aver finito con questo, menzioneremo il numero di classi come 'nc: 1'. Il numero di classi, in questo caso, è solo 1. Citeremo quindi il nome come mostrato nell'immagine sottostante. Rimuovi tutte le altre classi e la parte commentata, che non è necessaria, dopodiché il nostro file dovrebbe assomigliare a questo.

Yolo

Salva questo file con il nome che preferisci. Ho salvato il file con il nome customPath.yaml e ora carico di nuovo questo file nel colab nello stesso posto in cui si trovava coco128.yaml. 

Ora abbiamo finito con la parte di modifica e siamo pronti per addestrare il modello.

Esegui il seguente comando per addestrare il tuo modello per alcune interazioni sul tuo set di dati personalizzato.

Non dimenticare di cambiare il nome del file che hai caricato ('customPath.yaml). Puoi anche modificare il numero di epoche in cui desideri addestrare il modello. In questo caso, addestrerò il modello solo per 3 epoche.

5. !python train.py –img 640 –batch 16 –epochs 10 –data /content/yolov5/customPath.yaml –weights yolov5s.pt

Tieni presente il percorso in cui carichi la cartella. Se il percorso viene modificato, i comandi non funzioneranno affatto.

Dopo aver eseguito questo comando, il tuo modello dovrebbe iniziare l'addestramento e vedrai qualcosa di simile sullo schermo.

Yolo

Yolo

Dopo che tutte le epoche sono state completate, il tuo modello può essere testato su qualsiasi immagine.

Puoi fare qualche personalizzazione in più nel file detect.py su cosa vuoi salvare e cosa non ti piace, i rilevamenti in cui vengono rilevate le targhe, ecc.

6. !python discover.py –weight /content/yolov5/runs/train/exp/weights/best.pt –source path_of_the_image

È possibile utilizzare questo comando per testare la previsione del modello su alcune delle immagini.

Alcune sfide che puoi affrontare

Sebbene i passaggi spiegati sopra siano corretti, ci sono alcuni problemi che puoi incontrare se non li segui esattamente. 

  1. Percorso sbagliato: questo può essere un mal di testa o un problema. Se hai inserito il percorso sbagliato da qualche parte durante l'addestramento dell'immagine, potrebbe non essere facile identificarlo e non sarai in grado di addestrare il modello.
  2. Formato errato delle etichette: questo è un problema diffuso affrontato dalle persone durante l'addestramento di uno YOLOv5. Il modello accetta solo un formato in cui ogni immagine ha il proprio file di testo con all'interno il formato desiderato. Spesso, un file in formato XLS o un singolo file CSV viene inviato alla rete, generando un errore. Se stai scaricando i dati da qualche parte, invece di annotare ogni singola immagine, potrebbe esserci un formato di file diverso in cui vengono salvate le etichette. Ecco un articolo per convertire il formato XLS in formato YOLO. (link dopo il completamento dell'articolo).
  3. Non nominare correttamente i file: non assegnare correttamente il nome al file causerà nuovamente un errore. Presta attenzione ai passaggi durante la denominazione delle cartelle ed evita questo errore.

Conclusione

In questo articolo, abbiamo appreso cos'è il transfer learning e il modello pre-addestrato. Abbiamo imparato quando e perché utilizzare il modello YOLOv5 e come addestrare il modello su un set di dati personalizzato. Abbiamo seguito ogni singola fase, dalla preparazione del set di dati alla modifica dei percorsi e infine all'alimentazione della rete nell'implementazione della tecnica, e abbiamo compreso a fondo i passaggi. Abbiamo anche esaminato i problemi comuni affrontati durante l'addestramento di uno YOLOv5 e la loro soluzione. Spero che questo articolo ti abbia aiutato ad addestrare il tuo primo YOLOv5 su un set di dati personalizzato e che ti piaccia l'articolo.

Timestamp:

Di più da Analisi Vidhya