Blog.

Guida segmentazione semantica | Tensorflow, machine learning e computer vision


Autore
Andrea Provino
Data
Tempo di lettura
4 minuti
Categoria
Guide

image-segmentation-semantic-machine-learning-computer-vision-tensorflow-gpu-guida-segmentazione-semantica-foto

Questa guida ti aiuterà a configurare i file necessari per ottenere una segmentazione semantica a partire da una qualunque immagine, grazie ad una tecnica di machine learning applicata a foto: tensorflow in aiuto ed ecco la computer vision

Ometto dettagli circa la procedura perché suppongo che se ti trovi a leggere queste parole, hai già un’infarinatura e sai di cosa si tratta.

Requsiti hardware

La maggior parte dei processi di machine learning, come la segmentazione semantica, richiede macchine performanti, questo non è da meno. Se sei privo di GPU con memoria RAM dedicata, e ti limiti a possedere un laptop con i5 o anche i7, ti conviene lasciare perdere. 

Puoi sempre provare, ma i tempi di processing crescono a dismisura. Con una 1070, un i5 6700k (non OC) e 8GB di RAM ho ottenuto ottimi risultati. Usa questi dati come riferimento.

Requisiti software

Tensorflow-gpu agevola il processo computazionale, ti consiglio di installarlo con questa guida, se ne sei privo.

Installare Tensorflow-gpu, CUDA Toolkit e cudnn | Windows

Potresti dover installare le seguenti librerie:

pip install

Detto ciò, andiamo avanti

Download dilation-tensorflow

Collegati al sito GitHub e scarica la repository:

Dilation-tensorflow | Download GitHub Repository

Scarica il primo, il secondo o entrambi i modelli. 

pretrained_dilation_cityscapes.pickle| Download 
pretrained_dilation_camvid.pickle | Download

La differenza è nel numero di classi che sono in grado di identificare: 19 per cityscapes e 11 per questa versione di Camvid (ce ne sono altre che arrivano a 32). I file sono troppo pesanti per essere analizzati, ma non contengono virus

Scarica i file nella cartella:

dilation-tensorflow/data

Get Semantic Segmentation

Apri il file ‘main_tf.py’ e modifica la riga inserendo il nome del modello che intendi usare, scegliendo tra ‘cityscapes’ e ‘camvid’.

Esegui lo script main_tf.py e il gioco è fatto! In un tempo che varia in base alle tue dipsonibilità hardware avrai le belle immagini processate per la segmentazione semantica

Allocation of… | Means you are poor

Se eseguendo lo script dovessi notare, tra gli altri, un errore di questo tipo, non temere. La segmentazione semantica richiede parecchie risorse.

E normale.

Il computer ti sta dicendo che sei povero. 

E potresti no avere memoria RAM o la tua GPU ha terminato la VRAM occupabile, ma generalmente riguarda la RAM. Puoi risolvere il problema in due modi:

  • con tensorflow e 8GB di RAM, chiudi Chrome, o ogni altro programma non necessario. Libera memoria con ogni mezzo, se serve disinstalla Microsoft Edge. Questo non è un consiglio, ma è quello che al liceo chiamavamo peer-tutoring, educazione civica se vogliamo. Microsotf Edge no. Brutto
  • con tensorflow-gpu, devi impedire al sistema di allocare troppa memoria. Sgui allora la guida: Memory Allocation Problem con Tensorflow-gpu? La soluzione!

Wait. What the f***

Tanto di cappello a chiunque abbia scritto lo script, ma bomber… non esiste che io mi metta a rinominare ogni singola immagine di cui voglio ottenere la segmentazione.

Infatti, affinche lo script funzioni, è necessario rinominare l’immagine di cui vuoi eseguire la segmentazione con il nome di uno dei due modelli che usi. Quindi, se ad esempio scegliessi ‘cityscapes‘ allora dovrai chiamare la tua immagine cityscapes.png o cityscapes.jpg etc.

Ovviamo al problema: main.py.

Modifica main_tf.py | Easy life

Per risparmiare tempo, ti consiglio di usare una versione del main_tf.py che ho modificato, aggiungendo un ciclo for che itera per ogni file all’interno della cartella data.

Così se vuoi segmentare più di un’immagine alla volta, non ci saranno problemi. Salvo il tempo per la computazione. Ricordati di modificare il file, cambiando alle righe 33 e 57 la frazione di memoria usata dalla GPU

Esegui quindi il comando main.py.

Modifica main_tf.py | Cross work with Deep Photo Style Transfer

Quando è arrivato il momento di usare nuove foto da cui partire e nuove immagini da prendere come stile, nella guida sulla Deep Photo Style Transfer, abbiamo riscontrato un grosso problema: mancava lo script per generare la segmentazione.

Ora finalmente possiamo ovviare al problema

Rispetto alla repository ufficiale, quella di cui ho eseguito il fork, questa contiene oltre al file main.py, un file dataset modificato. Cambiano alcuni colori che sono usati per il processo di segmentazione in questo modo risulterà compatibile anche con la Deep Photo Style Transfer

Per poter raggiungere il nostro scopo dobbiamo però prendere alcuni accorgimenti, tra cui la riduzione delle immagini campione.

Siamo giunti alla fine della guida!

Ci vediamo alla prossima.

Un caldo abbraccio, Andrea.

Taggedcomputer visionmachine learningpythontensorflow


Ultimi post

Patricia Merkle Trie

Il Practical Algorithm To Retrieve Information Coded In Alphanumeric Merkle Trie, o Patricia Merkle Trie è una struttura dati chiave-valore usatada Ethereum e particolarmente efficiente per il salvataggio e la verifica dell’integrità dell’informazione. In questo post ne studieremo le caratteristiche. Prima di procedere, ci conviene ripassare l’introduzione al Merkle Tree nella quale abbiamo chiarito il […]

Andrea Provino
ethereum-patricia-merkle-tree
Tree Data Structure: cos’è un Merkle Tree

Un Merkle Tree è una struttura dati efficiente per verificare che un dato appartenga a un insieme esteso di elementi. È comunemente impiegato nelle Peer to Peer network in cui la generazione efficiente di prove (proof) contribuisce alla scalabilità della rete. Capire i vantaggi di questa struttura ci tornerà utile nel nostro percorso di esplorazione […]

Andrea Provino
merkle-tree-cover
UTXO: come funziona il modello Unspent Transaction Outputs

Per tenere traccia dei bilanci utente, la blockchain di Bitcoin sfrutta un modello di contabilità definito UTXO o Unspent Transaction Outputs. In questo articolo ne esaminiamo le caratteristiche. Ogni blockchain è dotata di un sistema di contabilità, un meccanismo attraverso cui tenere traccia dei bilanci di ciascun utente. I due grandi modelli di riferimento nel […]

Andrea Provino
bitcoin-utxo
Cos’è Ethereum

Possiamo definire Ethereum come una macchina a stati distribuita che traccia le transizioni di un archivio dati general-purpose (i.e. una memoria in grado di registrare qualsiasi dato esprimibile come coppia di chiave e valore o key-value) all’interno della Ethereum Blockchain. È arrivato il momento di esplorare uno dei progetti tecnologici più innovativi e interessanti degli […]

Andrea Provino
ethereum