Sadržaj:

Prepoznavanje slike s K210 pločama i Arduino IDE/mikropythonom: 6 koraka (sa slikama)
Prepoznavanje slike s K210 pločama i Arduino IDE/mikropythonom: 6 koraka (sa slikama)

Video: Prepoznavanje slike s K210 pločama i Arduino IDE/mikropythonom: 6 koraka (sa slikama)

Video: Prepoznavanje slike s K210 pločama i Arduino IDE/mikropythonom: 6 koraka (sa slikama)
Video: Prepoznavanje teksta sa slike online 2024, Lipanj
Anonim
Image
Image

Već sam napisao jedan članak o tome kako pokrenuti OpenMV demonstracije na Sipeed Maix Bit, a također sam napravio i video demonstraciju otkrivanja objekata na ovoj ploči. Jedno od mnogih pitanja koja su ljudi postavili je - kako mogu prepoznati objekt za koji neuronska mreža nije obučena? Drugim riječima, kako napraviti vlastiti klasifikator slika i pokrenuti ga hardverskim ubrzanjem.

Ovo je razumljivo pitanje, budući da za svoj projekt vjerojatno ne morate prepoznati neke generičke objekte, poput mačaka i pasa te aviona. Želite prepoznati nešto specifično, na primjer, pasminu psa za ta automatska vrata za kućne ljubimce, ili biljnu vrstu za sortiranje ili bilo koju drugu izlaznu aplikaciju o kojoj možete razmišljati!

Imam te! U ovom članku ću vas naučiti kako stvoriti vlastiti prilagođeni klasifikator slika s učenjem prijenosa u Kerasu, pretvoriti obučeni model u.kmodel format i pokrenuti ga na ploči Sipeed (može biti bilo koja ploča, Bit/Dock ili Go) pomoću Micropythona ili Arduino IDE. I samo će vaša mašta biti granica zadataka koje možete obaviti s ovim znanjem.

AŽURIRAJTE SVIBANJ 2020.: Vidjevši kako su moj članak i videozapis o Prepoznavanju slika s pločama K210 i dalje vrlo popularni i među vrhunskim rezultatima na YouTubeu i Googleu, odlučio sam ažurirati članak tako da uključi informacije o aXeleRate, okviru za AI baziran na Kerasu na Rub razvijam.

aXeleRate se u osnovi temelji na zbirci skripti koje sam koristio za obuku modela prepoznavanja slika/otkrivanja objekata - kombinirane u jedinstveni okvir i optimizirane za tijek rada na Google Colabu. Pogodnije je za korištenje i ažuriranije.

Staru verziju članka još uvijek možete vidjeti na steemit.com.

Korak 1: CNN i prijenosno učenje: neka teorija

CNN i prijenosno učenje: neka teorija
CNN i prijenosno učenje: neka teorija

Konvolucijske neuronske mreže ili CNN klasa su dubokih neuronskih mreža, koje se najčešće primjenjuju za analizu vizualnih slika. Na internetu postoji mnogo literature na tu temu, a ja ću dati neke veze u posljednjem dijelu članka. Ukratko, CNN možete zamisliti kao niz filtara primijenjenih na sliku, pri čemu svaki filtar traži određenu značajku na slici - na donjim slojevitim slojevima značajke su obično linije i jednostavni oblici, a na višim slojevima značajke može biti konkretniji, npr dijelovi tijela, određene teksture, dijelovi životinja ili biljaka itd. Prisutnost određenog skupa značajki može nam dati naznaku o tome što bi objekt na slici mogao biti. Brkovi, dva oka i crni nos? Mora da je mačka! Zeleno lišće, deblo stabla? Izgleda kao drvo!

Nadam se da ste sada stekli ideju o principu rada CNN -a. Uobičajeno, dubokoj neuronskoj mreži trebaju tisuće slika i sati treninga (ovisno o hardveru koji koristite za obuku) za "razvoj" filtera koji su korisni za prepoznavanje vrsta objekata koje želite. Ali postoji prečica.

Model osposobljen za prepoznavanje mnogo različitih uobičajenih predmeta (mačke, psi, kućanski aparati, prijevoz itd.) Već ima mnogo "razvijenih" korisnih filtera, pa nam to ne treba za učenje prepoznavanja osnovnih oblika i dijelova ponovno objekata. Možemo samo ponovno osposobiti posljednjih nekoliko slojeva mreže da prepoznaju određene klase objekata, koji su za nas važni. To se zove "prijenosno učenje". Trebate znatno manje podataka o treningu i računajte vrijeme s prijenosom učenja, jer trenirate samo posljednjih nekoliko slojeva mreže, sastavljenih možda od nekoliko stotina neurona.

Zvuči super, zar ne? Pogledajmo kako to implementirati.

Korak 2: Pripremite svoje okruženje

Pripremite svoje okruženje
Pripremite svoje okruženje

Postoje dva načina korištenja aXeleRate: lokalno pokretanje na Ubuntu stroju ili u Google Colabu. Za pokretanje u Google Colabu pogledajte ovaj primjer:

Razvrstavanje slika Colab Notebook

Lokalno osposobljavanje vašeg modela i izvoz za upotrebu s hardverskim ubrzanjem također je sada mnogo lakše.

Moje radno okruženje je Ubuntu 16.04, 64bit. Za pokretanje Ubuntu slike možete koristiti virtualni stroj jer nećemo koristiti GPU za obuku. S nekim izmjenama možete pokrenuti i skriptu za obuku u sustavu Windows, ali za pretvorbu modela morat ćete koristiti Linux sustav. Dakle, poželjno okruženje za izvršavanje ovog vodiča je Ubuntu 16.04, koji radi izvorno ili na virtualnom stroju.

Počnimo s instaliranjem Miniconde, upravitelja okoliša za Python. Stvorit ćemo izolirano okruženje, tako da nećemo slučajno ništa promijeniti u vašem sustavu Python okruženju.

Ovdje preuzmite instalacijski program

Nakon dovršetka instalacije stvorite novo okruženje:

conda create -n ml python = 3,7

Aktivirajmo novo okruženje

conda aktivira ml

Prefiks ispred vaše bash ljuske pojavit će se s imenom okoline, što znači da sada radite u tom okruženju.

Korak 3: Instalirajte AXeleRate i pokrenite testove

Instalirajte AXeleRate i pokrenite testove
Instalirajte AXeleRate i pokrenite testove

Instalirajte aXeleRate na svoj lokalni stroj pomoću

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

Za preuzimanje primjera pokrenite:

git klon

Možete pokrenuti brze testove sa test_training.py u mapi aXeleRate. Provodit će obuku i zaključivanje za svaku vrstu modela, spremati i pretvarati obučene modele. Budući da se radi samo o obuci za 5 epoha, a skup podataka je vrlo mali, nećete moći dobiti korisne modele, ali ova je skripta namijenjena samo za provjeru nedostataka pogrešaka.

Korak 4: Ponovno uvježbajte model, pretvorite Kerasov model u.kmodel

Ponovno uvježbajte model, pretvorite Kerasov model u.kmodel
Ponovno uvježbajte model, pretvorite Kerasov model u.kmodel

Za ovaj primjer igračke trenirat ćemo model za prepoznavanje Djeda Božićnjaka i Arduina Una. Očito možete odabrati druge klase. Preuzmite skup podataka odavde. Izradite kopiju datoteke classicfier.json u konfiguracijskoj mapi, a zatim je promijenite u skladu s konfiguracijskom datotekom na snimci zaslona - provjerite je li put do mapa za obuku i provjeru valjanosti točan!

Iz mape aXeleRate pokrenite sljedeću naredbu:

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

Obuka će započeti. Ako se točnost provjere valjanosti (naša validacijska metrika) ne poboljšava 20 epoha, obuka će se prerano prekinuti. Svaki put kad se točnost validacije poboljša, model se sprema u mapu projekta. Nakon završetka treninga, aXeleRate automatski pretvara najbolji model u određene formate - od sada možete odabrati "tflite", "k210" ili "edgetpu".

Korak 5: Pokrenite model na Sipeed Maix bitu

Pokrenite model na Sipeed Maix Bit -u
Pokrenite model na Sipeed Maix Bit -u
Pokrenite model na Sipeed Maix Bit -u
Pokrenite model na Sipeed Maix Bit -u
Pokrenite model na Sipeed Maix Bit -u
Pokrenite model na Sipeed Maix Bit -u

Postoje dva načina za pokretanje modela koji sada imate na hardveru Sipeed Maix: firmver za mikropython i Arduino IDE. Hardver Micropythona lakši je za upotrebu, ali zauzima značajan dio dostupne memorije, pa je modelu ostalo manje prostora. Arduino IDE je u osnovi C kod, koji je mnogo učinkovitiji i ima manji memorijski prostor. Moj model ima samo 1,9 MB, pa mu obje opcije odgovaraju. S Micropythonom možete koristiti modele velike do 2,9 Mb, za sve veće morate razmisliti o korištenju Arduino IDE -a.

Preuzmite OpenMV IDE odavde, a minimalni firmver za mikropiton odavde.

Snimite firmver alatom kflash_gui. Također možete odabrati snimanje treniranog modela kako bi trepnuo, kao što je prikazano na snimci zaslona. Ili je kopirajte na SD karticu (u tom slučaju kopirajte.kmodel u korijen SD kartice i umetnite SD karticu u Sipeed Maix Bit)

Otvorite OpenMV IDE i pritisnite gumb za povezivanje. Otvorite skriptu santa_uno.py iz mape example_scripts i pritisnite gumb Start. Trebali biste gledati prijenos uživo s kamere, a ako otvorite Serijski terminal dobit ćete vrhunski rezultat prepoznavanja slike s ocjenom pouzdanosti!

Za korištenje s Arduino IDE -om najprije morate slijediti postupak dodavanja Sipeed ploča Arduino IDE -u, koji je ovdje dokumentiran. Vaša Arduino IDE verzija mora biti najmanje 1.8.12. Nakon što ste dodali ploče, otvorite skicu mobilenet_v1_transfer_learning.ino i prenesite je na Sipeed Maix Bit. Promijenite naziv modela na SD kartici u "model" (ili napravite kopiju s ovim imenom). Imena oznaka možete promijeniti u names.cpp. Prikazat će stream kamere uživo na zaslonu Sipeed Maix zajedno s rezultatom prepoznavanja slike na vrhu.

Korak 6: Zaključci

Evo još nekoliko materijala za čitanje na temu CNN -a i prijenosnog učenja:

Prijenosno učenje pomoću Mobileneta i Kerasa Odlično objašnjenje prijenosa učenja, ovaj vodič koristi izmijenjenu verziju koda iz tog članka.

Mačke i psi i konvolucijske neuronske mreže Objašnjava osnove CNN -a i vizualizira neke od filtera. S mačkama!

Vježbajte, pretvarajte se, pokrenite MobileNet na Sipeed MaixPy i MaixDuino! Vodič od tima Sipeed o tome kako iz prve ruke trenirati razrede Mobilenet 1000 (bez prijenosa). Možete preuzeti njihov unaprijed obučeni model i isprobati ga!

Nadam se da možete koristiti znanje koje sada imate za izgradnju izvrsnih projekata sa strojnim vidom! Ploče Sipeed možete kupiti ovdje, one su među najjeftinijim opcijama dostupnim za ML na ugrađenim sustavima.

Preporučeni: