Dog Park

Ispirazione

Volevo provare cosa fosse possibile fare con le impostazioni predefinite di AWS DeepLens. Molti nuovi utenti di DeepLens hanno pochissima esperienza con il machine learning o l’apprendimento approfondito. Amazon SageMaker è uno strumento potente, ma è necessario del tempo per poterlo utilizzare con velocità. Quindi, volevo vedere cosa fosse possibile utilizzando delle applicazioni di esempio. Ho scoperto che è possibile fare abbastanza.

Cosa fa

Dog Park esegue il modello hotdog o no-hotdog e cattura le probabilità per ottenere gli abbinamenti più precisi. Esamina gli abbinamenti più precisi per vedere se si tratta di un cane. Ciò è possibile abbinando un sottogruppo delle 1000 categorie rappresentate dai cani. In tal caso, ne controlla la probabilità. Se questa supera una soglia (impostata arbitrariamente a 0,5), allora sostiene di aver trovato un cane. Dopo controlla l’abbinamento nella prossima categoria e determina se è un cane. In caso positivo, scrive l’intera immagine (non il frame più piccolo su cui è eseguito il riconoscimento) in un bucket S3 e scrive le due probabilità più alte per la razza del cane e l’URL dell’immagine su un argomento MQTT. I risultati possono essere monitorati nella console dell’IoT AWS. Una seconda funzione lambda (scritta in Node.js) chiamata DogParkNotifier riceve il messaggio dall’argomento ed estrae i campi rilevanti utilizzando un’affermazione SQL. I campi sono formattati per troncare la probabilità a un numero intero e sono inviati all’utente utilizzando un SNS. Possono essere inviati sotto forma di messaggi di testo SMS e e-mail. Per ricevere un’e-mail è necessario un ulteriore passaggio: bisogna creare un argomento e verificare l’e-mail.

Il risultato più visivo è un messaggio di testo SMS sul cellulare, dove l’immagine del cane è presentata con i risultati probabilistici. Anzi, è piuttosto impressionante il poter ricevere un risultato pochi secondi dopo aver puntato la telecamera su un cane.

Ciò che ho trovato interessante è che le probabilità cambiano con ogni frame. I cani non sono quasi mai fermi. Quindi la probabilità di riconoscimento cambia, spesso anche del 10% a seconda del movimento del cane.

Le persone sono aperte ad essere parte di un esperimento tecnologico. Erano molto interessate nel vedere ciò che DeepLens aveva da dire a proposito del loro cane.

Creato da: Dan Brennan

Come l’ho realizzato

L’ho realizzato iniziando con un’applicazione di esempio hotdog o no-hotdog. Ho scoperto che poteva riconoscere molte razze di cani, quindi ho pensato che fosse l’ideale per i principianti. Il codice che ho creato può essere riutilizzato facilmente. L’utente deve disporre di un account AWS, creare un bucket S3 nella stessa regione in cui le funzioni lambda saranno distribuite, impostare il ruolo IAM sul bucket S3 e includere un ruolo IAM nella funzione lambda con abbastanza privilegio. Dispone di placeholder per [NOME_DEL_TUO_BUCKET]. Avrai anche bisogno dell’accesso all’applicazione di esempio “Hot Dog o No Hot Dog” di Deep Lens.

Il lambda DogParkNotifier è la seconda parte dell’applicazione. Qui possono essere utilizzati il numero di telefono o l’indirizzo e-mail dell’utente per le notifiche SNS. 

Difficoltà

Ho creato più di 1000 build per realizzare questa demo. A dir la verità, mi ci sono volute 100 ore in quattro settimane. È stata un’enorme curva dell’apprendimento. Ho impiegato anche del tempo per effettuare il debug del codice lambda Python su DeepLens. Ho registrato il dispositivo DeepLens in poco tempo. Le istruzioni erano buone. Allo stesso tempo, stavo imparando a usare Node.js per il DogParkNotifier. E ovviamente ho incontrato problemi riguardanti l’aggiornamento automatico del sistema operativo, cosa che ha causato errori nel Wi-Fi. Ma il team AWS per DeepLens mi ha assistito con velocità.

Una delle difficoltà che ho riscontrato consisteva nel trovare un modo per ricaricare DeepLens quando ero negli spazi aperti. Ho provato una batteria portatile, come quelle che si usano per ricaricare i cellulari. Ma l’amperaggio in uscita era di 3,2 A, mentre DeepLens ne richiede 4,0. Il sistema cercava di ricaricarsi, ma dopo pochi secondi si scaricava. Ho trovato altre batterie sul mercato con un output di 4,8 A. Ma avevo paura di bruciare DeepLens. Quindi ho scelto una soluzione più sicura: un alimentatore di corrente. Il vantaggio qui è che archivia tonnellate di energia e permette di utilizzare DeepLens per almeno 10 ore. Lo svantaggio è dato dal fatto che è leggermente ingombrante. È costato 79 $, un po’ di più di quello che avrei speso con una batteria portatile.

Il gestore telefonico del mio cellulare (Verizon) ha bloccato i messaggi di testo in arrivo da Dog Park dopo che ne avevo ricevuti una centinaia. Non potevo re-impostare questo valore e non c’era della documentazione da parte di Verizon circa tale limite. AWS ha cercato di trasmettere i messaggi e ma non è riuscito affatto a consegnare il messaggio dalla compagnia. La soluzione era far consegnare il messaggio via e-mail.

Le condizioni meteorologiche hanno influenzato negativamente i test. C’è stata una forte gelata nel New Jersey e nessuno portava fuori i cani. In seguito abbiamo avuto numerosi giorni di pioggia esattamente pochi giorni prima che il concorso terminasse. Ma siamo riusciti ad andare al parco due volte e i risultati erano sorprendentemente accurati.

La connessione a Internet ha rappresentato un altro problema. DeepLens ha bisogno di una connessione Internet per inviare le immagini a S3 e popolare l’argomento MQTT. Il mio cellulare ha funzionato sia come hotspot che come ricevitore di messaggi. Ho notato che la connessione hotspot si concludeva quando non in richiesta. E DeepLens non cercava di riconnettersi. La soluzione è stata bilaterale. Ho portato con me un iPad e l’ho utilizzato per mantenere l’hotspot. Per qualche ragione, l’iPad mantiene in funzione la connessione hotspot del mio cellulare e ciò ha permesso anche di manetere la connessione con DeepLens. Inoltre, ho rimosso una connessione wireless alternata dal sistema Ubuntu di DeepLens. Disponevo di una connessione wireless ad alta velocità per lo sviluppo e una per l’hotspot per gli utilizzi remoti. Quando non era più possibile raggiungere l’hotspot, questo cercava di riconnettersi alla rete Wi-Fi ad alta velocità, che ovviamente non era disponibile nel parchetto per cani. E rimaneva lì, non tornava mai sull’hotspot. Quindi ho dovuto cancellare qualsiasi altra connessione Wi-Fi nella lista prima di uscire di casa e recarmi nel parchetto per cani.

Ho avuto un problema misterioso in cui le funzioni lambda distribuivano DeepLens ma la luce della telecamera non si accedeva. Il file di registro Python sul dispositivo mostrava che non vi erano errori. Il team AWS (durante gli orari di lavoro) mi hanno fatto provare:

Sul tipo di sistema di DeepLens: aws_cam@Deepcam:~$ git clone https://github.com/boto/boto3.git aws_cam@Deepcam:~$ cd boto3 aws_cam@Deepcam:~$ sudo cp -r boto3 /usr/local/lib/python2.7/dist-packages aws_cam@Deepcam:~$ sudo pip install awscli –force-reinstall –upgrade

Ha funzionato. Ci sono riuscito re-installando il CLI AWS.

Risultati di cui vado fiero

Sono fiero del fatto che funzioni. Ho imparato molto su Lambda, DeepLens, IAM, Python, argomenti e tutta la miriade di problemi che non facevano funzionare il progetto. Ho stimato che il progetto avrebbe richiesto circa 10 ore. E invece ce ne sono volute 100. Rimanevo sveglio fino a l’una di notte la maggior parte dei giorni.
Quindi sono davvero orgoglioso di averlo finito. Utilizza un campione hotdog per qualcosa di interessante, qualcosa di inusuale. Utilizza l’apprendimento approfondito e lo rende curioso per le persone. Mi chiedevano come funzionasse.

Cosa ho imparato

Ho imparato che non sono bravo a prevedere quanto tempo è richiesto per completare un progetto! Ho imparato molte cose sui servizi AWS. Ho imparato il lato pratico dell’unire più cose insieme. Ho imparato ad essere sempre più veloce. Non mi sono più chiesto dove va una funzione lambda quando la distribuisci. Ho scoperto la posizione per i messaggi del registro Python su DeepLens.

Il futuro di Dog Park

Dog Park deve poter utilizzare una batteria più piccola. Devo rendere la soglia programmabile da un applicazione Apple iOS, così che possa essere modificata sul campo. Devo rifinire la sicurezza. I parametri non erano abbastanza stretti durante i test.
Ho altre idee che hanno a che fare con il riconoscimento degli uccelli sulle mangiatoie. Ma ciò richiede una configurazione più precisa del modello e un addestramento che preveda numerose immagini di uccelli. Ovviamente, Amazon SageMaker sarà fondamentale per realizzarlo.

Creato con

Lambda
DeepLens
Python
Node.js
S3
Amazon-SNS

Fai una prova