Kazalo:

Odkrivanje predmetov s ploščami Sipeed MaiX (Kendryte K210): 6 korakov
Odkrivanje predmetov s ploščami Sipeed MaiX (Kendryte K210): 6 korakov

Video: Odkrivanje predmetov s ploščami Sipeed MaiX (Kendryte K210): 6 korakov

Video: Odkrivanje predmetov s ploščami Sipeed MaiX (Kendryte K210): 6 korakov
Video: Ричард Долан: Записки Уилсона и Боб Лазар 2024, Julij
Anonim
Image
Image

Kot nadaljevanje prejšnjega članka o prepoznavanju slik s ploščami Sipeed MaiX sem se odločil, da napišem še eno vadnico, ki se bo osredotočila na odkrivanje predmetov. Pred kratkim se je pojavilo nekaj zanimive strojne opreme s čipom Kendryte K210, vključno z Seeed AI Hat za Edge Computing, M5StickV sklada M5 in HuskyLens DFRobot (čeprav ima ta lastniško vdelano programsko opremo in je bolj namenjena popolnim začetnikom). Zaradi nizke cene je Kendryte K210 pritegnila ljudi, ki želijo svojim projektom dodati računalniški vid. Toda kot običajno pri kitajskih izdelkih strojne opreme, tehnične podpore primanjkuje in to poskušam izboljšati s svojimi članki in videoposnetki. Vendar ne pozabite, da nisem član ekipe razvijalcev Kendryte ali Sipeed in ne morem odgovoriti na vsa vprašanja v zvezi z njihovim izdelkom.

S tem v mislih začnimo! Začeli bomo s kratkim (in poenostavljenim) pregledom delovanja CNN modelov za prepoznavanje objektov.

UPDATE MAJ 2020: Ko sem videl, kako sta moj članek in videoposnetek o odkrivanju objektov 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 aXeleRate, ogrodju za umetno inteligenco, ki temelji na Kerasu 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.

Korak 1: Razložena arhitektura modela odkrivanja objektov

Pojasnjena arhitektura modela odkrivanja objektov
Pojasnjena arhitektura modela odkrivanja objektov
Pojasnjena arhitektura modela odkrivanja objektov
Pojasnjena arhitektura modela odkrivanja objektov

Modeli za prepoznavanje slik (ali klasifikacijo slik) vzamejo celotno sliko kot vhodno vrednost in prikažejo seznam verjetnosti za vsak razred, ki ga poskušamo prepoznati. Zelo uporabno je, če predmet, ki nas zanima, zaseda velik del slike in nam ni mar za njegovo lokacijo. Kaj pa, če naš projekt (recimo kamera za sledenje obrazom) od nas ne zahteva le znanja o vrsti predmeta na sliki, ampak tudi o njegovih koordinatah. Kaj pa projekt, ki zahteva odkrivanje več predmetov (na primer za štetje)?

Tukaj pridejo na vrsto modeli zaznavanja objektov. V tem članku bomo uporabljali arhitekturo YOLO (pogledate samo enkrat) in razlago osredotočili na notranjo mehaniko te posebne arhitekture.

Poskušamo ugotoviti, kateri predmeti so na sliki in kakšne so njihove koordinate. Ker strojno učenje ni magija in ni "misleči stroj", ampak le algoritem, ki s pomočjo statistike optimizira funkcijo (nevronsko omrežje) za boljše reševanje določenega problema. To težavo moramo parafrazirati, da bo bolj "optimizirana". Tu bi bil naiven pristop, da bi algoritem zmanjšal izgubo (razliko) med njegovo napovedjo in pravilnimi koordinatami objekta. To bi delovalo zelo dobro, če imamo na sliki le en predmet. Za več objektov imamo drugačen pristop - dodamo mrežo in naredimo, da naše omrežje napoveduje prisotnost (ali odsotnost) predmetov v vsaki mreži. Sliši se odlično, a kljub temu za omrežje pušča preveč negotovosti - kako izvesti napoved in kaj storiti, če je v eni mrežni celici več predmetov s središčem? Dodati moramo še eno omejitev - tako imenovana sidra. Sidra so začetne velikosti (širina, višina), od katerih se bodo nekatere (najbližje velikosti predmeta) spremenile v velikost predmeta - z uporabo nekaterih izhodov iz nevronskega omrežja (končni zemljevid lastnosti).

Torej, tukaj je pogled na najvišji ravni o tem, kaj se dogaja, ko arhitekturno nevronsko omrežje YOLO izvede zaznavanje objekta na sliki. Glede na značilnosti, ki jih odkrije omrežje za odvzem elementov, je za vsako mrežno celico narejen niz napovedi, ki vključuje odmik sidra, verjetnost sidranja in razred sidra. Nato z nizko verjetnostjo zavržemo napovedi in voila!

2. korak: Pripravite okolje

Pripravite okolje
Pripravite okolje

aXeleRate temelji na čudovitem projektu penny4860, detektorja yolo-v2 SVHN. aXeleRate to izvedbo detektorja YOLO v Kerasu popelje na naslednjo stopnjo in s svojim priročnim konfiguracijskim sistemom izvaja usposabljanje in pretvorbo omrežij za prepoznavanje slik/odkrivanje predmetov in segmentacijo slik z različnimi podlogami.

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

Prenosnik Colab za odkrivanje objektov PASCAL-VOC

Lokalno usposabljanje vašega modela in izvoz za uporabo s strojnim pospeševanjem je zdaj tudi veliko lažje. Zelo priporočam, da v okolje Anaconda namestite vse potrebne odvisnosti, da bo vaš projekt ločen od drugih in se izognili konfliktom.

Namestitveni program prenesite tukaj.

Ko je namestitev končana, ustvarite novo okolje:

conda create -n yolo python = 3,7

Aktivirajmo novo okolje

conda aktiviraj yolo

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

Namestite aXeleRate na vaš lokalni računalnik z

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

Nato zaženite to, da prenesete skripte, ki jih potrebujete za usposabljanje in sklepanje:

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.

3. korak: S Kerasom naučite model odkrivanja objektov

S Kerasom trenirajte model odkrivanja predmetov
S Kerasom trenirajte model odkrivanja predmetov

Zdaj lahko zaženemo skript za usposabljanje s konfiguracijsko datoteko. Ker je Kerasova implementacija detektorja objektov YOLO precej zapletena, bom namesto razlage vsakega ustreznega koda razložil, kako konfigurirati usposabljanje in opisal tudi ustrezne module, če jih želite sami spremeniti.

Začnimo s primerom igrač in usposobimo detektorja rakona. V mapi /config je konfiguracijska datoteka raccoon_detector.json. Za arhitekturo izberemo MobileNet7_5 (kjer je 7_5 alfa parameter prvotne izvedbe Mobilenet, nadzoruje širino omrežja) in 224x224 kot velikost vnosa. Oglejmo si najpomembnejše parametre v konfiguraciji:

Tip je model frontend - Razvrščevalec, detektor ali SegnetArchitecture je model zaledja (ekstraktor funkcij)

- Popoln Yolo - Majhen Yolo - MobileNet1_0 - MobileNet7_5 - MobileNet5_0 - MobileNet2_5 - SqueezeNet - VGG16 - ResNet50

Za več informacij o sidrih preberite tukaj

Oznake so oznake, ki so prisotne v vašem naboru podatkov. POMEMBNO: Navedite vse oznake, ki so prisotne v naboru podatkov.

object_scale določa, koliko naj se kaznuje za napačno napoved zaupanja objektivnih napovedovalcev

no_object_scale določa, koliko naj se kaznuje za napačno napoved zaupanja nepredmetnih napovedovalcev

corre_scale določa, koliko naj se kaznuje za napačne napovedi položaja in velikosti (x, y, w, h)

class_scale določa, koliko naj se kaznuje za napačno napoved razreda

povečanje - povečanje slike, spreminjanje velikosti, premikanje in zameglitev slike, da se prepreči pretirano prilagajanje in večja raznolikost v naboru podatkov.

train_times, validation_times - kolikokrat ponoviti nabor podatkov. Koristno, če imate povečanje

omogočeno

first_trainable_layer - omogoča zamrznitev določenih plasti, če uporabljate vnaprej usposobljeno omrežje funkcij

Zdaj moramo prenesti nabor podatkov, ki sem ga dal v skupno rabo na svojem Google Drive (prvotni nabor podatkov), ki je nabor podatkov za odkrivanje rakunov in vsebuje 150 označenih slik.

Prepričajte se, da ste ustrezno spremenili vrstice v konfiguracijski datoteki (train_image_folder, train_annot_folder) in nato začnite usposabljanje z naslednjim ukazom:

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

train.py prebere konfiguracijo iz datoteke.json in model trenira s skriptom axelerate/networks/yolo/yolo_frontend.py. yolo/backend/loss.py je tam, kjer je implementirana funkcija izgube po meri, in yolo/backend/network.py, kjer je ustvarjen model (vnos, ekstraktor funkcij in plasti zaznavanja skupaj). axelerate/networks/common_utils/fit.py je skript, ki izvaja proces usposabljanja, axelerate/networks/common_utils/feature.py pa vsebuje ekstraktorje funkcij. Če nameravate uporabljati usposobljeni model s čipom K210 in vdelano programsko opremo Micropython, lahko zaradi omejitev pomnilnika izbirate med MobileNet (2_5, 5_0 in 7_5) in TinyYolo, vendar sem ugotovil, da MobileNet daje boljšo natančnost zaznavanja.

Ker gre za igračo in vsebuje le 150 slik rakunov, bi moral biti proces usposabljanja precej hiter, tudi brez grafičnega procesorja, čeprav natančnost še zdaleč ne bo zvezdniška. Za projekt, povezan z delom, sem izučil detektor prometnih znakov in detektor števil, oba nabora podatkov sta vključevala več kot tisoč primerov usposabljanja.

4. korak: Pretvorite ga v obliko.kmodel

Pretvori v.kmodel Format
Pretvori v.kmodel Format

Z aXeleRate se pretvorba modela izvede samodejno - to je verjetno največja razlika od stare različice skriptov za usposabljanje! Poleg tega datoteke modelov in graf usposabljanja lepo shranite v mapo projekta. Prav tako sem ugotovil, da natančnost preverjanja včasih ne daje ocene dejanske uspešnosti modela za odkrivanje predmetov, zato sem dodal mAP kot validacijsko metriko za modele odkrivanja objektov. Več o mAP si lahko preberete tukaj.

Če se povprečna natančnost mAP (naša meritev preverjanja) ne izboljša za 20 obdobij, se bo usposabljanje predčasno ustavilo. Vsakič, ko se mAP 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".

Zdaj pa do zadnjega koraka, naš model dejansko izvajamo na strojni opremi Sipeed!

5. korak: Zaženite vdelano programsko opremo Micropython

Zaženi z vdelano programsko opremo Micropython
Zaženi z vdelano programsko opremo Micropython

Z našim modelom odkrivanja objektov lahko s kodo C izvedemo sklepanje, vendar bomo zaradi udobja namesto tega uporabili vdelano programsko opremo Micropython in MaixPy IDE.

Od tu prenesite MaixPy IDE, od tukaj pa vdelano programsko opremo micropython. Za zapisovanje vdelane programske opreme lahko uporabite skript python kflash.py ali pa tukaj naložite ločeno orodje za grafični vmesnik.

Kopirajte model.kmodel v koren kartice SD in vstavite kartico SD v bit Sipeed Maix (ali drugo napravo K210). Druga možnost je, da zapišete.kmodel v bliskovni pomnilnik naprave. Moj primer skripta bere.kmodel iz pomnilnika flash. Če uporabljate kartico SD, spremenite to vrstico

opravilo = kpu.load (0x200000)

do

opravilo = kpu.load ("/sd/model.kmodel")

Odprite MaixPy IDE in pritisnite gumb za povezavo. Odprite skript raccoon_detector.py iz mape example_scripts/k210/detector in pritisnite gumb Start. Videti bi morali prenos v živo s kamere z omejevalnimi polji okoli … no, rakuni. Natančnost modela lahko povečate z več primeri usposabljanja, vendar ne pozabite, da je to pravljični majhen model (1,9 M) in bo imel težave pri zaznavanju majhnih predmetov (zaradi nizke ločljivosti).

Eno od vprašanj, ki sem jih prejel v komentarjih k prejšnjemu članku o prepoznavanju slik, je, kako poslati rezultate zaznavanja prek UART/I2C na drugo napravo, priključeno na razvojne plošče Sipeed. V mojem skladišču github boste našli še en primer skripta, raccoon_detector_uart.py, ki (uganili ste) zazna rakune in pošlje koordinate omejevalnih polj prek UART. Upoštevajte, da so zatiči, ki se uporabljajo za komunikacijo UART, različni od različnih plošč, kar morate preveriti v dokumentaciji.

6. korak: Povzetek

Kendryte K210 je trden čip za računalniški vid, prilagodljiv, čeprav z omejenim pomnilnikom. Doslej smo v mojih vadnicah obravnavali njegovo uporabo za prepoznavanje predmetov po meri, odkrivanje predmetov po meri in izvajanje nekaterih nalog računalniškega vida, ki temeljijo na OpenMV. Zagotovo vem, da je primeren tudi za prepoznavanje obrazov in z nekaterimi zapleti bi bilo treba omogočiti zaznavanje pozi in segmentacijo slike (z aXeleRate lahko trenirate model semantične segmentacije, vendar sklepanja še nisem izvedel s K210). Vabljeni, da si ogledate vprašanja skladišča aXeleRate in naredite PR, če menite, da lahko prispevate nekaj izboljšav!

Tukaj je nekaj člankov, ki sem jih uporabil pri pisanju te vadnice. Poglejte, če želite izvedeti več o odkrivanju predmetov z nevronskimi omrežji:

Detektorji objektov z omejevalno škatlo: razumevanje YOLO, pogledaš samo enkrat

Razumevanje YOLO (več matematike)

Nežen vodnik o tem, kako lokalizacija objektov YOLO deluje s Kerasom (2. del)

Odkrivanje objektov v realnem času z YOLO, YOLOv2 in zdaj YOLOv3

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.

Če imate kakršna koli vprašanja, me dodajte na LinkedIn in se naročite na moj YouTube kanal, da boste obveščeni o zanimivejših projektih, ki vključujejo strojno učenje in robotiko.

Priporočena: