Un tentativo di quantificare rifiuti su una spiaggia toscana
L'idea e'
1) fotografare
2) incollare le immagini (possibilmente georiferite)
3) tagliare in quadrati di 1mx1m
4) istruire una rete neurale con Yolo 8 su un sottoinsieme dei quadrati al punto 3
Le immagini di partenza sono di questo tipo (si avrei dovuto portarmi uno stick per non fotografarmi di continuo i piedi), in sequenza scattate in automatico ogni secondo
Il primo dataset sono immagini da drone
Le immagini sono state incollate (stitching) con WebOdm
Come si legge il GCD e' di 0.92..io voglio tagliare il geotiff in quadrati di 1x1 tramite GDAL...per ottenere il valore del parametro ps calcolo 100 cm /0.92 cm (GCD) ed ottendo 109 (non vengono accettati valori float)gdal_retile.py -ps 109 109 -targetDir ./ritagli_drone/ ortophoto_drone.tif
Usando invece foto fatte a mano dal cellulare (quindi altezza indicativa di 140 cm) si ha un GCD di 0.12
gdal_retile.py -ps 833 833 -targetDir ./ritagli_samsung/ ortophoto_samsung.tif
una volta effettuato il taglio si hanno immagini di questo tipo (la distorsione e' derivante dall'algoritmo di ODM)
che devono essere classificate per istruire la rete neurale
Di solito uso labelImg ma ho visto che nella versione nuova di Debian crasha a causa delle Qt6...intanto trasformiamo i tiff in jpg perche' labelimg non supporta tiff
mogrify -format jpg -quality 90 -colorspace sRGB -flatten *.tif
e poi lanciamo questo docker container per non impazzire con l'installazione
docker run -ti --rm -e DISPLAY=$DISPLAY --device=/dev/video0:/dev/video0 -v /tmp/.X11-unix:/tmp/.X11-unix -v /home/luca/:/home/luca -w /home/luca ludwigprager/labelimg:1
dopo aver definito le classi e gli oggetti all'interno delle immagini si passa ad addestrare il modello facendo un retrain di Yolo
i dati sono nel folder /home/luca/images/1, al di sotto ci sono i folders ./train/images,./train/labels,./val/images,./val/labels
il file data.yaml deve essere in /home/luca/images/1
--------------------
train: /ultralytics/my_data/train/images
val: /ultralytics/my_data/val/images
nc: 3
names: ['waste', 'alga', 'wood']
--------------------
ancora la cosa piu' semplice e' un docker per addestrare la rete (size 833 e' la dimensione in pixels di ogni mattonella di 1 m)
docker run -it --rm \
--ipc=host \
-v "/home/luca/images/1":/ultralytics/my_data \
ultralytics/ultralytics:latest-cpu \
yolo train \
model=yolov8n.pt \
data=/ultralytics/my_data/data.yaml \
epochs=50 \
imgsz=833 \
device=cpu \
project=/ultralytics/my_data/runs
i risultati sono pessimi principalmente a causa del dataset ristretto ma dal punto di vista software tutto ha funzionato
se, dopo aver fatto il modello, si vuole fare inferenza questo e' il comando
docker run -it --rm \
-v "/home/luca/images/1":/ultralytics/my_data \
ultralytics/ultralytics:latest-cpu \
yolo predict \
model=/ultralytics/my_data/runs/train/weights/best.pt \
source=/ultralytics/my_data/train/images/ortophoto_samsung_04_03.jpg \
project=/ultralytics/my_data/predictions \
save=True












Nessun commento:
Posta un commento