Visualizzazione post con etichetta Yolo. Mostra tutti i post
Visualizzazione post con etichetta Yolo. Mostra tutti i post

venerdì 29 marzo 2024

Yolo 8 in Google Colab

Ho provato a vedere di sfruttare le risorse gratuite di Google Colab per fare il retraining di Yolo del precedente post

Per prima cosa si copiano i files su Google Drive e si concede la lettura a Colab

import os, sys
from google.colab import drive
drive.mount('/content/drive')
nb_path = '/content/notebooks'
os.symlink('/content/drive/My Drive/Colab Notebooks', nb_path)
sys.path.insert(0,nb_path)

In seguito si installa Yolo 

%pip install ultralytics
import ultralytics
ultralytics.checks()

Ho usato per semplicita' la modalita'a linea nei comando (basta mettere un punto interrogativo prima del comando) effettuando i puntamenti sui folder GDrive

!yolo task=detect mode=train model=yolov8m.pt imgsz=640 data=/content/drive/MyDrive/ocean_trash/data.yaml epochs=60 batch=32 name=yolov8m_e60_b32_trash

Rispetto alla prova sul portatile ho potuto utilizzare la YOLO M al posto di YOLO N impostando le epoch a 60 e la batch a 32 (con queste impostazioni siamo quasi al limite dei 15 Gb di memoria disponibili sulla GPU T4 disponibile nel profilo gratuito)

Rispetto alla rete addestrata sul portatile con YOLO N, 10 epoch e 4 batch c'e' un significativo miglioramento a parita'di set di immagini di addestramento anche se la classe Rope risulta permanere come mal classificata






giovedì 28 marzo 2024

Retrain Yolo8 con rifiuti su spiaggia

Ho provato a fare il retraining di Yolo 8 con rifiuti spiaggiati usando il dataset al link sottostante

 https://universe.roboflow.com/baeulang/ocean_trash

 


 Il dataset e' composto da 1133 immagini

Il train e' stato eseguito sull' NVidia Geforce 940M su mio portatile Debian. Per questo motivo ho dovuto usare il modello nano e ridurre le batch da 16 a 8 altrimenti saturavo completamente il Gb di ram della scheda video


yolo task=detect mode=train model=yolov8n.pt imgsz=640 data=/home/luca/yolo8/trash/data.yaml epochs=10 batch=4 name=yolov8n_trash


 

yolo detect val model='/home/luca/yolo8/runs/detect/yolov8n_trash4/weights/best.pt'  imgsz=640 data=/home/luca/yolo8/trash/data.yaml


Matrice di confusione




a questo punto ho usato il file addestrato per riconoscere immagini che non sono state inserite nella fase di train

yolo predict model='/home/luca/yolo8/runs/detect/yolov8n_trash4/weights/best.pt' source='/home/luca/yolo8/trash/test/images/CD_9581_jpg.rf.ac853dd458749924fe0891cd4c5f9a21.jpg' imgsz=640

 

Questo e' un esempio di riconoscimento


Il risultato non e' eccezionale ma c'e' considerare che e' stato utilizzato come base il modello nano



mercoledì 8 novembre 2023

Foraminiferi e Yolo 8

Qualche anno fa avevo provato ad addestrare una rete neurale per il riconoscimento di foraminiferi con risultati diciamo mediocri



Ho visto che i migliori risultati non si ottengono partendo da una rete ex-novo ma riaddestrando reti gia' elaborate. In questo caso ho provato ad addestrare Yolo 8 con il dataset dei foraminiferi

La prima prova la ho fatto, anche con ottimi risultati, utilizzando il cloud di Roboflow ma volevo una soluzione da fare girare on the edge


Per prima cosa ho creato un virtualenv in Python 

I dati sono inclusi in un folder in cui ci sono le sottodir test,train e valid in cui sono in ciascuna ci sono inclusi i folder images e labels


Per creare le labels ho utilizzato labelImg. Avendo problemi con l'installazione ho utilizzato il docker a questo link


Si deve selezionare il folder dove sono contenute le immagini, il folder dove saranno salvati i file txt in cui sono salvate le annotations, il tipo di annotation (di default viene indicato PascalVOC ma deve andare a Yolo) ed in View conviene indicare autosave 

Nel folder alla radice deve essere create un file data.yaml in cui sono indicati i percorsi dei folder delle immagini, il numero di classi (4) ed i nomi delle classi

train: ../train/images
val: ../valid/images
test: ../test/images
nc: 4
names: ['Candeina_Nitida', 'Globigerina_Bulloides', 'Globigerina_Falconensis', 'Globigerina_digitata']

a questo punto si procede con l'installazione di Yolo 8 

pip install ultralytics

si procede quindi con l'addestramento. Per una prima prova ho usato il pretrain piu' semplice yoolov8n ma vi sono reti addestrati molto piu' profonde in yolov8s.pt, yolov8m.pt, yolov8l.pt, yolov8x.pt
Il parametro batch dipende dalla potenza della propria CPU/GPU...io ho solo lavorato in CPU


yolo task=detect mode=train model=yolov8n.pt imgsz=640 data=data.yaml epochs=10 batch=8 name=yolov8n_foraminiferi



Nel folder run/detect/yolo8n_foraminiferi si trovano i grafici dei parametri del modello


Si puo' validare il modello con 

yolo task=detect mode=val model=runs/detect/yolov8n_foraminiferi/weights/best.pt name=yolov8n_eval data=data.yaml imgsz=640



I risultati sono peggiori di quelli visti con Roboflow ma in ogni caso si ricorda che in questo caso e' stato usata la rete di addestramento piu' semplificata

Una volta finito l'addestramento si puo' usare la rete per riconoscere oggetti

yolo task=detect mode=predict model=runs/detect/yolov8n_foraminiferi/weights/best.pt source=test/immagine.jpg show=True imgsz=640 name=yolov8n_c1 hide_labels=True











Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...