Sisällysluettelo:

Kuvan tunnistus K210 -levyillä ja Arduino IDE/Micropython: 6 vaihetta (kuvilla)
Kuvan tunnistus K210 -levyillä ja Arduino IDE/Micropython: 6 vaihetta (kuvilla)

Video: Kuvan tunnistus K210 -levyillä ja Arduino IDE/Micropython: 6 vaihetta (kuvilla)

Video: Kuvan tunnistus K210 -levyillä ja Arduino IDE/Micropython: 6 vaihetta (kuvilla)
Video: Ar kuvan tunnistus pacman kuutio pyörii. 2024, Kesäkuu
Anonim
Image
Image

Kirjoitin jo yhden artikkelin OpenMV -demojen suorittamisesta Sipeed Maix Bitillä ja tein myös videon objektin havaitsemisdemosta tällä levyllä. Yksi monista kysymyksistä, joita ihmiset ovat esittäneet, on - kuinka voin tunnistaa kohteen, johon hermoverkkoa ei ole koulutettu? Toisin sanoen kuinka tehdä oma kuvan luokittelija ja käyttää sitä laitteistokiihdytyksellä.

Tämä on ymmärrettävä kysymys, koska sinun ei luultavasti tarvitse tunnistaa joitakin yleisiä esineitä, kuten kissoja, koiria ja lentokoneita. Haluat tunnistaa jotain erityistä, esimerkiksi koiran rodun automaattista lemmikkieläinten ovea varten, kasvilajin lajittelua varten tai muita poistuvia sovelluksia, joita voit ajatella!

Minä sain sinut! Tässä artikkelissa opetan sinulle, miten voit luoda oman mukautetun kuvien luokittelijan siirto -opetuksella Kerasissa, muuntaa koulutetun mallin.kmodel -muotoon ja käyttää sitä Sipeed -kortilla (voi olla mikä tahansa levy, Bit/Dock tai Go) Micropython- tai Arduino IDE. Ja vain mielikuvitus rajoittaa tehtäviä, joita voit tehdä tällä tiedolla.

PÄIVITTÄMINEN TOUKOKUU 2020: Nähdessäni, kuinka artikkelini ja videoni K210-levyjen kuvantunnistuksesta ovat edelleen erittäin suosittuja ja YouTuben ja Googlen huipputulosten joukossa, päätin päivittää artikkelin sisältämään tiedot aXeleRate, Keras-pohjaisesta AI-kehyksestä Edge I kehittyy.

aXeleRate perustuu pohjimmiltaan kokoelmaan skriptejä, joita käytin kuvantunnistus-/objektin havaitsemismallien kouluttamiseen - yhdistettynä yhdeksi kehykseksi ja optimoitu Google Colabin työnkulkua varten. Se on kätevämpi käyttää ja ajan tasalla.

Artikkelin vanha versio näkyy edelleen osoitteessa steemit.com.

Vaihe 1: CNN ja siirto -oppiminen: joitakin teorioita

CNN ja siirto -oppiminen: jotain teoriaa
CNN ja siirto -oppiminen: jotain teoriaa

Convolutional Neural Networks tai CNN on syvien hermoverkkojen luokka, jota käytetään yleisimmin visuaalisten kuvien analysointiin. Internetissä on paljon kirjallisuutta aiheesta ja annan joitain linkkejä artikkelin viimeiseen osaan. Lyhyesti sanottuna voit ajatella CNN: ää sarjana suodattimia, joita käytetään kuvassa, jokainen suodatin etsii kuvassa tiettyä ominaisuutta - alemmilla konvoluutiokerroksilla ominaisuudet ovat yleensä viivoja ja yksinkertaisia muotoja ja ylemmillä kerroksilla ominaisuuksia voi olla tarkempi, esim kehon osat, tietyt tekstuurit, eläinten tai kasvien osat jne. Tiettyjen ominaisuuksien olemassaolo voi antaa meille vihjeen siitä, mikä kuvassa oleva esine voisi olla. Viikset, kaksi silmää ja musta nenä? Täytyy olla kissa! Vihreät lehdet, puunrunko? Näyttää puulta!

Toivottavasti saat nyt käsityksen CNN: n toimintaperiaatteesta. Normaalisti syvä hermoverkko tarvitsee tuhansia kuvia ja harjoitustuntia (riippuu laitteistosta, jota käytät harjoitteluun) "kehittääksesi" suodattimia, jotka ovat hyödyllisiä haluttujen kohteiden tunnistamisessa. Mutta on olemassa pikakuvake.

Mallissa, joka on koulutettu tunnistamaan monia erilaisia yhteisiä esineitä (kissat, koirat, kodinkoneet, kuljetus jne.), On jo paljon hyödyllisiä suodattimia "kehitetty", joten meidän ei tarvitse oppia tunnistamaan perusmuotoja ja osia esineistä uudelleen. Voimme vain kouluttaa verkon viimeiset kerrokset uudelleen tunnistamaan tietyt meille tärkeät objektiluokat. Tätä kutsutaan "siirto -oppimiseksi". Tarvitset huomattavasti vähemmän harjoitustietoa ja lasket aikaa siirto -oppimisella, koska harjoittelet vain viimeisiä verkkokerroksia, jotka koostuvat ehkä muutamasta sadasta neuronista.

Kuulostaa mahtavalta, eikö? Katsotaan kuinka se toteutetaan.

Vaihe 2: Valmistele ympäristösi

Valmista ympäristösi
Valmista ympäristösi

Voit käyttää aXeleRatea kahdella tavalla: käynnissä paikallisesti Ubuntu -koneella tai Google Colabissa. Jos haluat käyttää Google Colabia, katso tämä esimerkki:

Kuvien luokittelu Colab -muistikirja

Mallin kouluttaminen paikallisesti ja sen vieminen laitteistokiihdytykseen on nyt myös paljon helpompaa.

Työympäristöni on Ubuntu 16.04, 64bit. Voit käyttää virtuaalikonetta Ubuntu -kuvan suorittamiseen, koska emme käytä GPU: ta koulutukseen. Joillakin muutoksilla voit myös suorittaa harjoitusskriptin Windowsissa, mutta mallin muuntamiseen sinun on käytettävä Linux -järjestelmää. Joten suositeltava ympäristö tämän opetusohjelman suorittamiseen on Ubuntu 16.04, joka toimii natiivina tai virtuaalikoneessa.

Aloitetaan asentamalla Miniconda, joka on Pythonin ympäristöpäällikkö. Luomme eristetyn ympäristön, joten emme vahingossa muuta mitään järjestelmän Python -ympäristössä.

Lataa asennusohjelma täältä

Kun asennus on valmis, luo uusi ympäristö:

conda create -n ml python = 3.7

Aktivoidaan uusi ympäristö

conda aktivoi ml

Etuliite ennen bash -kuorta tulee näkyviin ympäristön nimen kanssa, mikä osoittaa, että työskentelet nyt kyseisessä ympäristössä.

Vaihe 3: Asenna AXeleRate ja suorita testit

Asenna AXeleRate ja suorita testit
Asenna AXeleRate ja suorita testit

Asenna aXeleRate paikalliselle koneellesi

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

Lataa esimerkkejä suorittamalla:

git -klooni

Voit suorittaa pikatestejä testien_training.py avulla aXeleRate -kansiossa. Se suorittaa koulutusta ja päätelmiä kullekin mallityypille, tallentaa ja muuntaa koulutetut mallit. Koska se on vain viiden aikakauden koulutus ja tietojoukko on hyvin pieni, et voi saada hyödyllisiä malleja, mutta tämä skripti on tarkoitettu vain virheiden puuttumisen tarkistamiseen.

Vaihe 4: Kouluta malli uudelleen, muunna Keras-malli.kmodeliksi

Kouluta malli uudelleen, muunna Keras-malli.kmodeliksi
Kouluta malli uudelleen, muunna Keras-malli.kmodeliksi

Tässä leluesimerkissä opetamme mallia tunnistamaan joulupukin ja Arduino Unon. On selvää, että voit valita muita luokkia. Lataa tietojoukko täältä. Luo kopio classifier.json -tiedostosta määrityskansioon ja muuta sitä vastaavasti, kuten kuvakaappauksessa oleva määritystiedosto - varmista, että koulutus- ja validointikansioiden polku on oikea!

Suorita seuraava komento aXeleRate -kansiosta:

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

Koulutus alkaa. Jos validointitarkkuus (validointimittarimme) ei parane 20 aikakauden aikana, koulutus keskeytyy ennenaikaisesti. Aina kun validointitarkkuus paranee, malli tallennetaan projektikansioon. Harjoituksen päätyttyä aXeleRate muuntaa automaattisesti parhaan mallin tiettyyn muotoon - voit valita "tflite", "k210" tai "edgetpu".

Vaihe 5: Suorita malli Sipeed Maix Bitillä

Suorita malli Sipeed Maix Bitillä
Suorita malli Sipeed Maix Bitillä
Suorita malli Sipeed Maix Bitillä
Suorita malli Sipeed Maix Bitillä
Suorita malli Sipeed Maix Bitillä
Suorita malli Sipeed Maix Bitillä

Nykyinen malli voidaan käyttää kahdella tavalla Sipeed Maix -laitteistossa: micropython -laiteohjelmisto ja Arduino IDE. Micropython -laitteistoa on helpompi käyttää, mutta se vie huomattavan osan käytettävissä olevasta muistista, joten mallille jää vähemmän tilaa. Arduino IDE on pohjimmiltaan C -koodi, joka on paljon tehokkaampi ja jolla on pienempi muistijalanjälki. Mallini on vain 1,9 Mt, joten molemmat vaihtoehdot toimivat sen puolesta. Voit käyttää jopa 2,9 Mt: n malleja Micropythonin kanssa, mikä tahansa suurempi on harkittava Arduino IDE: n käyttöä.

Lataa OpenMV IDE täältä ja minimaalinen micropython -laiteohjelmisto täältä.

Polta laiteohjelmisto kflash_gui -työkalulla. Voit myös polttaa koulutetun mallin salamaan, kuten kuvakaappauksessa näkyy. Tai kopioi se SD -kortille (kopioi siinä tapauksessa.kmodel SD -kortin juureen ja aseta SD -kortti Sipeed Maix Bitiin)

Avaa OpenMV IDE ja paina yhdistämispainiketta. Avaa santa_uno.py -skripti example_scripts -kansiosta ja paina Käynnistä -painiketta. Sinun pitäisi nähdä livestriimi kamerasta, ja jos avaat sarjapäätteen, saat parhaan kuvan tunnistustuloksen luottamuspisteellä!

Jos haluat käyttää Arduino IDE: tä, sinun on ensin noudatettava Sipeed -levyjen lisäämistä Arduino IDE: hen, joka on kuvattu tässä. Arduino IDE -versiosi on oltava vähintään 1.8.12. Kun olet lisännyt levyt, avaa mobilenet_v1_transfer_learning.ino -luonnos ja lataa se Sipeed Maix Bitiin. Muuta SD -kortilla olevan mallin nimeksi "malli" (tai kopioi tämä nimi). Voit muuttaa nimien nimiä osoitteessa names.cpp. Se näyttää kameran suoran lähetyksen Sipeed Maix -näytössä yhdessä parhaan kuvan tunnistustuloksen kanssa.

Vaihe 6: Johtopäätökset

Tässä on lisää materiaalia luettavaksi CNN -aiheista ja siirto -oppimisesta:

Siirron oppiminen Mobilenetin ja Kerasin avulla Tämä opetusohjelma käyttää erinomaista selitystä siirto -oppimiselle, ja siinä käytetään muokattua versiota kyseisen artikkelin koodista.

Kissat ja koirat sekä kehittyneet hermoverkot Selittää CNN: ien takana olevat perusteet ja visualisoi joitain suodattimia. Kissojen kanssa!

Harjoittele, muunna, suorita MobileNet Sipeed MaixPy- ja MaixDuino -sovelluksissa! Sipeed -tiimin opetusohjelma Mobilenet 1000 -luokkien kouluttamisesta tyhjästä (ei siirto -oppimista). Voit ladata esikoulutetun mallin ja kokeilla sitä!

Toivottavasti voit käyttää nykyistä tietämystäsi rakentaaksesi mahtavia projekteja konenäön avulla! Voit ostaa Sipeed -levyjä täältä, ne ovat halvimpia vaihtoehtoja ML: lle sulautetuissa järjestelmissä.

Suositeltava: