Cuprins:

Recunoaștere imagine cu plăci K210 și Arduino IDE / Micropython: 6 pași (cu imagini)
Recunoaștere imagine cu plăci K210 și Arduino IDE / Micropython: 6 pași (cu imagini)

Video: Recunoaștere imagine cu plăci K210 și Arduino IDE / Micropython: 6 pași (cu imagini)

Video: Recunoaștere imagine cu plăci K210 și Arduino IDE / Micropython: 6 pași (cu imagini)
Video: LIVE#101 | Recunoastere imagini cu AI folosind HTML si JavaScript 2024, Iunie
Anonim
Image
Image

Am scris deja un articol despre cum să rulez demonstrațiile OpenMV pe Sipeed Maix Bit și am făcut și un videoclip cu demonstrația de detectare a obiectelor cu această placă. Una dintre numeroasele întrebări pe care și le-au pus oamenii este: cum pot recunoaște un obiect pentru care rețeaua neuronală nu este pregătită? Cu alte cuvinte, cum să creați propriul dvs. clasificator de imagine și să îl rulați cu accelerare hardware.

Aceasta este o întrebare de înțeles, deoarece pentru proiectul dvs. probabil nu este nevoie să recunoașteți unele obiecte generice, cum ar fi pisicile și câinii și avioanele. Doriți să recunoașteți ceva specific, de exemplu, o rasă de câine pentru ușa automată a animalelor de companie sau o specie de plantă pentru sortare sau orice alte aplicații ieșite la care vă puteți gândi!

Te-am înțeles! În acest articol vă voi învăța cum să creați propriul dvs. clasificator de imagine personalizat cu transfer de învățare în Keras, să convertiți modelul instruit în format.kmodel și să îl rulați pe placa Sipeed (poate fi orice placă, Bit / Dock sau Go) folosind Micropython sau IDE Arduino. Și doar imaginația ta va fi limita sarcinilor pe care le poți face cu aceste cunoștințe.

ACTUALIZARE MAI 2020: Văzând cum articolul și videoclipul meu despre Recunoașterea imaginilor cu plăcile K210 sunt încă foarte populare și printre rezultatele de top de pe YouTube și Google, am decis să actualizez articolul pentru a include informații despre aXeleRate, cadru bazat pe Keras pentru AI pe Edge dezvolt.

aXeleRate, în esență, se bazează pe colecția de scripturi pe care le-am folosit pentru instruirea modelelor de recunoaștere a imaginilor / de detectare a obiectelor - combinate într-un singur cadru și optimizate pentru fluxul de lucru pe Google Colab. Este mai convenabil de utilizat și mai actualizat.

Pentru versiunea veche a articolului, o puteți vedea în continuare pe steemit.com.

Pasul 1: CNN și transferul de învățare: unele teorii

CNN și învățarea prin transfer: unele teorii
CNN și învățarea prin transfer: unele teorii

Rețelele neuronale convoluționale sau CNN este o clasă de rețele neuronale profunde, aplicată cel mai frecvent la analiza imaginilor vizuale. Există o mulțime de literatură pe internet pe această temă și voi oferi câteva linkuri în ultima parte a articolului. Pe scurt, vă puteți gândi la CNN ca la o serie de filtre, aplicate imaginii, fiecare filtru căutând o caracteristică specifică din imagine - pe straturile convoluționale inferioare caracteristicile sunt de obicei linii și forme simple, iar pe straturile superioare caracteristicile poate fi mai specific, de ex părți ale corpului, texturi specifice, părți de animale sau plante etc. O prezență a anumitor seturi de trăsături ne poate oferi un indiciu asupra a ceea ce ar putea fi obiectul din imagine. Mustăți, doi ochi și un nas negru? Trebuie să fie pisică! Frunze verzi, un trunchi de copac? Pare un copac!

Sper că veți primi acum ideea despre principiul de funcționare al CNN. În mod normal, o rețea neuronală profundă are nevoie de mii de imagini și ore de antrenament (depinde de hardware-ul pe care îl folosiți pentru antrenament) pentru a „dezvolta” filtre care sunt utile pentru recunoașterea tipurilor de obiecte dorite. Dar există o comandă rapidă.

Un model instruit pentru a recunoaște o mulțime de obiecte comune (pisici, câini, aparate electrocasnice, transport etc.) are deja o mulțime de filtre utile „dezvoltate”, deci nu avem nevoie de el pentru a învăța să recunoaștem formele și părțile de bază din nou a obiectelor. Putem doar să re-antrenăm ultimele straturi ale rețelei pentru a recunoaște clase specifice de obiecte, care sunt importante pentru noi. Aceasta se numește „învățare prin transfer”. Aveți nevoie de date de antrenament mult mai puține și calculați timpul cu învățarea prin transfer, deoarece instruiți doar ultimele straturi ale rețelei, compuse poate din câteva sute de neuroni.

Sună minunat, nu? Să vedem cum să-l implementăm.

Pasul 2: Pregătiți-vă mediul

Pregătiți-vă mediul
Pregătiți-vă mediul

Pentru a fi două moduri de a utiliza aXeleRate: rularea locală pe mașina Ubuntu sau în Google Colab. Pentru a rula în Google Colab, aruncați o privire la acest exemplu:

Clasificare imagini Colab Notebook

Antrenarea modelului dvs. local și exportul acestuia pentru a fi utilizat cu accelerarea hardware este, de asemenea, mult mai ușor acum.

Mediul meu de lucru este Ubuntu 16.04, 64 biți. Puteți utiliza mașina virtuală pentru a rula imaginea Ubuntu, deoarece nu vom folosi GPU pentru antrenament. Cu unele modificări puteți rula și scriptul de antrenament pe Windows, dar pentru conversia modelului va trebui să utilizați sistemul Linux. Deci, mediul preferabil pentru a executa acest tutorial este Ubuntu 16.04, care rulează nativ sau în mașină virtuală.

Să începem prin instalarea Miniconda, care este managerul de mediu pentru Python. Vom crea un mediu izolat, deci nu vom schimba accidental nimic în mediul dvs. Python din sistem.

Descărcați programul de instalare de aici

După finalizarea instalării, creați un mediu nou:

conda create -n ml python = 3.7

Să activăm noul mediu

conda activate ml

Va apărea un prefix înainte de shell-ul bash cu numele mediului, indicând faptul că lucrați acum în acel mediu.

Pasul 3: Instalați AXeleRate și executați testele

Instalați AXeleRate și executați testele
Instalați AXeleRate și executați testele

Instalați aXeleRate pe mașina dvs. locală cu

pip install git +

Pentru a descărca exemple, rulați:

git clone

Puteți rula teste rapide cu tests_training.py în folderul aXeleRate. Va rula instruire și inferență pentru fiecare tip de model, va salva și va converti modelele instruite. Deoarece este doar antrenament pentru 5 epoci și setul de date este foarte mic, nu veți putea obține modele utile, dar acest script este destinat numai pentru verificarea absenței erorilor.

Pasul 4: Reinstruiți modelul, convertiți modelul Keras în.kmodel

Reinstruiți modelul, convertiți modelul Keras în.kmodel
Reinstruiți modelul, convertiți modelul Keras în.kmodel

Pentru acest exemplu de jucărie vom instrui modelul pentru a recunoaște Moș Crăciun și Arduino Uno. Evident, puteți alege alte clase. Descărcați setul de date de aici. Creați o copie a fișierului classifier.json în folderul de configurare, apoi schimbați-l corespunzător, similar cu fișierul de configurare din captura de ecran - asigurați-vă că calea către folderele de antrenament și validare este corectă!

Rulați următoarea comandă din folderul aXeleRate:

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

Antrenamentul va începe. Dacă precizia validării (metrica noastră de validare) nu se îmbunătățește timp de 20 de epoci, antrenamentul se va opri prematur. De fiecare dată când precizia validării se îmbunătățește, modelul este salvat în folderul proiectului. După încheierea antrenamentului, aXeleRate convertește automat cel mai bun model în formatele specificate - puteți alege „tflite”, „k210” sau „edgetpu” începând de acum.

Pasul 5: Rulați modelul pe Sipeed Maix Bit

Rulați modelul pe Sipeed Maix Bit
Rulați modelul pe Sipeed Maix Bit
Rulați modelul pe Sipeed Maix Bit
Rulați modelul pe Sipeed Maix Bit
Rulați modelul pe Sipeed Maix Bit
Rulați modelul pe Sipeed Maix Bit

Există două moduri de a rula modelul pe care îl aveți acum pe hardware-ul Sipeed Maix: firmware-ul micropiton și Arduino IDE. Hardware-ul Micropython este mai ușor de utilizat, dar ocupă o parte semnificativă din memoria disponibilă, deci rămâne mai puțin spațiu pentru model. Arduino IDE este practic cod C, care este mult mai eficient și are o amprentă de memorie mai mică. Modelul meu are doar 1,9 MB, deci ambele opțiuni funcționează pentru el. Puteți utiliza modele de până la 2,9 Mb cu Micropython, pentru orice lucru mai mare trebuie să luați în considerare utilizarea Arduino IDE.

Descărcați OpenMV IDE de aici și firmware-ul micropiton minim de aici.

Ardeți firmware-ul cu instrumentul kflash_gui. De asemenea, puteți alege să ardeți și modelul antrenat pentru a clipi, așa cum se arată în captura de ecran. Sau copiați-l pe cardul SD (în acest caz copiați.kmodel în rădăcina unui card SD și introduceți cardul SD în Sipeed Maix Bit)

Deschideți OpenMV IDE și apăsați butonul de conectare. Deschideți scriptul santa_uno.py din folderul example_scripts și apăsați butonul Start. Ar trebui să vedeți un flux live de la cameră și, dacă deschideți Serial Terminal, veți obține rezultatul de recunoaștere a imaginii de top cu scorul de încredere!

Pentru utilizarea cu Arduino IDE, mai întâi trebuie să urmați procedura de adăugare a plăcilor Sipeed la Arduino IDE, care este documentată aici. Versiunea dvs. Arduino IDE trebuie să fie cel puțin 1.8.12. După ce ați adăugat panourile, deschideți schița mobilenet_v1_transfer_learning.ino și încărcați-o pe Sipeed Maix Bit. Schimbați numele modelului de pe cardul SD în „model” (sau faceți o copie cu acest nume). Puteți schimba numele etichetelor în names.cpp. Acesta va afișa fluxul camerei live pe ecranul Sipeed Maix împreună cu rezultatul de recunoaștere a imaginii de sus.

Pasul 6: Concluzii

Iată câteva alte materiale de citit pe tema CNN-urilor și transferul învățării:

Transfer Learning folosind Mobilenet și Keras O explicație excelentă despre Transfer learning, acest tutorial utilizează o versiune modificată a codului din articolul respectiv.

Pisici și câini și rețele neuronale convoluționale Explică elementele de bază din spatele CNN și vizualizează unele filtre. Cu pisici!

Antrenează, convertește, rulează MobileNet pe Sipeed MaixPy și MaixDuino! Un tutorial de la echipa Sipeed despre cum să antrenezi cursurile Mobilenet 1000 de la zero (fără transfer de învățare). Puteți descărca modelul lor pre-antrenat și îl puteți încerca!

Sper că puteți folosi cunoștințele pe care le aveți acum pentru a construi câteva proiecte minunate cu viziune automată! Puteți cumpăra plăci Sipeed aici, acestea sunt printre cele mai ieftine opțiuni disponibile pentru ML pe sistemele încorporate.

Recomandat: