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
venerdì 3 gennaio 2020
martedì 31 dicembre 2019
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
=======================================================================
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"
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
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
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
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
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
venerdì 27 dicembre 2019
Tensorflow GPU in NVidia Jetson Nano
Uno degli aspetti che piu' mi intrigava nella Jetson Nano era quello di poter creare modelli di reti neurali e non sono di usarli come accede in Intel Neural e Google Cal
La cosa ancora piu' interessante e' quello di poter utilizzare l'accelerazione GPU data dai Cuda core...ma e' tutto oro quello che luccica??
Per partire si inizia dall'installazione di Tensorflow su Jetson Nano. Dato che non si tratta di un processore x86 si deve ricompilare tutto da sorgenti od utilizzare i repository di NVidia
https://docs.nvidia.com/deeplearning/frameworks/install-tf-jetson-platform/index.html
sudo apt-get update
sudo pip3 install -U numpy==1.16.1 future==0.17.1 mock==3.0.5 h5py==2.9.0 keras_preprocessing==1.0.5 keras_applications==1.0.8 gast==0.2.2 enum34 futures protobuf
sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v43 tensorflow-gpu
La cosa ancora piu' interessante e' quello di poter utilizzare l'accelerazione GPU data dai Cuda core...ma e' tutto oro quello che luccica??
Per partire si inizia dall'installazione di Tensorflow su Jetson Nano. Dato che non si tratta di un processore x86 si deve ricompilare tutto da sorgenti od utilizzare i repository di NVidia
https://docs.nvidia.com/deeplearning/frameworks/install-tf-jetson-platform/index.html
Questa parte e' molto lunga...in particolare durante l'installazione di h5py il computer sembra stallare per oltre 15 minuti...pazienza, pazienza e pazienza
sudo apt-get update
sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev
sudo apt-get install python3-pip
sudo pip3 install -U pip testresources setuptoolssudo apt-get install python3-pip
sudo pip3 install -U numpy==1.16.1 future==0.17.1 mock==3.0.5 h5py==2.9.0 keras_preprocessing==1.0.5 keras_applications==1.0.8 gast==0.2.2 enum34 futures protobuf
sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v43 tensorflow-gpu
La cosa che mi pone qualche sospetto e' la stringa
tensorflow was not compiled for cuda support jetson nano
Tensorflow puo' essere utilizzato all'esterno di un VirtualEnv (anche se e' sempre possibile creare VirtualEnv specialmente nel caso di installazioni multiple di Tensorflow)
In generale se si devono installare delle librerie Python accessorie (tipo SciPy) conviene utilizzare apt al posto di pip
Una volta lanciato Tensorflow si osserva il carico distribuito sui 4 core
tramite il comando tegrastats si puo' controllare l'hardware
------------------------------------------------------------------------------------
RAM 1264/3964MB (lfb 529x4MB) SWAP 0/10174MB (cached 0MB) IRAM 0/252kB(lfb 252kB) CPU [40%@518,14%@518,16%@518,18%@518] EMC_FREQ 2%@1600 GR3D_FREQ 0%@76 APE 25 PLL@19C CPU@21C PMIC@100C GPU@21C AO@25.5C thermal@21C POM_5V_IN 2301/2301 POM_5V_GPU 80/80 POM_5V_CPU 444/444
RAM 1264/3964MB (lfb 529x4MB) SWAP 0/10174MB (cached 0MB) IRAM 0/252kB(lfb 252kB) CPU [38%@204,10%@204,23%@204,9%@204] EMC_FREQ 3%@1600 GR3D_FREQ 5%@76 APE 25 PLL@19.5C CPU@21.5C PMIC@100C GPU@21C AO@25.5C thermal@21C POM_5V_IN 2143/2222 POM_5V_GPU 40/60 POM_5V_CPU 323/383
RAM 1264/3964MB (lfb 529x4MB) SWAP 0/10174MB (cached 0MB) IRAM 0/252kB(lfb 252kB) CPU [44%@307,7%@307,9%@307,1%@307] EMC_FREQ 3%@1600 GR3D_FREQ 0%@153 APE 25 PLL@19.5C CPU@21C PMIC@100C GPU@21C AO@25.5C thermal@21.25C POM_5V_IN 2103/2182 POM_5V_GPU 40/53 POM_5V_CPU 323/363
RAM 1264/3964MB (lfb 529x4MB) SWAP 0/10174MB (cached 0MB) IRAM 0/252kB(lfb 252kB) CPU [43%@403,7%@403,10%@403,4%@403] EMC_FREQ 2%@1600 GR3D_FREQ 0%@153 APE 25 PLL@19.5C CPU@20.5C PMIC@100C GPU@21C AO@25.5C thermal@20.5C POM_5V_IN 2224/2192 POM_5V_GPU 121/70 POM_5V_CPU 363/363
RAM 1284/3964MB (lfb 527x4MB) SWAP 0/10174MB (cached 0MB) IRAM 0/252kB(lfb 252kB) CPU [45%@1479,21%@1479,53%@1479,22%@1479] EMC_FREQ 2%@1600 GR3D_FREQ 0%@153 APE 25 PLL@19.5C CPU@21.5C PMIC@100C GPU@21C AO@25.5C thermal@21C POM_5V_IN 2853/2324 POM_5V_GPU 40/64 POM_5V_CPU 884/467
RAM 1306/3964MB (lfb 520x4MB) SWAP 0/10174MB (cached 0MB) IRAM 0/252kB(lfb 252kB) CPU [25%@1479,51%@1479,58%@1479,54%@1479] EMC_FREQ 3%@1600 GR3D_FREQ 0%@153 APE 25 PLL@20.5C CPU@22.5C PMIC@100C GPU@21C AO@26C thermal@21.5C POM_5V_IN 3787/2568 POM_5V_GPU 39/60 POM_5V_CPU 1870/701
------------------------------------------------------------------------------------
Da una prova a parita' di rete neurale Jetson Nano ha una velocita' comparabile con un I5 6 gen. quindi la presenza di una GPU non migliora in modo sensibile la velocita' di calcolo come nel caso di GPU legate a schede video (benchmark di riferimento)
martedì 24 dicembre 2019
Primi passi con NVidia Jetson Nano
L'impostazione di base e' stata ridotta al minimo. Il sistema e' basato sulla scheda Jetson Nano, una SD Card da 64 Gb, un dongle USB Wifi Edimax N150, una tastiera Logitech K400 Plus, un alimentatore esterno da 5V 4A
Per il case ho preso questo progetto https://www.thingiverse.com/thing:3518410
E' piuttosto delicato su alcuni dettagli ma in generale va bene
Il primo problema riguarda l'alimentazione. Visto che non mi fidavo di una alimentazione via USB visti i consumi della scheda ho utilizzato un alimentatore esterno. Il problema e' che per abilitare l'alimentazione esterna e' necessario chiudere con un Jumper J48...ed il jumper non e' incluso. Sono impazzito a trovare un jumper a giro per casa ed alla fine ho dovuto cannabalizzare un vecchio HD PATA (il jumper serviva a selezionare salve and master). La Jetson ha due modalita' di utilizzo 5W e 10 W (di default e' la seconda)
Da linea di comando si puo' modificare con (0=10W, 1=5W)
$ sudo nvpmodel -m 0
Nonostante sia sconsigliato di usare un convertitore da HDMI a DVI io ho lo ho utilizzato con successo per la connessione ad vecchio monitor
Invece mi ha fatto impazzire la Edimax che continuava a disconettersi dall'hotpost. La soluzione e' stata mettere in blacklist il modulo con
echo "blacklist rtl8192cu" | sudo tee -a /etc/modprobe.d/blacklist.conf
Si puo' avere una modalita' headless semplicemente collegando un cavo microUSB e puntando il browser del portatile su 192.168.55.1:8888 e password dlinano
In ogni caso il server SSH e' gia' installato e disponibile (ho collegato un cavo cross con un indirizzo fisso per la rete via cavo per estendere la modalita' headless)
Per provare CUDA Jetson ha gia' tutto installato. Si deve pero' settare la Path e copiare gli esempi nella propria home
export PATH=${PATH}:/usr/local/cuda/bin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda/lib64
Per gli esempi di CUDA
/usr/local/cuda-10.0/bin/cuda-install-samples-10.0.sh . (attenzione al punto finale)
ATTENZIONE : operazione lenta in compilazione
Jetson Nano 4 Giga di Ram e puo' essere poca per reti neurali impegnativi. Si puo' aumentare usando uno swap file
$ sudo fallocate -l 8G /mnt/4GB.swap
/mnt/4GB.swap none swap sw 0 0
Ultima cosa: di default l'uscita audio e' impostata su Analogico e non su HDMI.
link utile
https://github.com/jkjung-avt/jetson_nano.git
Per il case ho preso questo progetto https://www.thingiverse.com/thing:3518410
E' piuttosto delicato su alcuni dettagli ma in generale va bene
Il primo problema riguarda l'alimentazione. Visto che non mi fidavo di una alimentazione via USB visti i consumi della scheda ho utilizzato un alimentatore esterno. Il problema e' che per abilitare l'alimentazione esterna e' necessario chiudere con un Jumper J48...ed il jumper non e' incluso. Sono impazzito a trovare un jumper a giro per casa ed alla fine ho dovuto cannabalizzare un vecchio HD PATA (il jumper serviva a selezionare salve and master). La Jetson ha due modalita' di utilizzo 5W e 10 W (di default e' la seconda)
Da linea di comando si puo' modificare con (0=10W, 1=5W)
$ sudo nvpmodel -m 0
$ sudo jetson_clocks
Nonostante sia sconsigliato di usare un convertitore da HDMI a DVI io ho lo ho utilizzato con successo per la connessione ad vecchio monitor
Invece mi ha fatto impazzire la Edimax che continuava a disconettersi dall'hotpost. La soluzione e' stata mettere in blacklist il modulo con
echo "blacklist rtl8192cu" | sudo tee -a /etc/modprobe.d/blacklist.conf
Si puo' avere una modalita' headless semplicemente collegando un cavo microUSB e puntando il browser del portatile su 192.168.55.1:8888 e password dlinano
In ogni caso il server SSH e' gia' installato e disponibile (ho collegato un cavo cross con un indirizzo fisso per la rete via cavo per estendere la modalita' headless)
Per provare CUDA Jetson ha gia' tutto installato. Si deve pero' settare la Path e copiare gli esempi nella propria home
export PATH=${PATH}:/usr/local/cuda/bin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda/lib64
Per gli esempi di CUDA
/usr/local/cuda-10.0/bin/cuda-install-samples-10.0.sh . (attenzione al punto finale)
ATTENZIONE : operazione lenta in compilazione
Jetson Nano 4 Giga di Ram e puo' essere poca per reti neurali impegnativi. Si puo' aumentare usando uno swap file
$ sudo fallocate -l 8G /mnt/4GB.swap
$ sudo mkswap /mnt/4GB.swap
$ sudo swapon /mnt/4GB.swap
e modificando il file /etc/fstab aggiungendo
Ultima cosa: di default l'uscita audio e' impostata su Analogico e non su HDMI.
link utile
giovedì 19 dicembre 2019
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...