Kazalo:

Prepoznavanje slike s ploščami K210 in Arduino IDE/Micropython: 6 korakov (s slikami)
Prepoznavanje slike s ploščami K210 in Arduino IDE/Micropython: 6 korakov (s slikami)

Video: Prepoznavanje slike s ploščami K210 in Arduino IDE/Micropython: 6 korakov (s slikami)

Video: Prepoznavanje slike s ploščami K210 in Arduino IDE/Micropython: 6 korakov (s slikami)
Video: Prepoznavanje teksta sa slike online 2024, November
Anonim
Image
Image

Že sem napisal en članek o tem, kako zagnati predstavitve OpenMV na Sipeed Maix Bit in posnel tudi videoposnetek predstavitve odkrivanja predmetov s to ploščo. Eno od mnogih vprašanj, ki so si jih ljudje zastavili, je - kako lahko prepoznam predmet, za katerega nevronsko omrežje ni usposobljeno? Z drugimi besedami, kako narediti lasten klasifikator slik in ga zagnati s strojnim pospeševanjem.

To je razumljivo vprašanje, saj za vaš projekt verjetno ni treba prepoznati nekaterih generičnih predmetov, kot so mačke in psi ter letala. Želite prepoznati nekaj posebnega, na primer pasmo psa za ta avtomatska vrata hišnih ljubljenčkov ali rastlinsko vrsto za razvrščanje ali katero koli drugo odhajajočo aplikacijo, na katero lahko pomislite!

Pa te imam! V tem članku vas bom naučil, kako ustvariti lasten klasifikator slik po meri z učenjem prenosa v Kerasu, pretvoriti usposobljeni model v format.kmodel in ga zagnati na plošči Sipeed (lahko je katera koli plošča, Bit/Dock ali Go) z uporabo Micropythona ali Arduino IDE. In samo vaša domišljija bo omejila naloge, ki jih lahko opravite s tem znanjem.

UPDATE MAJ 2020: Ko sem videl, kako sta moj članek in videoposnetek o prepoznavanju slik s ploščami K210 še vedno zelo priljubljena in med najboljšimi rezultati v YouTubu in Googlu, sem se odločil posodobiti članek tako, da vključuje informacije o ogrodju AI za aXeleRate, ki temelji na Kerasu, na Edge razvijam.

aXeleRate v bistvu temelji na zbirki skriptov, ki sem jih uporabil za usposabljanje modelov prepoznavanja slik/zaznavanja predmetov - združenih v en sam okvir in optimiziranih za potek dela v Google Colabu. Je bolj priročen za uporabo in posodobljen.

Za staro različico članka si ga še vedno lahko ogledate na steemit.com.

1. korak: CNN in transferno učenje: nekaj teorije

CNN in transferno učenje: nekaj teorije
CNN in transferno učenje: nekaj teorije

Konvolucijska nevronska omrežja ali CNN so razred globokih nevronskih omrežij, ki se najpogosteje uporabljajo za analizo vizualnih posnetkov. Na internetu je na to temo veliko literature in v zadnjem delu članka bom dal nekaj povezav. Skratka, CNN si lahko predstavljate kot vrsto filtrov, uporabljenih za sliko, pri čemer vsak filter išče določeno lastnost na sliki - na spodnjih konvolucijskih plasteh so značilnosti običajno črte in preproste oblike, na višjih plasteh pa funkcije lahko bolj natančno, npr deli telesa, posebne teksture, deli živali ali rastlin itd. Prisotnost določenega nabora lastnosti nam lahko pove, kaj bi lahko bil predmet na sliki. Brki, dve očesi in črn nos? Mora biti mačka! Zeleni listi, deblo drevesa? Izgleda kot drevo!

Upam, da zdaj razumete načelo delovanja CNN. Običajno globoko nevronsko omrežje potrebuje na tisoče slik in ur ur usposabljanja (odvisno od strojne opreme, ki jo uporabljate za usposabljanje), da "razvije" filtre, ki so uporabni za prepoznavanje vrst predmetov, ki jih želite. Obstaja pa bližnjica.

Model, usposobljen za prepoznavanje veliko različnih skupnih predmetov (mačke, psi, gospodinjski aparati, transport itd.), Ima že veliko "uporabnih" filtrov, "razvitih", zato ga ne potrebujemo za učenje prepoznavanja osnovnih oblik in delov spet predmetov. Zadnjih nekaj plasti omrežja lahko samo znova usposobimo za prepoznavanje posebnih razredov predmetov, ki so za nas pomembni. To se imenuje "prenosno učenje". Potrebujete bistveno manj podatkov o usposabljanju in računate čas s prenosom učenja, saj trenirate le zadnjih nekaj plasti omrežja, sestavljenih morda iz nekaj sto nevronov.

Sliši se super, kajne? Poglejmo, kako ga izvajati.

2. korak: Pripravite svoje okolje

Pripravite svoje okolje
Pripravite svoje okolje

Obstajata dva načina uporabe aXeleRate: lokalno delovanje na računalniku Ubuntu ali Google Colab. Za zagon v Google Colabu si oglejte ta primer:

Razvrstitev slik Colab Notebook

Tudi lokalno usposabljanje vašega modela in izvoz za uporabo s strojnim pospeševanjem je zdaj tudi veliko lažje.

Moje delovno okolje je Ubuntu 16.04, 64bit. Za zagon slike Ubuntu lahko uporabite navidezni stroj, saj za usposabljanje ne bomo uporabljali grafičnega procesorja. Z nekaterimi spremembami lahko zaženete tudi skript za usposabljanje v sistemu Windows, vendar boste za pretvorbo modela morali uporabiti sistem Linux. Zato je za izvajanje te vadbe prednostno okolje Ubuntu 16.04, ki deluje doma ali v navideznem računalniku.

Začnimo z namestitvijo Miniconde, ki je upravitelj okolja za Python. Ustvarili bomo izolirano okolje, zato ne bomo pomotoma spremenili ničesar v vašem sistemskem okolju Python.

Namestitveni program prenesite tukaj

Ko je namestitev končana, ustvarite novo okolje:

conda create -n ml python = 3,7

Aktivirajmo novo okolje

conda aktiviraj ml

Pred vašo lupino bash se bo pojavila predpona z imenom okolja, ki označuje, da zdaj delate v tem okolju.

3. korak: Namestite AXeleRate in zaženite teste

Namestite AXeleRate in zaženite teste
Namestite AXeleRate in zaženite teste

Namestite aXeleRate na vaš lokalni računalnik z

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

Če želite prenesti primere, zaženite:

git clone

Hitre teste lahko zaženete s test_training.py v mapi aXeleRate. Izvajal bo usposabljanje in sklepanje za vsako vrsto modela, shranil in pretvoril usposobljene modele. Ker gre le za usposabljanje za 5 obdobij in je nabor podatkov zelo majhen, uporabnih modelov ne boste mogli dobiti, vendar je ta skript namenjen samo preverjanju odsotnosti napak.

4. korak: znova usposobite model, pretvorite model Keras v.kmodel

Ponovno usposobite model, pretvorite model Keras v.kmodel
Ponovno usposobite model, pretvorite model Keras v.kmodel

Za ta primer igrače bomo model usposabljali za prepoznavanje Božička in Arduina Una. Očitno lahko izberete druge razrede. Prenesite nabor podatkov od tukaj. Ustvarite kopijo datoteke classicfier.json v konfiguracijski mapi, nato pa jo ustrezno spremenite, podobno kot konfiguracijsko datoteko na posnetku zaslona - preverite, ali je pot do map za usposabljanje in preverjanje pravilna!

Iz mape aXeleRate zaženite naslednji ukaz:

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

Usposabljanje se bo začelo. Če se natančnost validacije (naša meritev preverjanja) ne izboljša za 20 obdobij, se bo usposabljanje predčasno ustavilo. Vsakič, ko se natančnost preverjanja izboljša, se model shrani v mapo projekta. Po končanem usposabljanju aXeleRate samodejno pretvori najboljši model v določene oblike - zaenkrat lahko izberete "tflite", "k210" ali "edgetpu".

5. korak: Zaženite model na bitju Sipeed Maix

Model zaženite na bitju Sipeed Maix
Model zaženite na bitju Sipeed Maix
Model zaženite na bitju Sipeed Maix
Model zaženite na bitju Sipeed Maix
Model zaženite na bitju Sipeed Maix
Model zaženite na bitju Sipeed Maix

Obstajata dva načina za zagon modela, ki ga imate zdaj na strojni opremi Sipeed Maix: vdelana programska oprema micropython in Arduino IDE. Strojna oprema Micropython je enostavnejša za uporabo, vendar zavzema pomemben del razpoložljivega pomnilnika, zato je modelu ostalo manj prostora. Arduino IDE je v bistvu koda C, ki je veliko učinkovitejša in ima manjši pomnilniški odtis. Moj model je samo 1,9 MB, zato obe možnosti delujeta zanj. Z Micropythonom lahko uporabite modele velike do 2,9 Mb, za vse večje pa morate razmisliti o uporabi Arduino IDE.

Od tu prenesite OpenMV IDE, od tu pa minimalno vdelano programsko opremo mikropitona.

Zapiši vdelano programsko opremo z orodjem kflash_gui. Izberete lahko tudi zapisovanje usposobljenega modela, kot je prikazano na posnetku zaslona. Ali pa jo kopirajte na kartico SD (v tem primeru kopirajte.kmodel v koren kartice SD in kartico SD vstavite v Sipeed Maix Bit)

Odprite OpenMV IDE in pritisnite gumb za povezavo. Odprite skript santa_uno.py iz mape example_scripts in pritisnite gumb Start. Videti bi morali prenos v živo s kamere, in če odprete serijski terminal, boste dobili najboljši rezultat prepoznavanja slike z oceno zaupanja!

Za uporabo z Arduino IDE morate najprej slediti postopku za dodajanje plošč Sipeed v Arduino IDE, ki je dokumentiran tukaj. Različica Arduino IDE mora biti vsaj 1.8.12. Ko dodate plošče, odprite skico mobilenet_v1_transfer_learning.ino in jo naložite v Sipeed Maix Bit. Spremenite ime modela na kartici SD v "model" (ali naredite kopijo s tem imenom). Imena oznak lahko spremenite v names.cpp. Prikazal bo tok kamere v živo na zaslonu Sipeed Maix skupaj z vrhunskim rezultatom prepoznavanja slike.

Korak 6: Zaključki

Tukaj je še nekaj gradiv, ki jih lahko preberete na temo CNN -jev in prenosnega učenja:

Prenos učenja z uporabo Mobileneta in Kerasa Odlična razlaga prenosa učenja, ta vadnica uporablja spremenjeno različico kode iz tega članka.

Mačke in psi ter konvolucijske nevronske mreže Pojasni osnove CNN -jev in vizualizira nekatere filtre. Z mačkami!

Trenirajte, spremenite, zaženite MobileNet na Sipeed MaixPy in MaixDuino! Vadnica ekipe Sipeed o tem, kako usposobiti razrede Mobilenet 1000 iz nič (brez prenosa). Lahko prenesete njihov vnaprej usposobljeni model in ga preizkusite!

Upam, da lahko svoje znanje, ki ga imate zdaj, uporabite za izdelavo čudovitih projektov s strojnim vidom! Plošče Sipeed lahko kupite tukaj, so med najcenejšimi možnostmi, ki so na voljo za ML na vgrajenih sistemih.

Priporočena: