Yolo(You Only Look Once) è un algoritmo fatto nel 2015 che rivela in tempo reale gli oggetti all’interno di un’immagine con una velocità superiore ad altri algoritmi.
Uno dei siti che ho utilizzato per vedere il funzionamento di yolo è Ultralytics, esso aveva le seguenti configurazioni:
- IoU=Intersection over union, è la differenza tra la posizione vera del oggetto e quella predetta, se troppo diversa allora non la mette, viene solitamente usato tra 0.6 e 0.7.
- Modelli di yolo v8, la differenza tra i vari modelli sta nella complessità di calcolo, n=nano, s=small, m=medium, l=large; più è grande più sarà lento il calcolo ma dettagliato, per esempio yolo v8 s viene usato per le immagini in tempo reale grazie alla sua alta velocità di calcolo.
- La soglia di fiducia serve a limitare il numero di oggetti rilevati a quelli di cui l’intelligenza artificiale è più sicura che siano giuste.
- Le immagini di Yolo devono essere sempre in 640px X 640px, nel caso siano di risoluzione maggiore Ultralytics ne riduce la risoluzione prima di consegnarla a Yolo.
Test fatti con Ultralytics
Qui sotto indico le immagini usate per i test ed i vari commenti fatti, tutte le immagini saranno con soglia di fiducia=0.4 e IoU=0.6;
Pre-Yolo:
Post-Yolo:
- v-n trova sia la persona che il cane ma con bassa confidenza.
- v-s-l entrambi trovano sia la persona che il cane con alta confidenza.
- v-m trova la persona con alta confidenza ma il cane lo trova come teddy bear con confidenza sotto il 0.50.
Pre-Yolo:
Post-Yolo:
- v-n trova una sola persona.
- v-s-l trovano tutte le persone tranne 2 a destra dell’immagine, quella al centro con alta confidenza mentre le altre con una confidenza tra 0.4 e 0.55.
- v-m trova tutte le persone tranne le ultime due a destra e quella più a sinistra.
Pre-Yolo:
Post-Yolo
- v-n trova le tre persone di cui quella con la nuvola a 0.50 di confidenza mentre le altre due a 0.80.
- v-s la persona con la nuvola la trova a 0.40 confidenza.
- v-m come in precedenza trova le tre persone con la stessa confidenza, ma trova anche i due bambini che considera una sola persona anche se con bassa confidenza.
- v-l trova tutti ad alta confidenza ma considera anche la nuvola in basso a sinistra come teddy bear.
Dopo aver testato Yolo ho provato ad allenare io stesso l’AI, per fare ciò avevo bisogno di un dataset, una directory contenente le immagini già etichettate grazie ad un file jpeg dell immagine con il corrispondente file txt che aveva le informazioni per etichettare l’immagine, le informazioni in questione sono: il nome dell’etichetta, la posizione x e y del centro dell’oggetto e l’altezza e larghezza del quadrato che conteneva l’oggetto.
Per automatizzare il processo ho creato un codice in python che riceveva in input un file csv e creava un file csv ordinato con le stesse informazioni, il codice poi continua ricevendo dal file csv le informazioni delle colonne richieste con il nome del dato che serviva per creare un file txt con tutte le etichette dell’immagine corrispondente, per poi installare l’immagine grazie all’URL del file csv e nominare i due file in base all’ordine di creazione, per esempio i primi due file si chiameranno rispettivamente img.txt e img.jpeg.
Nel dataset vanno poi messe due directory(chiamate entrambe val), una nella directory delle immagini e una in quella dei file txt (nello stesso formato delle precedenti), in modo da usarle per “validare” le immagini usate per allenare l’AI
Dopo aver ottenuto un dataset basta fare un file yaml, usato per dare una configurazione al dataset, e comprimere il tutto in un zip, e darlo in pasto a un sito che utilizza l’API di Yolo come Ultralytics per esempio.
Per fare il codice ho dovuto studiare Python da 0 dato che non ne avevo esperienza con quel linguaggio, ho dovuto installare tutte le cose necessarie ed infine fare il codice.