Blog.

YOLO Object Detection | Log da 0 a 0,001


Autore
Andrea Provino
Data
Tempo di lettura
7 minuti
Categoria
Logs

log_come_nasce_guida_esplorare_trovare_find_way_explore

Stai per leggere il dietro le quinte della guida:

YOLO Object Detection usando Tensorflow, darkflow e python

Se vuoi davvero sapere cosa siano i Log da 0 a 0,001 e perché dovresti leggerli, dai un’occhiata a questo post.

Sono le 8:21 di sabato 8 dicembre, festa dell’immacolata.
Invece di addobbare il pino natalizio, noi baldi programmatori creeremo un software di analisi video in tempo reale basato sulla tecnica YOLO (You only look once). 

Queste erano le premesse di un avventura che solo dopo avrei scoperto sarebbe durata un giorno intero…

Attraverso l’impiego di algoritmi di machine learning, e si spera non troppa potenza di calcolo, saremo in grado di far eseguire analisi quasi istantanee su ogni file caricato.

Ecco cosa ho fatto questa mattina:

  1. mi sono svegliato, ho fatto colazione e indossato una felpa in pile comoda comoda
  2. Ho guardato fuori dalla finestra e, mentre gelavo dal freddo causa pavimento congelato e calzini sottili, ho pensato: “Siii, facciamo qualcosa di straordinario!
  3. Ho ercato un video su YouTube e iniziato a scrivere questo post.

Direi che abbiamo ogni requisito richiesto dalla sfida, comprese le 0 conoscenze in ambito machine learning. Inziamo.

Visione della videoguida

Per prima cosa daremo un rapido sguardo a ciò che ci aspetta. Il video in questione dura quasi 22 minuti, dunque fissiamo la velocità di riproduzione a 2x e per i prossimi 11 minuti spremeremo i nostri quasi 86 miliardi di neuroni al limite. Ovviamente il video è in inglese, ma i sottotili sono inutili a questa velocità. 

Dopo 9:11 di riproduzione il mio cervello ha pensato: “Sai cosa, tutta questa euforia è molto bella ma non mi piace. Tieni, prendi un po’ di depressione, aggiungici un po’ di fallimento e pensa al fatto che molti prima di te ci hanno provato e hanno fallito. Hey, che ne dici di giocare al computer ora?”

Evitiamo di dire brutte parole, e concentriamoci sul nostro obiettivo. Noi porteremo a termine questo progetto. Punto. E’ un piccolo mattoncino: un passo alla volta costruiremo un impero. Ora, Play!

Ok. M***a

Considerazioni a caldo

Con mio grande rammarico, gran parte del video è dedicata alla storia dei sistemi di riconoscimento dal 2001 ad oggi. Fornisce tutte le informazioni essenziali per avere il minimo background necessario a comprendere questa tecnica. Purtroppo però, la spiegazione del funzionamento del programma la dovremo trovare altrove. 

Invece, per il momento, ci limiteremo a fare un copy end past piuttosto sfrenato e installare le dipendenze. Tradotto in soldoni, premiamo tasti e usiamo il mouse con quanta più cognizione di causa possibile sperando che tutto vada per il verso giusto.

Creazione ambiente

Quando non hai la più pallida idea di cosa tu stia facendo è normale che l’intero processo duri più a lungo del normale.

Agiamo con logica.

Siamo sulla pagina di GitHub. Per procedere dobbiamo installare le seguenti dipendenze:  Python3, tensorflow 1.0, numpy, opencv 3.

Ora la domanda è: “Come le installiamo?”. “Seguiamo le indicazioni di GitHub o cerchiamo in rete?”. Per il momento sto cercando di seguire alla lettera, per quanto possibile, le indicazioni di GitHub. Python, sulla mia macchina, è installato tramite anaconda. E’ possibile che i comandi debbano invece essere impartiti sulla shell di python?

Zio impanato, siamo delle capre. In pratica:

  1. effettua il download dell’intera cartella, oppure usa il comando “git clone” per scaricare i file.
  2. dal prompt di comando, io ho usato anaconda, spostati all’interno della cartella che hai appena scaricato. Quindi usa una delle tre modalità di installazione. Io ho scelto la seconda, perché la prima mi dava errori e non avevo intenzione di perdere tempo per capire cosa non funzionasse.

La seconda modalità, nel mio caso, restituisce comunque un errore. A quanto pare è richiesto visual studio c++ v14.0 che al momento non è installato sulla mia macchina. Effetuiamo il download. 

Stiamo installando visual studio… circa 3,6GB… a questo punto, speriamo di non aver: frainteso / agito troppo velocemente / perso tempo riempiendo il computer di spazzatura.

Abbiamo riempito il computer di spazzatura.

Procediamo in altro modo. Andiamo avanti lo stesso, magari non è poi così importante. A questo punto, scarichiamo il file in formato weigths, e installiamo tensorflow di cui siamo, a quanto pare, sprovvisti.

Ora, se avrai seguito passo a passo la guida, sentirai la CPU inziziare a prenderti per il c**o, mentre la RAM del computer sparlerà di te con l’HDD. Non ti preoccupare, è normale.

Da circa 20 minuti la shell di anaconda sta “Solving environment:” inizio a preoccuparmi. Chiudo violentemente la shell, e digito un altro comando. Speriamo funzioni. Mi raccomando fai anche te così.

Ore 11:31. 2 ore e 4 crisi nervose dopo, siamo riusciti ad installare tensorflow.

I problemi erano:

  • tensorflow richiede che python sia installato per sistemi a 64bit e non 32
  • tensorflow non funziona con python 3.7

Ore 12:10, il nostro tour the force continua. Ora finalmente anche darkflow è installato. Questa volta mancava Visual Studio 14.0 che abbiamo installato seguendo l’ennesima semiguida su internet.

Passo successivo, il weights packet. Non so cosa sia, ma è già scaricato. 

Buonasera! Sono le 17:19.

Per il momento siamo bloccati all’ennesimo errore, e non riusciamo ad eseguire il comando flow.

Ho trovato questa guida che dovrebbe risolvere il nostro problema. Speriamo. 

Ora abbiamo installato correttamente opencv, attraverso l’uso di conda.

Nuovo problema: AssertionError: expect 44948596 bytes, found 44948600″

Questa guida propone di modificare il file loader.py, in cui il problema ha origine cambiando il valore offset, da 16 a 20. Proviamo

Nuovo problema: “labels.txt and cfg/yolov2-tiny.cfg indicate inconsistent class numbers”

Ore 00:25

Unisco yolov3.cfg (scaricato dal sito di YOLO) e yolov3.weights, usando il comando: 

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

Niente da fare.

Buongiorno! Sono le 9:12 di domeinca 9 dicembre! E’ arrivato il momento di cambiare radicalmente approccio. Ecco cosa abbiamo capito ieri.

I file *.cfg contengono la strutttura del modello, metre i file *.weigths sono i modelli su cui è già stato effettuato il training. Dunque i due file devono essere compatibili, altrimenti sorgono errori di tipo “AssertionError“. Sul sito ufficiale del sistema YOLO, ci sono le v3 dei rispettivi file, che a quanto pare non funzionano con l’ambiente da noi configurato (abbiamo effetuato tramite anaconda il downgrade di python e attualmente stiamo lavorando su py35, python 3.5)

Signore e signori, ci siamo riusciti!

Abbiamo scaricato un’altra repository da github, effettuato il download di un paio di file da una cartella drive, impartito il giusto comando e attualmente il sistema funziona a 5.5 FPS... è appena crashato mentre stavo scrivendo.

Non demordiamo. Stavamo eseguendo una demo in tempo reale attraverso la webcam del computer, ma il computer è privo di GPU, e l’intel core i5 “castrato” non aiuta in un compito così esoso in termini di potenza di calcolo. Tutto questo risulta in una gestione di 5.5FPS (fotogrammi per secondo) in tempo reale. “Un po’ schifo.” Sppiamo che le prestazoni del YOLO possono essere molto superiori.

Ora scarichiamo un video da youtube con macchine, persone, etc. Eseguiamo YOLO sul file e vediamo cosa succede. 

Zio impanato. Ci manca il software. Scarichiamo 4k Video Downloader, un must have. Effetuiamo una ricerca su YouTube Keyword: dashcam. Una dashcam, è una piccola videocamera che riprende la strada davanti l’auto, utile per capire la responsabilità dei conducenti in un incidente. E’ particolarmente usata nei pesi del’est europa, dove le assicurazioni hanno un funzionamento diverso dal nostro.

Scarichiamo uno dei primi video, e iniziamo l’analisi.

Dietrofront. Caricato il video, l’analisi è partita ma non si vedeva una cippa di nulla. Dobbiamo capire meglio che fine fa il video processato. In più, dal momento che il file pesa quasi 100MB, il processore è piccino e lavoriamo a 5.5FPS ho preferito percorrere un’altra strada, in attesa di spostarci sul desktop ed usare la potenza della 1070 (finalmente ha uno scopo preciso, che non sia solo giocare) per previsioni più veloci.

Per il momento sto facendo dei test su semplici foto, e il risultato è niente male!

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