Cuprins:
- Pasul 1: CNN și transferul de învățare: unele teorii
- Pasul 2: Pregătiți-vă mediul
- Pasul 3: Instalați AXeleRate și executați testele
- Pasul 4: Reinstruiți modelul, convertiți modelul Keras în.kmodel
- Pasul 5: Rulați modelul pe Sipeed Maix Bit
- Pasul 6: Concluzii
Video: Recunoaștere imagine cu plăci K210 și Arduino IDE / Micropython: 6 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:42
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
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
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 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
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
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:
Plăci cu circuite gravate cu acid pentru imprimantă SLA 3D: 7 pași (cu imagini)
SLA 3D Printer Acid Etched Circuit Boards: Remix..remix .. Ei bine, am nevoie de o placă de dezvoltare pentru cipurile mele ATtiny. Nu am un CNC pentru a tăia un PCB. Nu cunosc Kicad și nu vreau să comand plăci. Dar am o imprimantă cu rășină … și acid și știu SketchUp. Și îmi place să fac lucruri. Ce s-a intamplat
Detectarea obiectelor cu plăci Sipeed MaiX (Kendryte K210): 6 pași
Detectarea obiectelor cu plăcile Sipeed MaiX (Kendryte K210): Ca o continuare a articolului meu anterior despre recunoașterea imaginilor cu plăcile Sipeed MaiX, am decis să scriu un alt tutorial, concentrându-mă pe detectarea obiectelor. Recent a apărut un hardware interesant cu cipul Kendryte K210, inclusiv S
Perete interactiv cu plăci cu LED (mai ușor decât pare): 7 pași (cu imagini)
Perete interactiv cu plăci cu LED (mai ușor decât pare): În acest proiect am construit un afișaj interactiv cu plăci LED folosind un Arduino și piese imprimate 3D. Inspirația pentru acest proiect a venit parțial din plăcile Nanoleaf. Am vrut să vin cu propria mea versiune, care nu numai că era mai accesibilă, dar și mo
Plăci Circut imprimate - Proces complet: 14 pași (cu imagini)
Plăci Circut imprimate - Proces complet: Următorul descrie procesul prin care creez plăci de circuite PC pentru o singură dată și utilizarea prototipului. Este scris pentru o persoană care și-a creat propriile forumuri în trecut și este familiarizată cu procesul general. Este posibil ca toți pașii mei să nu fie op
Arduino - Plăci de pian: 16 pași (cu imagini)
Arduino - Piano Tiles: Hello internet people, This will be about about how to make what DEFINITELY is not a rip off of a mobile game on a arduino uno r3.so to start, you will need all the parts, care sunt după cum urmează ! 1x Arduino Uno r3 (42 USD) 2x ecran tastatură LCD (19 USD fiecare) 5