sabato 13 novembre 2021

Foraminifera tensorflow retraining

Dopo oltre un anno da questo post ho provato ad affrontare il riconoscimento di foraminiferi mediante rete neurale partendo dal retraining di una rete esistente piuttosto che creando una rete ex novo






Stavolta per rendere i risultati piu' coerenti ho utilizzato solo le immagini al microscopio cono risoluzione di un pixel per micron. Le immagini riprese sempre da endlessforam.org sono state private delle note utilizzando il comando mogrify di imagemagick

Per evitare di installare tutto da zero ho montato tensorflow in docker con il supporto dei notebook di jupyter

docker pull tensorflow:latest-jupyter 

dato che nel docker non e' presente la libreria tensorflow-hub ho modificato il docker creando il Dockerfile 

----------------------------------------

FROM tensorflow/tensorflow:latest-jupyter
RUN pip install --upgrade pip
RUN pip install --upgrade tensorflow-hub

----------------------------------------

in seguito 

docker build . -t tensorflor/tensorflow:latest-jupiter-hub

la rete neurale ha necessita' di occupare piu' Ram possibile ed ho disabilitato i controlli del kernel su docker in modo da non andare in OOM (Out of Memory)

La home directory della macchina e' inoltre mappata su /tf/notebook del container in modo da salvare i modelli. Infine si mappa la porta 8888 del container sulla 8888 del localhost per interagire con i notebook

sudo docker run --oom-kill-disable -m="6g" --memory-swap="10g"  -it -v $PWD:/tf/notebooks -w /tmp -p 8888:8888 tensorflow/tensorflow:latest-jupyter-hub

in alcuni casi puo' essere necessario aggiungere al file /etc/default /grub la stringa

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

lanciare un update-grub e riavviare la macchina

per abilitare la GPU NVidia si aggiunge lo switch --gpus all ma in questo caso la memoria utilizzabile sara' solo quella della GPU (e sui portatili di solito e' difficile avere schede grafiche con generose dotazioni di ram) e deve essere presente docker-nvidia

Le immagini dei foarminifei sono relativi a 15 classi (dati)

Usando come base efficientnetv2-s-21k-ft1k (dimensione immagine 384 pixel) con il risultato di 80% di risultati corrispondenti sul modello originale  e 68% sul dataset di validazione

il notebook puo' essere scaricato da qui

Nessun commento:

Posta un commento

Dockerizza Flask

Un esempio semplice per inserire in un container Docker una applicazione Flask Partiamo da una semplice applicazione che ha un file app.py ...