Blog.

YOLO Object Detection usando Tensorflow, darkflow e python


Autore
Andrea Provino
Data
Tempo di lettura
6 minuti
Categoria
Guide

yolo_machine_learning

YOLO, abbreviazione di You Only Look Once, è un potente ed efficiente sistema di riconoscimento oggetti. Sfrutta un ingegnoso meccanismo di machine learning che permette, attraverso la scomposizione e l’analisi di singoli fotogrammi, l’identificazione di auto, persone, animali e molto altro.

Le applicazioni sono numerose: dai sistemi di sciurezza all’interno di abitazioni, alle auto a guida autonoma.

In questo post configureremo tutto il necessario per eseguire i primi test su un’immagine.

YOLO | I requisti, hadware, software e mentali

I requisiti hardware sono semplici: basta un computer, meglio se dotato di GPU. In assenza di questo componente le operazioni saranno più lunghe, ma non impossibili.

Passiamo alla nota dolente, i requisiti mentali. Rilassati. Fatti una passeggiata. 

Sei ancora seduto? Allora fatti una tisana:

  • sei nervoso? Sbaglierai qualcosa
  • non vedi l’ora di provare questo sistema e salti alcuni punti? Otterrai un mucchio di cose non funzionanti
  • Sei frettoloso e fai copia e incolla senza capire nulla? Entrerai in un loop di frustrazione, rabbia e depressione che inevitabilmente ti porterà a distruggere il computer.

Sembra il bugiardino di un medicinale. “Ecco le controindicazioni...”

Però, seguendo alla lettera le informazioni di questa guida, con calma e tranquillità, raggiungerai il tuo obiettivo. Credimi, una volta giunto alla vetta della montagna, il panorama sarà senza eguali. 

Perché dovresti seguire questa guida? Per svariati motivi, puoi metterti alla prova e acquisire nuove capacità; puoi fare i primi passi nel fantastico mondo delle intelligenze artificiali e stupirti di cosa un programa sia in grado di fare.

La guida è per utenti MS-Windows, in futuro lavorerò anche con linux.

Iniziamo

Installazione Microsoft Visual Studio

Le librerie che andrai ad installare, richiedono Microsoft Visual C++ v14. Quindi scarica la versione community di Visual Studio 2017. Segui la procedura di installazione, e cliccando su Visual C++ build tools, assicurati di scaricare:

  • VC++ 2017 version 15.9 v14.16 latest v141 tools
  • Windows 10 SDK (10.0.17763.0)

Segui le istruzioni. I file sono un po’ pesanti, e al termine dell’installazione ti sarà richiesto di effettuare il riavvio.

Assicurati di avere solo Visual Studio 2017 installato, qualora fossero presenti versioni precedenti, eliminale. Nel mio caso, era presente Visual Studio 2015. Mi ha causato problemi perché il sistema non caricava la v2017. Eliminarla è stato semplice, è bastato selezionarla sempre da Visual Studio Installer e disinstallarla.

Installazione Anaconda | Python

Ora installa python. Collegati al sito di anaconda e scarica l’installer.

Attenzione | Only 64-bit allowed

Da quanto ho capito, i sistemi a 32 bit non sono supportati da alcune librerie che andrai ad utilizzare. Questo obbliga l’installazione della versione 64bit del programma ed impedisce ai sistemi a 32bit di proseguire nella guida. Mi spiace. Se dovessi trovare altro materiale, fornirò prontamente la documentazione.

Segui le indicazioni a schermo e assicurati di installare python globalmente aggiungendo alla variabile PATH di Windows i dovuti file. 

Ora abbiamo python v3.7 installato sul nostro sistema. Cerca dal menu start, Anaconda Prompt. Quindi digita:

python -V (attenzione alla V maiuscola)

Output: Python 3.7.0

Installazione Python v3.5

Dopo svariati tentativi, e numerose ricerche sul web, sono arrivato alla conclusione che con la versione 3.5 di python abbiamo la sicurezza che il sistema YOLO funzioni senza intoppi. Quindi, installa python 3.5, creando un nuovo ambiente all’interno di anaconda, che andrai in seguito ad attivare. All’interno di Anaconda prompt digita:

conda create -n py35 python=3.5

Digita “y”, per accettare l’installazione dei pacchetti.

Ora attiviamo l’ambiente digitando:

activate py35

Sei dentro l’ambiente di py35. Lo puoi vedere dalla scritta “(py35)” che compare alla sx del percorso file in cui ti trovi.

Installazione librerie

Ti servono queste librerie

  • tensorflow
  • numpy
  • Cython
  • opencv
  • PyHamcrest

Quindi effetuane l’installazione, una alla volta, digitando (sempre in Anaconda Prompt):

pip install tensorflow

pip install numpy

Ora, numpy potrebbe essere già presente. Questo singifica che la shell di darà un messaggio di “errore”. Non ti preoccupare

pip install Cython

pip install PyHamcrest

conda config –add channels conda-forge

Anche questo comando potrebbe restituire un “Warning”, dal momento che il canale “conda-forge” potrebbe essere già registrato. Non ti preoccupare, vai a avanti.

conda install opencv

(richiede autorizzazione a procede “Proceed ([y]/n)?”, digita “y”)

Perfetto, le librerie sono installate!

Download darkflow-master

E’ arrivato il momento di scaricare i file richiesti per YOLO. Collegati a GitHub e scarica la repository darkflow-master.

E’ un file zip. Salvalo sul desktop e apri l’archivio.

Installazione darkflow

Su Anaconda Prompt digita:

cd Desktop\darkflow-master\darkflow-master

Ora installa darkflow usando il comando:

pip install -e .

Occhio al punto “.”, è necessario.

Questo è il momento della verità. Se hai installato tutto correttamente, darkflow sarà installato senza errori. In caso contrario, calma e sangue freddo. 

Potrebbe essere andato storto qualcosa. Cerca di capire l’errore che compare. Una rapida ricarca su google potrebbe tornare utile.

Correzzione errori

Nel mio caso, ho ricevuto i seguenti “Warning”:

OUTPUT: twisted 18.7.0 requires PyHamcrest>=1.9.0, which is not installed.

OUTPUT: You are using pip version 10.0.1, however version 18.1 is available.

Per sicurezza, risolvo le richieste. Su Anaconda Prompt digito:

pip install PyHamcrest

python -m pip install –upgrade pip

Il secondo comando mi ha richiesto i permessi di amministratore. Li ho concessi, avviando una nuova istanza di Anaconda Prompt “Eseguendo come amministratore”

Download file *.weights

Collegati a questo link, e scarica “yolo.weights” salvando il file in una nuova cartella chiama “bin” all’interno di darkflow-master.

Percorso da desktop:

darkflow-master\darkflow-master\bin\yolo.weights

Avvio YOLO detecting object

Con il gestore fil di MS-Windows apri la cartella:

darkflow-master\darkflow-master\simple-img

Ci somo immagini di esempio su cui applichrai il sistema YOLO; a breve, si creerà una cartella Out in cui andrai a vedere il risultato.

Su Anaconda Promt digita:

python flow  –imgdir sample_img/ –model cfg/yolo.cfg –load bin/yolo.weights

In 9.59 secondi, le mie immagini demo sono state processate. Il tempo varia in funzione di CPU, SSD o HDD, ma in linea di massima si aggira attorno a questo valore. Ecco il confronto prima / dopo

Il sistema funziona! Nei prossimi post, faremo alcune considerazioni e miglioreremo il riconoscimento.

Un caldo abbraccio, Andrea.


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