Sommario:

Riconoscimento delle immagini con schede K210 e Arduino IDE/Micropython: 6 passaggi (con immagini)
Riconoscimento delle immagini con schede K210 e Arduino IDE/Micropython: 6 passaggi (con immagini)

Video: Riconoscimento delle immagini con schede K210 e Arduino IDE/Micropython: 6 passaggi (con immagini)

Video: Riconoscimento delle immagini con schede K210 e Arduino IDE/Micropython: 6 passaggi (con immagini)
Video: ChatGPT: come usare l'intelligenza artificiale nei progetti con Arduino 2024, Giugno
Anonim
Image
Image

Ho già scritto un articolo su come eseguire demo OpenMV su Sipeed Maix Bit e ho anche realizzato un video di demo di rilevamento di oggetti con questa scheda. Una delle tante domande che le persone si sono poste è: come posso riconoscere un oggetto per cui la rete neurale non è addestrata? In altre parole, come creare il proprio classificatore di immagini ed eseguirlo con l'accelerazione hardware.

Questa è una domanda comprensibile, poiché per il tuo progetto probabilmente non hai bisogno di riconoscere alcuni oggetti generici, come cani e gatti e aeroplani. Vuoi riconoscere qualcosa di specifico, ad esempio, una razza del cane per quella porta automatica per animali domestici, o una specie di pianta per lo smistamento o qualsiasi altra applicazione interessante a cui puoi pensare!

Ti ho preso! In questo articolo ti insegnerò come creare il tuo classificatore di immagini personalizzato con trasferimento di apprendimento in Keras, convertire il modello addestrato in formato.kmodel ed eseguirlo sulla scheda Sipeed (può essere qualsiasi scheda, Bit/Dock o Go) utilizzando Micropython o Arduino IDE. E solo la tua immaginazione sarà il limite ai compiti che puoi svolgere con questa conoscenza.

AGGIORNAMENTO MAGGIO 2020: Vedendo come il mio articolo e video su Image Recognition con le schede K210 sono ancora molto popolari e tra i primi risultati su YouTube e Google, ho deciso di aggiornare l'articolo per includere le informazioni su aXeleRate, il framework per l'intelligenza artificiale basato su Keras sul Edge sviluppo.

aXeleRate, essenzialmente, si basa sulla raccolta di script che ho usato per addestrare i modelli di riconoscimento delle immagini/rilevamento di oggetti, combinati in un unico framework e ottimizzati per il flusso di lavoro su Google Colab. È più comodo da usare e più aggiornato.

Per la vecchia versione dell'articolo, puoi ancora vederlo su steemit.com.

Fase 1: CNN e Transfer Learning: un po' di teoria

CNN e Transfer Learning: un po' di teoria
CNN e Transfer Learning: un po' di teoria

Le reti neurali convoluzionali o CNN sono una classe di reti neurali profonde, più comunemente applicate all'analisi delle immagini visive. C'è molta letteratura su Internet sull'argomento e fornirò alcuni link nell'ultima parte dell'articolo. In breve, puoi pensare alla CNN come a una serie di filtri, applicati all'immagine, ognuno dei quali cerca una caratteristica specifica nell'immagine - sui livelli convoluzionali inferiori le caratteristiche sono solitamente linee e forme semplici e sugli strati superiori le caratteristiche può essere più specifico, ad es parti del corpo, trame specifiche, parti di animali o piante, ecc. La presenza di un certo insieme di caratteristiche può darci un indizio su quale potrebbe essere l'oggetto nell'immagine. Baffi, due occhi e un naso nero? Deve essere un gatto! Foglie verdi, un tronco d'albero? Sembra un albero!

Spero che ora ti venga un'idea del principio di funzionamento della CNN. Normalmente una rete neurale profonda necessita di migliaia di immagini e ore di training (dipende dall'hardware che si utilizza per il training) per "sviluppare" filtri utili per riconoscere i tipi di oggetti desiderati. Ma c'è una scorciatoia.

Un modello addestrato a riconoscere molti oggetti comuni diversi (gatti, cani, elettrodomestici, trasporti, ecc.) ha già molti di quegli utili filtri "sviluppati", quindi non ne abbiamo bisogno per imparare a riconoscere le forme e le parti di base degli oggetti di nuovo. Possiamo semplicemente riaddestrare gli ultimi strati della rete per riconoscere classi specifiche di oggetti, che sono importanti per noi. Questo è chiamato "apprendimento di trasferimento". Hai bisogno di molto meno dati di addestramento e tempo di calcolo con il trasferimento di apprendimento, dal momento che stai allenando solo gli ultimi strati della rete, composti forse da poche centinaia di neuroni.

Sembra fantastico, vero? Vediamo come implementarlo.

Passaggio 2: prepara il tuo ambiente

Prepara il tuo ambiente
Prepara il tuo ambiente

Esistono due modi per utilizzare aXeleRate: eseguire localmente su una macchina Ubuntu o in Google Colab. Per l'esecuzione in Google Colab, dai un'occhiata a questo esempio:

Classificazione delle immagini Colab Notebook

Anche l'addestramento del modello in locale e l'esportazione per l'utilizzo con l'accelerazione hardware è ora molto più semplice.

Il mio ambiente di lavoro è Ubuntu 16.04, 64 bit. Puoi utilizzare la macchina virtuale per eseguire l'immagine Ubuntu poiché non utilizzeremo la GPU per l'addestramento. Con alcune modifiche puoi anche eseguire lo script di formazione su Windows, ma per la conversione del modello dovrai utilizzare il sistema Linux. Quindi, l'ambiente preferibile per eseguire questo tutorial è Ubuntu 16.04, in esecuzione in modo nativo o nella macchina virtuale.

Iniziamo installando Miniconda, che è il gestore dell'ambiente per Python. Creeremo un ambiente isolato, quindi non cambieremo accidentalmente nulla nell'ambiente Python del tuo sistema.

Scarica il programma di installazione qui

Al termine dell'installazione, creare un nuovo ambiente:

conda create -n ml python=3.7

Attiviamo il nuovo ambiente

conda attiva ml

Apparirà un prefisso prima della shell bash con il nome dell'ambiente, a indicare che ora lavori in quell'ambiente.

Passaggio 3: installare AXeleRate ed eseguire i test

Installa AXeleRate ed esegui i test
Installa AXeleRate ed esegui i test

Installa aXeleRate sul tuo computer locale con

pip install git+https://github.com/AIWintermuteAI/aXeleRate

Per scaricare gli esempi eseguire:

git clone

Puoi eseguire test rapidi con tests_training.py nella cartella aXeleRate. Eseguirà l'addestramento e l'inferenza per ogni tipo di modello, salverà e convertirà i modelli addestrati. Poiché è solo l'addestramento per 5 epoche e il set di dati è molto piccolo, non sarai in grado di ottenere modelli utili, ma questo script è pensato solo per verificare l'assenza di errori.

Passaggio 4: riaddestrare il modello, convertire il modello Keras in.kmodel

Riaddestrare il modello, convertire il modello Keras in.kmodel
Riaddestrare il modello, convertire il modello Keras in.kmodel

Per questo esempio di giocattolo addestreremo il modello a riconoscere Babbo Natale e Arduino Uno. Ovviamente puoi scegliere altre classi. Scarica il set di dati da qui. Crea una copia del file classifier.json nella cartella config, quindi modificala di conseguenza, in modo simile al file di configurazione nello screenshot: assicurati che il percorso delle cartelle di addestramento e convalida sia corretto!

Esegui il seguente comando dalla cartella aXeleRate:

python axelerate/train.py - c configs/santa_uno.json

La formazione avrà inizio. Se l'accuratezza della convalida (la nostra metrica di convalida) non migliora per 20 epoche, l'addestramento si interromperà prematuramente. Ogni volta che l'accuratezza della convalida migliora, il modello viene salvato nella cartella del progetto. Al termine dell'addestramento, aXeleRate converte automaticamente il modello migliore nei formati specificati: puoi scegliere "tflite", "k210" o "edgetpu" a partire da ora.

Passaggio 5: eseguire il modello su Sipeed Maix Bit

Esegui il modello su Sipeed Maix Bit
Esegui il modello su Sipeed Maix Bit
Esegui il modello su Sipeed Maix Bit
Esegui il modello su Sipeed Maix Bit
Esegui il modello su Sipeed Maix Bit
Esegui il modello su Sipeed Maix Bit

Esistono due modi per eseguire il modello che hai ora sull'hardware Sipeed Maix: firmware micropython e Arduino IDE. L'hardware Micropython è più facile da usare, ma occupa una parte significativa della memoria disponibile, quindi rimane meno spazio per il modello. Arduino IDE è fondamentalmente un codice C, che è molto più efficiente e ha un ingombro di memoria ridotto. Il mio modello è solo 1,9 Mb, quindi entrambe le opzioni funzionano. Puoi utilizzare modelli grandi fino a 2,9 Mb con Micropython, per qualsiasi cosa più grande devi considerare l'utilizzo di Arduino IDE.

Scarica OpenMV IDE da qui e firmware micropython minimo da qui.

Masterizza il firmware con lo strumento kflash_gui. Puoi anche scegliere di masterizzare anche il modello addestrato in flash, come mostrato nello screenshot. Oppure copialo su una scheda SD (in tal caso copia.kmodel nella radice di una scheda SD e inserisci la scheda SD in Sipeed Maix Bit)

Apri OpenMV IDE e premi il pulsante di connessione. Apri lo script santa_uno.py dalla cartella example_scripts e premi il pulsante Start. Dovresti vedere un live streaming dalla videocamera e se apri il terminale seriale otterrai il miglior risultato di riconoscimento dell'immagine con il punteggio di affidabilità!

Per l'utilizzo con Arduino IDE, per prima cosa è necessario seguire la procedura per l'aggiunta di schede Sipeed all'IDE Arduino, che è documentata qui. La tua versione dell'IDE Arduino deve essere almeno 1.8.12. Dopo aver aggiunto le schede, apri lo sketch mobilenet_v1_transfer_learning.ino e caricalo su Sipeed Maix Bit. Cambia il nome del modello sulla scheda SD in "modello" (o fai una copia con questo nome). È possibile modificare i nomi delle etichette in names.cpp. Mostrerà il flusso della telecamera dal vivo sullo schermo di Sipeed Maix insieme al risultato del riconoscimento dell'immagine in alto.

Passaggio 6: Conclusioni

Ecco altri materiali da leggere sul tema delle CNN e del trasferimento dell'apprendimento:

Trasferimento dell'apprendimento utilizzando Mobilenet e Keras Un'ottima spiegazione dell'apprendimento del trasferimento, questo tutorial utilizza una versione modificata del codice di quell'articolo.

Gatti e cani e reti neurali convoluzionali Spiega le basi dietro le CNN e visualizza alcuni dei filtri. Con i gatti!

Addestra, converti, esegui MobileNet su Sipeed MaixPy e MaixDuino! Un tutorial del team Sipeed su come addestrare le classi Mobilenet 1000 da zero (nessun trasferimento di apprendimento). Puoi scaricare il loro modello pre-addestrato e provarlo!

Spero che tu possa usare le conoscenze che hai ora per costruire alcuni fantastici progetti con la visione artificiale! Puoi acquistare le schede Sipeed qui, sono tra le opzioni più economiche disponibili per ML su sistemi embedded.

Consigliato: