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, Novembar
Anonim
Image
Image

Već sam napisao jedan članak o tome kako pokrenuti OpenMV demonstracije na Sipeed Maix Bit -u, 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, jer za vaš projekt vjerojatno ne morate prepoznati neke generičke objekte, poput mačaka i pasa te aviona. Želite prepoznati nešto posebno, 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 Sipeed ploči (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 MAJ 2020: Vidjevši kako su moj članak i video 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, Keras-ovom okviru za AI na Ivice razvijam.

aXeleRate se, u osnovi, temelji na zbirci skripti koje sam koristio za obuku modela prepoznavanja slika/otkrivanja objekata - kombiniranih u jedinstveni okvir i optimiziranih za tijek rada na Google Colabu. Pogodniji je za upotrebu i ažuriraniji.

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

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

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

Konvolucijske neuronske mreže ili CNN je klasa dubokih neuronskih mreža, koja se najčešće primjenjuje 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 filtera, primijenjenih na sliku, pri čemu svaki filter 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 mogu biti konkretniji, npr dijelovi tijela, određene teksture, dijelovi životinja ili biljaka itd. Prisustvo određenog skupa obilježja može nam dati trag o tome šta bi objekt na slici mogao biti. Brkovi, dva oka i crni nos? Mora da je mačka! Zeleno lišće, stablo? Izgleda kao drvo!

Nadam se da ste sada stekli ideju o principu rada CNN -a. Obično dubokoj neuronskoj mreži trebaju hiljade slika i sati vježbanja (ovisno o hardveru koji koristite za obuku) za "razvoj" filtera koji su korisni za prepoznavanje vrsta objekata koje želite. Ali postoji prečica.

Model obučen 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 ponovo objekata. Možemo samo ponovo osposobiti posljednjih nekoliko slojeva mreže da prepoznaju određene klase objekata, koji su za nas važni. To se zove "transferno učenje". Potrebno vam je znatno manje podataka o obuci i računajte vrijeme s prijenosom učenja, jer vježbate samo posljednjih nekoliko slojeva mreže, sastavljenih možda od nekoliko stotina neurona.

Zvuči odlično, zar ne? Pogledajmo kako to primijeniti.

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 mašini ili u Google Colabu. Za pokretanje u Google Colabu pogledajte ovaj primjer:

Klasifikacija slike 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 virtualnu mašinu jer nećemo koristiti GPU za obuku. Uz neke izmjene, možete pokrenuti i skriptu za obuku na Windowsima, ali za konverziju modela morat ćete koristiti Linux sistem. Dakle, poželjno okruženje za izvršavanje ovog vodiča je Ubuntu 16.04, koji radi izvorno ili na virtualnoj mašini.

Počnimo s instaliranjem Miniconde, menadžera okruženja za Python. Stvorit ćemo izolirano okruženje, tako da nećemo slučajno ništa promijeniti u vašem sistemskom 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 prije 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 svoju lokalnu mašinu pomoću

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

Da biste preuzeli primjere, pokrenite:

git clone

Možete pokrenuti brze testove sa test_training.py u folderu aXeleRate. Pokretat će obuku i zaključivanje za svaki tip 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 grešaka.

Korak 4: Ponovno obučite model, Pretvorite Keras 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 Mraza i Arduino Uno. Očigledno je da možete izabrati druge klase. Preuzmite skup podataka odavde. Napravite kopiju datoteke klasifier.json u konfiguracijskoj mapi, a zatim je promijenite u skladu s konfiguracijskom datotekom na snimku zaslona - provjerite je li put do mapa za obuku i provjeru valjanosti ispravan!

Pokrenite sljedeću naredbu iz mape aXeleRate:

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

Obuka će početi. Ako se tačnost provjere valjanosti (naša metrika provjere valjanosti) ne poboljšava 20 epoha, obuka će se prerano prekinuti. Svaki put kada se tačnost validacije poboljša, model se sprema u fasciklu projekta. Nakon završetka obuke, aXeleRate automatski konvertuje najbolji model u određene formate - od sada možete izabrati "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 Sipeed Maix hardveru: mikropython firmver i Arduino IDE. Micropython hardver je lakši 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 efikasniji 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 mikropitona odavde.

Narežite firmver pomoću alata kflash_gui. Takođe možete izabrati da snimite trenirani model da treperi, kao što je prikazano na snimku ekrana. Ili ga 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 dugme za povezivanje. Otvorite skriptu santa_uno.py iz mape example_scripts i pritisnite dugme 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, prvo 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 postavite 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 ekranu Sipeed Maix zajedno s rezultatom prepoznavanja slike na vrhu.

Korak 6: Zaključci

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

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

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

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

Nadam se da možete iskoristiti svoje znanje koje sada imate za izgradnju sjajnih projekata s mašinskim vidom! Ovdje možete kupiti Sipeed ploče, one su među najjeftinijim opcijama dostupnim za ML na ugrađenim sistemima.

Preporučuje se: