Sommario:
- Fase 1: CNN e Transfer Learning: un po' di teoria
- Passaggio 2: prepara il tuo ambiente
- Passaggio 3: installare AXeleRate ed eseguire i test
- Passaggio 4: riaddestrare il modello, convertire il modello Keras in.kmodel
- Passaggio 5: eseguire il modello su Sipeed Maix Bit
- Passaggio 6: Conclusioni
Video: Riconoscimento delle immagini con schede K210 e Arduino IDE/Micropython: 6 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:00
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
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
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 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
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
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:
Rilevamento di oggetti con schede Sipeed MaiX (Kendryte K210): 6 passaggi
Rilevamento di oggetti con le schede Sipeed MaiX (Kendryte K210): come continuazione del mio precedente articolo sul riconoscimento delle immagini con le schede Sipeed MaiX, ho deciso di scrivere un altro tutorial, incentrato sul rilevamento di oggetti. Recentemente è apparso un hardware interessante con il chip Kendryte K210, incluso S
Intelligenza artificiale e riconoscimento delle immagini con HuskyLens: 6 passaggi (con immagini)
Intelligenza artificiale e riconoscimento delle immagini con HuskyLens: Ehi, come va, ragazzi! Akarsh qui da CETech. In questo progetto, daremo un'occhiata all'HuskyLens di DFRobot. È un modulo fotocamera basato sull'intelligenza artificiale in grado di eseguire diverse operazioni di intelligenza artificiale come Face Recognitio
Riconoscimento delle stelle tramite Computer Vision (OpenCV): 11 passaggi (con immagini)
Star Recognition Using Computer Vision (OpenCV): questo tutorial ti descriverà come creare un programma di visione artificiale per identificare automaticamente i modelli di stelle in un'immagine. Il metodo utilizza la libreria OpenCV (Open-Source Computer Vision) per creare un set di cascate HAAR addestrate che possono essere
Iniziare con Esp 8266 Esp-01 con Arduino IDE - Installazione di schede Esp in Arduino Ide e programmazione di Esp: 4 passaggi
Iniziare con Esp 8266 Esp-01 con Arduino IDE | Installazione di schede Esp in Arduino Ide e programmazione Esp: in questo tutorial impareremo come installare le schede esp8266 in Arduino IDE e come programmare esp-01 e caricare il codice in esso. Poiché le schede esp sono così popolari, ho pensato di raddrizzare un istruibile per questo e la maggior parte delle persone affrontano problemi
Riconoscimento delle immagini con TensorFlow su Raspberry Pi: 6 passaggi
Riconoscimento delle immagini con TensorFlow su Raspberry Pi: Google TensorFlow è una libreria software Open-Source per il calcolo numerico che utilizza grafici di flusso di dati. È utilizzato da Google nei suoi vari campi di Machine Learning e Deep Learning Technologies. TensorFlow è stato originariamente sviluppato da Google Brai