In un esempio precedente avevo usato il modello .tflite per fare predizione di classificazione immagine.
Il modello e' stato creato da un train di Inception
============================================================
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import sys
import tensorflow as tf
import tensorflow_hub as hub
from keras.models import load_model
model = tf.keras.models.load_model('incept.h5', custom_objects={'KerasLayer':hub.KerasLayer})
#print(model.get_config())
from keras.preprocessing import image
img = image.load_img(sys.argv[1])# , target_size=(299,299,3))
img = image.img_to_array(img)
img = img.reshape((1,) + img.shape)
img = img/255
build_input_shape = img.reshape(-1,299,299,3)
#print (build_input_shape)
img_class=model.predict_classes(img)
print (sys.argv[1])
print(img_class)
giovedì 9 gennaio 2020
mercoledì 8 gennaio 2020
Conversione da formato .pd (saved_model) a tflite
Un file in formato .pb racchiude al suo interno un modello completo di grafo con calcoli e pesi e puo' essere utilizzato direttamente per il serving
Tflite e' invece il formato di TensorFlow Lite ed e' caratterizzato da ridotte dimesioni mediante model quantization e model pruning
Per passare da .pb a .tflite (il contrario non si puo' fare) si possono usare i programmi toco e tflite_converter (il file risultante e' equivalente)
toco --saved_model_dir ./fora --output_file test.tflite
Nella conversione, a seconda del livello di ottimizzazione, il modello tflite puo' performare in modo uguale od inferiore al modello completo
Tflite e' invece il formato di TensorFlow Lite ed e' caratterizzato da ridotte dimesioni mediante model quantization e model pruning
Per passare da .pb a .tflite (il contrario non si puo' fare) si possono usare i programmi toco e tflite_converter (il file risultante e' equivalente)
toco --saved_model_dir ./fora --output_file test.tflite
tflite_convert -output_file = model.tflite --saved_model_dir = my_dir
Nella conversione, a seconda del livello di ottimizzazione, il modello tflite puo' performare in modo uguale od inferiore al modello completo
Esempio Retraining an image classifier
Ho trovato un esempio completo per il retraining di un classificatore di immagini a questo link
https://colab.research.google.com/github/tensorflow/hub/blob/master/examples/colab/tf2_image_retraining.ipynb
Si tratta di un Jupyter Notebook in cui si puo' attivare data augmentation e fine tuning e si puo' scegliere tra MobileNet v2 e Inception v3. I dati presentano gia' uno split con il 20% destinato alla validazione e shuffle del training, shuffle sul training, dropout
Girando su Colab si ha a disposizione una istanza con 12 Gb di Ram ed una GPU da 16 Gb di ram.
Il modello viene salvato nel formato .pb ma puo' essere convertito in formato .tflite con una verifica di quanto si perda in prestazioni utilizzando il formato di TensorFlow Lite
per attivare ogni singola cella di codice si usa CTRL+Enter
il file puo' essere visualizzato, una volta scaricato dal proprio GDrive, con il comando
saved_model_cli show --dir fora2/ --all
https://colab.research.google.com/github/tensorflow/hub/blob/master/examples/colab/tf2_image_retraining.ipynb
Si tratta di un Jupyter Notebook in cui si puo' attivare data augmentation e fine tuning e si puo' scegliere tra MobileNet v2 e Inception v3. I dati presentano gia' uno split con il 20% destinato alla validazione e shuffle del training, shuffle sul training, dropout
Girando su Colab si ha a disposizione una istanza con 12 Gb di Ram ed una GPU da 16 Gb di ram.
Il modello viene salvato nel formato .pb ma puo' essere convertito in formato .tflite con una verifica di quanto si perda in prestazioni utilizzando il formato di TensorFlow Lite
per attivare ogni singola cella di codice si usa CTRL+Enter
il file puo' essere visualizzato, una volta scaricato dal proprio GDrive, con il comando
saved_model_cli show --dir fora2/ --all
----------------------------------------------------------------------------
MetaGraphDef with tag-set: 'serve' contains the following SignatureDefs:
signature_def['__saved_model_init_op']:
The given SavedModel SignatureDef contains the following input(s):
The given SavedModel SignatureDef contains the following output(s):
outputs['__saved_model_init_op'] tensor_info:
dtype: DT_INVALID
shape: unknown_rank
name: NoOp
Method name is:
signature_def['serving_default']:
The given SavedModel SignatureDef contains the following input(s):
inputs['input_1'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 224, 224, 3)
name: serving_default_input_1:0
The given SavedModel SignatureDef contains the following output(s):
outputs['output_1'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 5)
name: StatefulPartitionedCall:0
Method name is: tensorflow/serving/predict
martedì 7 gennaio 2020
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 |
GG 265 |
GG 564 |
GG 68 |
Globigerinita Glutinata 68 identificata dalla rete neurale come Globigerinoides Sacculifer con score 0.55.
Globigerinita Glutinata 765 identificata dalla rete neurale come Neogloboquadrina Pachyderma con score 0.65.
GG 765 |
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.
venerdì 3 gennaio 2020
Iscriviti a:
Post (Atom)
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...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...