Taula de continguts:

Reconeixement d'imatges amb plaques K210 i Arduino IDE / Micropython: 6 passos (amb imatges)
Reconeixement d'imatges amb plaques K210 i Arduino IDE / Micropython: 6 passos (amb imatges)

Vídeo: Reconeixement d'imatges amb plaques K210 i Arduino IDE / Micropython: 6 passos (amb imatges)

Vídeo: Reconeixement d'imatges amb plaques K210 i Arduino IDE / Micropython: 6 passos (amb imatges)
Vídeo: Reconeixement d'imatges amb Tensorflow.js [CA] 2024, Desembre
Anonim
Image
Image

Ja vaig escriure un article sobre com executar demostracions d'OpenMV a Sipeed Maix Bit i també vaig fer un vídeo de demostració de detecció d'objectes amb aquest tauler. Una de les moltes preguntes que la gent ha fet és: com puc reconèixer un objecte per al qual la xarxa neuronal no està entrenada? En altres paraules, com fer el vostre propi classificador d'imatges i executar-lo amb acceleració de maquinari.

Aquesta és una pregunta comprensible, ja que probablement no necessiteu reconèixer alguns objectes genèrics per al vostre projecte, com ara gats i gossos i avions. Voleu reconèixer alguna cosa específica, per exemple, una raça de gos per a aquesta porta automàtica d’animals de companyia, o una espècie de planta per classificar, o qualsevol altra aplicació sortint que pugueu pensar!

Et tinc! En aquest article us ensenyaré a crear el vostre propi classificador d'imatges personalitzat amb l'aprenentatge de transferència a Keras, convertir el model entrenat al format.kmodel i executar-lo a la placa Sipeed (pot ser qualsevol placa, Bit / Dock o Go) mitjançant Micropython o IDE Arduino. I només la vostra imaginació serà el límit de les tasques que podeu fer amb aquest coneixement.

ACTUALITZACIÓ DE MAIG DE 2020: Veient com el meu article i el meu vídeo sobre el reconeixement d’imatges amb taulers K210 segueixen sent molt populars i entre els millors resultats de YouTube i Google, vaig decidir actualitzar l’article per incloure la informació sobre aXeleRate, marc basat en Keras per a IA Edge desenvolupo.

aXeleRate, bàsicament, es basa en la col·lecció d’escriptures que he utilitzat per formar models de reconeixement d’imatges / detecció d’objectes, combinats en un marc únic i optimitzats per al flux de treball a Google Colab. És més còmode d’utilitzar i més actualitzat.

Per a la versió antiga de l'article, encara la podeu veure a steemit.com.

Pas 1: CNN i transferència d'aprenentatge: una mica de teoria

CNN i Aprenentatge de Transferència: Alguna Teoria
CNN i Aprenentatge de Transferència: Alguna Teoria

Les xarxes neuronals convolucionals o CNN són una classe de xarxes neuronals profundes, que s’apliquen més comunament a l’anàlisi d’imatges visuals. Hi ha molta literatura a Internet sobre el tema i donaré alguns enllaços a la darrera part de l'article. En resum, podeu pensar en CNN com una sèrie de filtres, aplicats a la imatge, que cada filtre busca una característica específica a la imatge: a les capes de convolució inferiors les característiques solen ser línies i formes simples i a les capes superiors les característiques pot ser més específic, per exemple parts del cos, textures específiques, parts d’animals o plantes, etc. La presència de determinats conjunts de trets ens pot donar una idea del que podria ser l’objecte de la imatge. Bigotis, dos ulls i un nas negre? Deu ser gat! Fulles verdes, un tronc d’arbre? Sembla un arbre!

Espero que tingueu la idea del principi de funcionament de CNN ara. Normalment, una xarxa neuronal profunda necessita milers d’imatges i hores de formació (depèn del maquinari que utilitzeu per entrenar) per "desenvolupar" filtres que siguin útils per reconèixer els tipus d'objectes que voleu. Però hi ha una drecera.

Un model entrenat per reconèixer molts objectes comuns diferents (gats, gossos, electrodomèstics, transport, etc.) ja té molts d'aquests filtres útils "desenvolupats", de manera que no el necessitem per aprendre a reconèixer les formes i les parts bàsiques dels objectes de nou. Només podem tornar a entrenar les darreres capes de la xarxa per reconèixer classes específiques d’objectes, que són importants per a nosaltres. Això s’anomena “aprenentatge per transferència”. Necessiteu molt menys dades d'entrenament i calculeu el temps amb l'aprenentatge de transferència, ja que només esteu entrenant les darreres capes de la xarxa, compostes potser per pocs centenars de neurones.

Sona increïble, oi? Vegem com implementar-lo.

Pas 2: prepareu el vostre entorn

Prepareu el vostre entorn
Prepareu el vostre entorn

Hi ha dues maneres d'utilitzar aXeleRate: executant-se localment a la màquina Ubuntu o al Google Colab. Per executar-vos a Google Colab, consulteu aquest exemple:

Classificació de la imatge Colab Notebook

Ara és molt més fàcil entrenar el vostre model localment i exportar-lo per utilitzar-lo amb acceleració de maquinari.

El meu entorn de treball és Ubuntu 16.04, 64 bits. Podeu utilitzar la màquina virtual per executar la imatge d'Ubuntu, ja que no utilitzarem la GPU per a l'entrenament. Amb algunes modificacions, també podeu executar l'script de formació a Windows, però per a la conversió de models haureu d'utilitzar el sistema Linux. Per tant, l’entorn preferible per executar aquest tutorial és Ubuntu 16.04, que s’executa de forma nativa o en màquina virtual.

Comencem instal·lant Miniconda, que és el gestor d’entorns de Python. Crearem un entorn aïllat, de manera que no canviarem accidentalment res del vostre entorn Python del sistema.

Descarregueu l'instal·lador aquí

Un cop finalitzada la instal·lació, creeu un entorn nou:

conda crear -n ml pitó = 3,7

Activem el nou entorn

conda activar ml

Apareixerà un prefix abans de l'intèrpret d'ordres bash amb el nom de l'entorn, que indica que treballeu ara en aquest entorn.

Pas 3: instal·leu AXeleRate i executeu proves

Instal·leu AXeleRate i executeu proves
Instal·leu AXeleRate i executeu proves

Instal·leu aXeleRate a la vostra màquina local amb

pip install git +

Per descarregar exemples, executeu:

git clone

Podeu executar proves ràpides amb tests_training.py a la carpeta aXeleRate. Executarà formació i inferències per a cada tipus de model, guardarà i convertirà models entrenats. Com que només té formació per a 5 èpoques i el conjunt de dades és molt petit, no podreu obtenir models útils, però aquest script només està destinat a comprovar l'absència d'errors.

Pas 4: torneu a entrenar el model, convertiu el model Keras a.kmodel

Torneu a entrenar el model, convertiu el model Keras a.kmodel
Torneu a entrenar el model, convertiu el model Keras a.kmodel

Per a aquest exemple de joguina, entrenarem el model per reconèixer el Pare Noel i l’Arduino Uno. Evidentment, podeu triar altres classes. Baixeu-vos el conjunt de dades des d’aquí. Creeu una còpia del fitxer classifier.json a la carpeta de configuració i, a continuació, canvieu-lo en conseqüència, de manera similar al fitxer de configuració de la captura de pantalla. Assegureu-vos que el camí cap a les carpetes de formació i validació sigui correcte.

Executeu l'ordre següent des de la carpeta aXeleRate:

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

Començarà la formació. Si la precisió de la validació (la nostra mètrica de validació) no millora durant 20 èpoques, la formació s'aturarà prematurament. Cada vegada que millora la precisió de la validació, el model es desa a la carpeta del projecte. Un cop acabat l'entrenament, aXeleRate converteix automàticament el millor model en formats especificats: podeu triar "tflite", "k210" o "edgetpu" a partir d'ara.

Pas 5: executeu el model a Sipeed Maix Bit

Executeu el model a Sipeed Maix Bit
Executeu el model a Sipeed Maix Bit
Executeu el model a Sipeed Maix Bit
Executeu el model a Sipeed Maix Bit
Executeu el model a Sipeed Maix Bit
Executeu el model a Sipeed Maix Bit

Hi ha dues maneres d’executar el model que teniu ara al maquinari Sipeed Maix: microprogramari de micropitó i Arduino IDE. El maquinari Micropython és més fàcil d’utilitzar, però ocupa una part important de la memòria disponible, de manera que queda menys espai per al model. Arduino IDE és bàsicament un codi C, que és molt més eficient i té una petjada de memòria menor. El meu model té només 1,9 MB, de manera que totes dues opcions funcionen. Podeu utilitzar models de fins a 2,9 Mb amb Micropython, per a qualsevol cosa més gran heu de tenir en compte l’ús d’Arduino IDE.

Descarregueu l’OpenMV IDE des d’aquí i el microprogramari mínim de micropitó des d’aquí.

Graveu el microprogramari amb l'eina kflash_gui. També podeu optar per gravar el model entrenat perquè parpellegi, tal com es mostra a la captura de pantalla. O copieu-lo a la targeta SD (en aquest cas, copieu.kmodel a l’arrel d’una targeta SD i inseriu la targeta SD a Sipeed Maix Bit)

Obriu OpenMV IDE i premeu el botó de connexió. Obriu l'script santa_uno.py des de la carpeta example_scripts i premeu el botó Inici. Hauríeu de veure una reproducció en directe des de la càmera i, si obriu el terminal sèrie, obtindreu el resultat més alt de reconeixement d’imatges amb la puntuació de confiança.

Per utilitzar-lo amb Arduino IDE, primer heu de seguir el procediment per afegir plaques Sipeed a Arduino IDE, que es documenta aquí. La vostra versió Arduino IDE ha de ser com a mínim l’1.8.12. Després d'afegir els taulers, obriu l'esbós mobilenet_v1_transfer_learning.ino i pengeu-lo a Sipeed Maix Bit. Canvieu el nom del model a la targeta SD per "model" (o feu una còpia amb aquest nom). Podeu canviar els noms de les etiquetes a names.cpp. Es mostrarà el flux de càmera en directe a la pantalla de Sipeed Maix juntament amb el resultat de reconeixement d’imatges superior.

Pas 6: Conclusions

Aquí teniu alguns materials més per llegir sobre el tema de les xarxes CNN i la transferència d’aprenentatge:

Transferir l'aprenentatge mitjançant Mobilenet i Keras Una gran explicació sobre l'aprenentatge de transferència, aquest tutorial utilitza una versió modificada del codi d'aquest article.

Gats i gossos i xarxes neuronals convolucionals Explica els conceptes bàsics darrere de les xarxes CNN i visualitza alguns dels filtres. Amb gats!

Entrena, converteix, executa MobileNet a Sipeed MaixPy i MaixDuino. Un tutorial de l'equip de Sipeed sobre com entrenar les classes de Mobilenet 1000 des de zero (sense aprenentatge per transferència). Podeu descarregar el model prèviament entrenat i provar-lo.

Espero que pugueu utilitzar els coneixements que teniu ara per construir alguns projectes impressionants amb visió artificial. Podeu comprar taulers Sipeed aquí, que són una de les opcions més barates disponibles per a ML en sistemes incrustats.

Recomanat: