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