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.