sabato 4 gennaio 2020

Analisi degli errori rete neurale foraminiferi

Aggiornamento

ho visto che il programma label_inmage.py prevede anche degli switch che settano i valori di input_mean e input_std (di default sono impostati a 127.5 entrambi i valori)

modificando questi parametri cambiano anche in maniera sensibili i risultati dello stesso file di modello tflite. Con una configurazione differente non ci sono classi particolarmente penalizzate


allo stesso modo anche make_image_classifier possono essere cambiate le epoch, il learning rate, batch size, momentum (gradient descent)

====================================================================

Questo al momento e' il miglior risultato della rete neurale sui foraminiferi

Si nota abbastanza chiaramente che la classe Globigerinita Glutinata ha un tasso di riconoscimento del tutto errato. Le altre classi hanno prestazioni migliori con risultati intorno al 60% di corrette identificazioni
Per cercare di isolare il problema ho isolato gli errori del set di test


Globigerina Bulloides

Gli score di corretti riconoscimenti sono compresi tra 0.83 e 0.33


GB 280

Globigerina Bulloides 280  scambiata per Globigerinoides Sacculifer  score 0.51

GB 315

Globigerina Bulloides 315  scambiata per  Globigerinoides Ruber   score 0.51

Globigerinita Glutinata 

Gli score di corretti riconoscimenti sono compresi tra 0.59 e 0.35

GG 1406

Globigerinita Glutinata 1406 identificata dalla rete neurale come Globigerina Bulloides con score 0.35. La seconda piu' probabile identificazione con score 0.33 era Gobigerinita Glutinata ovvero la classe corretta

GG 1449
Globigerinita Glutinata 1449 identificata dalla rete neurale come Globigerina Bulloides con score 0.67.

GG 265
Globigerinita Glutinata 265 identificata dalla rete neurale come Neogloboquadrina Pachyderma con score 0.60.

GG 564
Globigerinita Glutinata 564 identificata dalla rete neurale come Neogloboquadrina Pachyderma con score 0.76.

GG 68

Globigerinita Glutinata 68 identificata dalla rete neurale come Globigerinoides Sacculifer con score 0.55.


GG 765
Globigerinita Glutinata 765 identificata dalla rete neurale come Neogloboquadrina Pachyderma con score 0.65.

GG 822
Globigerinita Glutinata 882 identificata dalla rete neurale come Neogloboquadrina Pachyderma 

GG 955
Globigerinita Glutinata 955 identificata dalla rete neurale come Globigerinoides Ruber con score 0.7.

Globigerinoides Ruber


GR 1795


GR 1802

GR 1819
GR 355




venerdì 3 gennaio 2020

Launching in Machine Learning Coursera

Questo e' quello piu' teorico ma anche piu' interessante per adesso



Colab e TensorFlow

Colab e' una piattaforma cloud offerta da Google per sviluppare utilizzando i Jupiter Notebook..con la possibilita' di utilizzare anche una GPU con ovvi vantaggi nell'uso di Tensorflow

I dati si possono caricare su Google Drive ed essere condivisi con Colab tramite il codice sottostante.


Prima di poter utilizzare Colab si deve cliccare sul link, ottenere una chiave che dovremo incollare sulla pagina

La configurazione della GPU si trova su Notebook settings e dai log di Tensorflow risulta essere una Tesla P100-PCIE-16GB (la disponibilita' della CPU non e' garantita)


Di seguito la rete neurale dei foraminiferi in esecuzione su Colab. Da notare che dalla seconda epoch
entra in funzione la GPU con un significativo incremento delle prestazioni






lunedì 30 dicembre 2019

Retrain Model con dati di foraminiferi

Aggiornamento
Ho provato a fare girare il modello con dataset di train di 1000 e 1500 immagini

Dataset 1000 immagini per classe
57% di attribuzioni corrette


Dataset 1500 immagini per classe
56% di attribuzioni corrette



=======================================================================

Al posto di creare da zero un modello in Tensorflow per addestrare il riconoscimento di foraminiferi ho provato ad aggiungere le mie classi ad una rete gia' addestrata

Per fare cio' si deve aggiungere il supporto a Tensorflow HUB con

pip install "tensorflow~=2.0" 
pip install "tensorflow-hub[make_image_classifier]~=0.6"
Si lancia quindi il comando

make_image_classifier \
  --image_dir train \
  --tfhub_module https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/4 \
  --saved_model_dir fora \
  --labels_output_file class_labels.txt \
  --tflite_output_file fora_mobile_model.tflite

Le immagini devono essere conformi al formato di mobilenet quindi devono avere una dimensione di 224x224 pixels

di default vengono selezionate 5 epoche ma si puo' cambiare il valore con lo switch --train_epochs

Ho iniziato con il dataset completo di 1500 immagini per 5 classi ma in modo non prevedibile il processo veniva killato senza preavviso. Si tratta di un problema di memoria cosi' sono sceso a 500 elementi per classe con una ram di 8Gb

Per effettuare l'inferenza (ovvero la previsione del modello su una immagine non contenuta nel training si usa lo script label_image.py

 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/examples/python/label_image.py

python label_image.py -m fora_mobile_model.tflite -l class_labels.txt  -i test/a_globigerina_bulloides.1102.jpg 


I risultati sono leggermente peggiori del precedente post  : 22 corretti e 25 errati (46% corretti 54% errati) ma si nota in maniera netta come il riconoscimento di Globigerinita Glutinata sia totalmente sballato

Corso How Google does Machine Learning

Visto che il precedente corso dava dei crediti su Coursera ho provato il corso offerto da Google




Non avevo mai provato Coursera, anche perche' i corsi interessanti sono costosi. Il livello delle lezioni non e' altissimo ed i test sono piuttosto banali rispetto al corso tenuto direttamente da Google ma c'e' stata la possibilita' di avere sessioni gratuite di utilizzo di Google Cloud...non male

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...