INHOUDSOPGAWE:

Beeldherkenning met K210 -borde en Arduino IDE/Micropython: 6 stappe (met foto's)
Beeldherkenning met K210 -borde en Arduino IDE/Micropython: 6 stappe (met foto's)

Video: Beeldherkenning met K210 -borde en Arduino IDE/Micropython: 6 stappe (met foto's)

Video: Beeldherkenning met K210 -borde en Arduino IDE/Micropython: 6 stappe (met foto's)
Video: Méér met beeldherkenning 2024, Junie
Anonim
Image
Image

Ek het al 'n artikel geskryf oor hoe om OpenMV -demo's op Sipeed Maix Bit uit te voer, en ek het ook 'n video gemaak van 'n voorwerpopsporing -demo met hierdie bord. Een van die vele vrae wat mense gevra het, is: hoe kan ek 'n voorwerp herken waarvoor die neurale netwerk nie opgelei is nie? Met ander woorde, hoe om u eie beeldklassifiseerder te maak en dit met hardewareversnelling te laat loop.

Dit is 'n verstaanbare vraag, want vir u projek hoef u waarskynlik nie 'n paar algemene voorwerpe, soos katte en honde en vliegtuie, te herken nie. U wil iets spesifiek herken, byvoorbeeld 'n hondras vir die outomatiese troeteldierdeur, of 'n plantsoort om te sorteer, of ander opwindende toepassings waaraan u kan dink!

Ek het jou! In hierdie artikel sal ek u leer hoe u u eie beeldklassifikator met oordragleer in Keras kan skep, die opgeleide model kan omskakel in.kmodel -formaat en dit op Sipeed -bord (kan op enige bord, Bit/Dock of Go) met Micropython of Arduino IDE. En slegs u verbeelding is die beperking op die take wat u met hierdie kennis kan doen.

UPDATE MEI 2020: Toe ek sien hoe my artikel en video oor beeldherkenning met K210-borde nog steeds baie gewild is, en onder die beste resultate op YouTube en Google, het ek besluit om die artikel op te dateer met die inligting oor aXeleRate, Keras-gebaseerde raamwerk vir AI op die Edge ontwikkel ek.

aXeleRate is in wese gebaseer op die versameling skrifte wat ek gebruik het vir die opleiding van beeldherkennings-/objekopsporingsmodelle - gekombineer tot 'n enkele raamwerk en geoptimaliseer vir werkstroom op Google Colab. Dit is geriefliker om te gebruik en meer op datum.

Vir die ou weergawe van die artikel kan u dit steeds op steemit.com sien.

Stap 1: CNN en oordragleer: 'n paar teorieë

CNN en oordragleer: 'n paar teorieë
CNN en oordragleer: 'n paar teorieë

Konvolutionele neurale netwerke of CNN is 'n klas diep neurale netwerke wat die meeste gebruik word vir die ontleding van visuele beelde. Daar is baie literatuur op die internet oor die onderwerp, en ek gee 'n paar skakels in die laaste deel van die artikel. Kortom, u kan CNN beskou as 'n reeks filters, toegepas op die prentjie, elke filter soek 'n spesifieke funksie in die prentjie - op die onderste konvolusionele lae is die kenmerke gewoonlik lyne en eenvoudige vorms en op die hoër lae die funksies kan meer spesifiek wees, bv liggaamsdele, spesifieke teksture, dele van diere of plante, ens. 'n Aanwesigheid van sekere funksies kan ons 'n idee gee van wat die voorwerp in die beeld kan wees. Bakke, twee oë en 'n swart neus? Moet kat wees! Groen blare, 'n boomstam? Lyk soos 'n boom!

Ek hoop dat u nou die idee kry van die werkbeginsel van CNN. Normaalweg benodig 'n diep neurale netwerk duisende beelde en ure opleidingstyd (hang af van die hardeware wat u vir opleiding gebruik) om filters te "ontwikkel" wat nuttig is om die tipe voorwerpe wat u wil herken. Maar daar is 'n kortpad.

'N Model wat opgelei is om baie verskillende voorwerpe (katte, honde, huishoudelike toestelle, vervoer, ens.) Te herken, het al baie nuttige filters wat' ontwikkel 'is, sodat ons dit nie nodig het om die basiese vorms en dele te herken nie. van die voorwerpe weer. Ons kan die laaste paar lae van die netwerk net weer oplei om spesifieke klasse voorwerpe te herken, wat vir ons belangrik is. Dit word 'oordragleer' genoem. U benodig aansienlik minder opleidingsdata en bereken tyd met oordragleer, aangesien u slegs die laaste paar lae van die netwerk oefen, wat bestaan uit 'n paar honderd neurone.

Klink wonderlik, reg? Kom ons kyk hoe u dit kan implementeer.

Stap 2: Berei u omgewing voor

Berei u omgewing voor
Berei u omgewing voor

Daar is twee maniere om aXeleRate te gebruik: plaaslik op Ubuntu -masjien of in Google Colab. Kyk na hierdie voorbeeld om in Google Colab te werk:

Beeldklassifikasie Colab Notebook

Dit is ook baie makliker om u model plaaslik op te lei en uit te voer om met hardewareversnelling gebruik te word.

My werksomgewing is Ubuntu 16.04, 64bit. U kan 'n virtuele masjien gebruik om 'n Ubuntu -beeld uit te voer, aangesien ons nie GPU vir opleiding sal gebruik nie. Met 'n paar wysigings kan u ook die opleidingsskrif op Windows uitvoer, maar vir modelomskakeling moet u 'n Linux -stelsel gebruik. Die beste omgewing vir u om hierdie tutoriaal uit te voer, is dus Ubuntu 16.04, wat oorspronklik of in 'n virtuele masjien werk.

Kom ons begin met die installering van Miniconda, wat omgewingsbestuurder vir Python is. Ons sal 'n geïsoleerde omgewing skep, sodat ons niks per ongeluk in u stelsel -Python -omgewing sal verander nie.

Laai die installeerder hier af

Skep 'n nuwe omgewing nadat die installasie voltooi is:

conda create -n ml luislang = 3.7

Laat ons die nuwe omgewing aktiveer

conda aktiveer ml

'N Voorvoegsel voor u bash -dop verskyn met die naam van die omgewing, wat aandui dat u nou in die omgewing werk.

Stap 3: Installeer AXeleRate en voer toetse uit

Installeer AXeleRate en voer toetse uit
Installeer AXeleRate en voer toetse uit

Installeer aXeleRate op u plaaslike masjien met

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

Om voorbeelde te laai, hardloop:

git -kloon

U kan vinnige toetse met tests_training.py in 'n aXeleRate -lêergids uitvoer. Dit sal opleiding en afleiding vir elke modeltipe uitvoer, opgeleide modelle stoor en omskakel. Aangesien dit slegs opleiding vir 5 tydperke is en die datastel baie klein is, kan u nie nuttige modelle kry nie, maar hierdie skrif is slegs bedoel om te kyk of daar nie foute is nie.

Stap 4: Leer die model weer op, skakel Keras-model om na.kmodel

Leer die model weer op, omskep Keras-model in.kmodel
Leer die model weer op, omskep Keras-model in.kmodel

Vir hierdie speelgoedvoorbeeld sal ons die model oplei om Kersvader en Arduino Uno te herken. Uiteraard kan u ander klasse kies. Laai die datastel hier af. Skep 'n afskrif van die classifier.json -lêer in die config -lêergids en verander dit dienooreenkomstig, soortgelyk aan die config -lêer in die skermkiekie - maak seker dat die pad na die opleidings- en bekragtigingsvouers korrek is!

Voer die volgende opdrag uit die aXeleRate -lêergids uit:

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

Die opleiding sal begin. As die validasie -akkuraatheid (ons validasie -metriek) gedurende 20 tydperke nie verbeter nie, stop die opleiding voortydig. Elke keer as die akkuraatheid van validering verbeter, word die model in die projekmap gestoor. Nadat die opleiding verby is, skakel aXeleRate die beste model outomaties om in gespesifiseerde formate - u kan vanaf nou "tflite", "k210" of "edgetpu" kies.

Stap 5: Begin die model op Sipeed Maix Bit

Begin die model op Sipeed Maix Bit
Begin die model op Sipeed Maix Bit
Begin die model op Sipeed Maix Bit
Begin die model op Sipeed Maix Bit
Begin die model op Sipeed Maix Bit
Begin die model op Sipeed Maix Bit

Daar is twee maniere om die model wat u nou op Sipeed Maix -hardeware het, te laat loop: mikropython -firmware en Arduino IDE. Micropython -hardeware is makliker om te gebruik, maar dit beslaan 'n aansienlike deel van die beskikbare geheue, so daar is minder ruimte oor vir die model. Arduino IDE is basies C -kode, wat baie meer doeltreffend is en 'n kleiner geheue -voetspoor het. My model is net 1.9Mb, so beide opsies werk daarvoor. U kan modelle tot 2,9 Mb met Micropython gebruik, vir alles wat groter is, moet u dit oorweeg om Arduino IDE te gebruik.

Laai OpenMV IDE hier af en minimale mikropython -firmware van hier af.

Brand die firmware met kflash_gui -instrument. U kan ook kies om die opgeleide model te flits, soos in die skermkiekie getoon. Of kopieer dit na die SD -kaart (kopieer in die geval.kmodel na die wortel van 'n SD -kaart en plaas die SD -kaart in Sipeed Maix Bit)

Maak OpenMV IDE oop en druk die verbindingsknoppie. Maak die santa_uno.py -script oop uit die voorbeeld_scripts -lêergids en druk die Start -knoppie. U behoort 'n regstreekse stroom vanaf die kamera te sien, en as u Serial Terminal oopmaak, kry u die beste beeldherkenningsresultaat met die vertroue telling!

Om met Arduino IDE te gebruik, moet u eers die prosedure volg om Sipeed -borde by Arduino IDE te voeg, wat hier gedokumenteer word. U Arduino IDE -weergawe moet ten minste 1.8.12 wees. Nadat u die borde bygevoeg het, maak die mobilenet_v1_transfer_learning.ino -skets oop en laai dit op na Sipeed Maix Bit. Verander die naam van die model op die SD -kaart na "model" (of maak 'n afskrif met hierdie naam). U kan die etiketname in names.cpp verander. Dit wys die lewendige kamerastroom op die Sipeed Maix -skerm saam met die beste beeldherkenningsresultaat.

Stap 6: Gevolgtrekkings

Hier is nog 'n paar materiaal om te lees oor die onderwerp van CNN's en oordragleer:

Oordragleer met behulp van Mobilenet en Keras Hierdie tutoriaal is 'n uitstekende verduideliking van oordragleer en gebruik 'n aangepaste weergawe van die kode uit daardie artikel.

Katte en honde en konvolusionele neurale netwerke Verduidelik die basiese beginsels agter CNN's en visualiseer sommige van die filters. Met katte!

Trein, omskep, bestuur MobileNet op Sipeed MaixPy en MaixDuino! 'N Opleiding van die Sipeed -span oor hoe om Mobilenet 1000 -klasse van nuuts af op te lei (geen oordragleer nie). U kan hul vooraf opgeleide model aflaai en dit probeer!

Hoop dat u die kennis wat u nou het, kan gebruik om wonderlike projekte met masjienvisie te bou! U kan Sipeed -borde hier koop; dit is een van die goedkoopste opsies wat beskikbaar is vir ML op ingebedde stelsels.

Aanbeveel: