Sadržaj:

Otkrivanje objekata s Sipeed MaiX pločama (Kendryte K210): 6 koraka
Otkrivanje objekata s Sipeed MaiX pločama (Kendryte K210): 6 koraka

Video: Otkrivanje objekata s Sipeed MaiX pločama (Kendryte K210): 6 koraka

Video: Otkrivanje objekata s Sipeed MaiX pločama (Kendryte K210): 6 koraka
Video: Chapter 13 - Triplanetary by E. E. Smith - The Hill 2024, Srpanj
Anonim
Image
Image

Kao nastavak mog prethodnog članka o prepoznavanju slika sa Sipeed MaiX pločama, odlučio sam napisati još jedan vodič, usredotočujući se na otkrivanje objekata. Nedavno se pojavio neki zanimljiv hardver s čipom Kendryte K210, uključujući Seeed AI Hat za Edge Computing, M5 stack's M5StickV i DFRobot HuskyLens (iako taj ima vlasnički firmver i više cilja za potpune početnike). Zbog niske cijene, Kendryte K210 se svidio ljudima koji žele dodati računalni vid svojim projektima. No, kao i obično s kineskim hardverskim proizvodima, tehnička podrška nedostaje i to je nešto što pokušavam poboljšati svojim člancima i videozapisima. Ali imajte na umu da ja nisam u timu programera Kendryte ili Sipeed i ne mogu odgovoriti na sva pitanja vezana za njihov proizvod.

Imajući to na umu, počnimo! Počet ćemo s kratkim (i pojednostavljenim) pregledom rada CNN modela za prepoznavanje objekata.

AŽURIRAJTE SVIBANJ 2020.: Vidjevši kako su moj članak i video o otkrivanju objekata 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, okviru za AI na bazi Kerasa na Rub razvijam. aXeleRate se u osnovi temelji na zbirci skripti koje sam koristio za obuku modela prepoznavanja slika/otkrivanja objekata - kombinirane u jedinstveni okvir i optimizirane za tijek rada na Google Colabu. Pogodnije je za korištenje i ažuriranije.

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

Korak 1: Objašnjena arhitektura modela otkrivanja objekata

Objašnjena arhitektura modela otkrivanja objekata
Objašnjena arhitektura modela otkrivanja objekata
Objašnjena arhitektura modela otkrivanja objekata
Objašnjena arhitektura modela otkrivanja objekata

Modeli prepoznavanja slike (ili klasifikacije slika) uzimaju cijelu sliku kao ulaz i ispisuju popis vjerojatnosti za svaku klasu koju pokušavamo prepoznati. Vrlo je korisno ako objekt koji nas zanima zauzima veliki dio slike i ne brinemo puno o njegovom položaju. No što ako naš projekt (recimo, kamera za praćenje lica) zahtijeva od nas ne samo znanje o vrsti objekta na slici, već i njegove koordinate. A što je s projektom koji zahtijeva otkrivanje više objekata (na primjer za brojanje)?

Ovdje će vam dobro doći modeli otkrivanja objekata. U ovom ćemo članku koristiti arhitekturu YOLO (samo jednom pogledate) i usredotočiti objašnjenje na unutarnju mehaniku ove određene arhitekture.

Pokušavamo utvrditi koji su objekti prisutni na slici i koje su njihove koordinate. Budući da strojno učenje nije magija i nije "stroj za razmišljanje", već samo algoritam koji koristi statistiku za optimizaciju funkcije (neuronske mreže) za bolje rješavanje određenog problema. Moramo parafrazirati ovaj problem kako bismo ga učinili "optimiziranim". Naivan pristup ovdje bi bio da algoritam minimizira gubitak (razliku) između predviđanja i točnih koordinata objekta. To bi dobro funkcioniralo, sve dok imamo samo jedan objekt na slici. Za više objekata koristimo drugačiji pristup - dodajemo rešetku i tjeramo našu mrežu da predvidi prisutnost (ili odsutnost) objekata u svakoj mreži. Zvuči sjajno, ali ipak ostavlja previše neizvjesnosti za mrežu - kako izvesti predviđanje i što učiniti kada postoji više objekata sa središtem unutar jedne ćelije mreže? Moramo dodati još jedno ograničenje - takozvana sidra. Sidra su početne veličine (širina, visina) od kojih će se neke (najbliže veličini objekta) promijeniti u veličinu objekta - koristeći neke izlaze iz neuronske mreže (konačna karta značajki).

Dakle, ovdje je pogled na najvišoj razini o tome što se događa kada neuronska mreža arhitekture YOLO izvodi otkrivanje objekata na slici. Prema značajkama koje je otkrila mreža za izvlačenje značajki, za svaku ćeliju rešetke napravljen je skup predviđanja, koji uključuje pomak sidra, vjerojatnost sidrenja i klasu sidra. Zatim odbacujemo predviđanja s malom vjerojatnošću i voila!

Korak 2: Pripremite okoliš

Pripremite okoliš
Pripremite okoliš

aXeleRate se temelji na izvrsnom projektu penny4860, SVHN yolo-v2 detektora znamenki. aXeleRate ovu implementaciju YOLO detektora u Kerasu podiže na višu razinu i koristi svoj prikladan konfiguracijski sustav za izvođenje obuke i konverzije mreža za prepoznavanje slika/otkrivanje objekata i segmentaciju slika s različitim pozadinama.

Postoje dva načina korištenja aXeleRate: lokalno pokretanje na Ubuntu stroju ili u Google Colabu. Za pokretanje u Google Colabu pogledajte ovaj primjer:

Bilježnica Colab za otkrivanje objekata PASCAL-VOC

Lokalno osposobljavanje vašeg modela i izvoz za upotrebu s hardverskim ubrzanjem također je sada mnogo lakše. Toplo vam preporučujem da instalirate sve potrebne ovisnosti u okruženju Anaconda kako biste svoj projekt odvojili od drugih i izbjegli sukobe.

Ovdje preuzmite instalacijski program.

Nakon dovršetka instalacije stvorite novo okruženje:

conda create -n yolo python = 3,7

Aktivirajmo novo okruženje

conda aktivirati yolo

Prefiks ispred vaše bash ljuske pojavit će se s imenom okoline, što znači da sada radite u tom okruženju.

Instalirajte aXeleRate na svoj lokalni stroj pomoću

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

A zatim pokrenite ovo za preuzimanje skripti koje ćete trebati za obuku i zaključivanje:

git klon

Možete pokrenuti brze testove sa test_training.py u mapi aXeleRate. Provodit će obuku i zaključivanje za svaku vrstu 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 pogrešaka.

Korak 3: S Kerasom uvježbajte model otkrivanja objekata

Vježbajte model otkrivanja objekata s Kerasom
Vježbajte model otkrivanja objekata s Kerasom

Sada možemo pokrenuti skriptu za obuku s konfiguracijskom datotekom. Budući da je Kerasova implementacija YOLO detektora objekata prilično komplicirana, umjesto da objasnim svaki relevantan dio koda, objasnit ću kako konfigurirati obuku i opisati relevantne module, u slučaju da ih želite sami promijeniti.

Počnimo s primjerom igračke i obučimo detektor rakuna. Unutar mape /config nalazi se konfiguracijska datoteka, raccoon_detector.json. Odabrali smo MobileNet7_5 kao arhitekturu (gdje je 7_5 alfa parametar izvorne implementacije Mobileneta, kontrolira širinu mreže) i 224x224 kao veličinu unosa. Pogledajmo najvažnije parametre u konfiguraciji:

Vrsta je prednji dio modela - Klasifikator, Detektor ili SegnetArhitektura je pozadina modela (ekstraktor značajki)

- Potpuni Yolo - Mali Yolo - MobileNet1_0 - MobileNet7_5 - MobileNet5_0 - MobileNet2_5 - SqueezeNet - VGG16 - ResNet50

Za više informacija o sidrima, pročitajte ovdje

Oznake su oznake prisutne u vašem skupu podataka. VAŽNO: Navedite sve oznake prisutne u skupu podataka.

object_scale određuje koliko će se kazniti pogrešno predviđanje povjerenja objektnih prediktora

no_object_scale određuje koliko će se kazniti pogrešno predviđanje povjerenja neobjektnih prediktora

corre_scale određuje koliko će se kazniti pogrešna predviđanja položaja i veličine (x, y, w, h)

class_scale određuje koliko će se kazniti pogrešno predviđanje klase

augumentation - povećanje slike, promjena veličine, pomicanje i zamućivanje slike kako bi se spriječilo prekomjerno uklapanje i veća raznolikost u skupu podataka.

train_times, validation_times - koliko puta ponoviti skup podataka. Korisno ako imate povećanje

omogućeno

first_trainable_layer - omogućuje vam zamrzavanje određenih slojeva ako koristite unaprijed obučenu mrežu značajki

Sada moramo preuzeti skup podataka koji sam podijelio na svom Google disku (izvorni skup podataka), a to je skup podataka za otkrivanje rakuna, koji sadrži 150 označenih slika.

Pobrinite se da u skladu s tim promijenite retke u konfiguracijskoj datoteci (train_image_folder, train_annot_folder), a zatim započnite obuku sa sljedećom naredbom:

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

train.py čita konfiguraciju iz.json datoteke i trenira model pomoću skripte axelerate/networks/yolo/yolo_frontend.py. yolo/backend/loss.py je mjesto gdje je implementirana prilagođena funkcija gubitka, a yolo/backend/network.py je mjesto gdje se stvara model (ulaz, ekstraktor značajki i slojevi detekcije zajedno). axelerate/networks/common_utils/fit.py je skripta koja provodi proces obuke, a axelerate/networks/common_utils/feature.py sadrži ekstraktore značajki. Ako namjeravate koristiti obučeni model s čipom K210 i Micropython firmverom, zbog ograničenja memorije možete birati između MobileNet (2_5, 5_0 i 7_5) i TinyYolo, ali otkrio sam da MobileNet daje bolju točnost otkrivanja.

Budući da je to primjer igračke i sadrži samo 150 slika rakuna, proces obuke trebao bi biti prilično brz, čak i bez GPU -a, iako će točnost biti daleko od zvjezdane. Za projekt vezan uz posao obučio sam detektor prometnih znakova i detektor brojeva, oba skupa podataka uključivala su više od nekoliko tisuća primjera obuke.

Korak 4: Pretvorite ga u.kmodel format

Pretvorite ga u.kmodel format
Pretvorite ga u.kmodel format

S aXeleRateom, konverzija modela vrši se automatski - to je vjerojatno najveća razlika u odnosu na staru verziju skripti za obuku! Osim toga, datoteke modela i grafikon obuke uredno se spremaju u mapu projekta. Također sam otkrio da točnost provjere ponekad ne uspijeva procijeniti stvarne performanse modela za otkrivanje objekata, pa sam zato dodao mAP kao metriku provjere za modele otkrivanja objekata. Više o mAP -u možete pročitati ovdje.

Ako se mAP, srednja prosječna preciznost (naša validacijska metrika) ne poboljšava 20 epoha, obuka će prerano prestati. Svaki put kad se mAP poboljša, model se sprema u mapu projekta. Nakon završetka treninga, aXeleRate automatski pretvara najbolji model u određene formate - od sada možete odabrati "tflite", "k210" ili "edgetpu".

Sada na posljednji korak, zapravo pokretanje našeg modela na Sipeed hardveru!

Korak 5: Pokrenite na Micropython Firmware -u

Pokrenite na Micropython Firmware -u
Pokrenite na Micropython Firmware -u

Moguće je izvesti zaključak s našim modelom otkrivanja objekata s C kodom, ali radi praktičnosti koristit ćemo umjesto toga firmver Micropython i MaixPy IDE.

Ovdje preuzmite MaixPy IDE, a odavde firmver mikropythona. Možete upotrijebiti python skriptu kflash.py za snimanje firmvera ili ovdje preuzeti zasebni GUI flash alat.

Kopirajte model.kmodel u korijen SD kartice i umetnite SD karticu u Sipeed Maix bit (ili drugi K210 uređaj). Alternativno, možete snimiti.kmodel na flash memoriju uređaja. Moj primjer skripte čita.kmodel iz flash memorije. Ako koristite SD karticu, promijenite ovaj redak

zadatak = kpu.load (0x200000)

do

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

Otvorite MaixPy IDE i pritisnite gumb za povezivanje. Otvorite skriptu raccoon_detector.py iz mape example_scripts/k210/detector i pritisnite gumb Start. Trebali biste gledati prijenos uživo s kamere s ograničenim okvirima … pa, rakuni. Točnost modela možete povećati pružanjem više primjera obuke, ali imajte na umu da je to vilinski mali model (1,9 M) i da će imati problema s otkrivanjem malih objekata (zbog niske razlučivosti).

Jedno od pitanja koje sam dobio u komentarima na svoj prethodni članak o prepoznavanju slika je kako poslati rezultate otkrivanja putem UART/I2C na drugi uređaj spojen na razvojne ploče Sipeed. U mom github spremištu moći ćete pronaći još jedan primjer skripte, raccoon_detector_uart.py, koja (pogađate) otkriva rakune i šalje koordinate graničnih okvira preko UART -a. Imajte na umu da se pinovi koji se koriste za UART komunikaciju razlikuju od različitih ploča, to morate provjeriti u dokumentaciji.

Korak 6: Sažetak

Kendryte K210 čvrst je čip za računalni vid, fleksibilan, iako s ograničenom količinom memorije. Do sada smo u mojim vodičima govorili o korištenju za prepoznavanje prilagođenih objekata, otkrivanje prilagođenih objekata i pokretanje nekih zadataka računalnog vida temeljenih na OpenMV -u. Zaista znam da je također prikladan za prepoznavanje lica, a uz izvjesna petljanja trebalo bi biti moguće izvršiti otkrivanje poza i segmentaciju slike (možete koristiti aXeleRate za uvježbavanje semantičkog modela segmentacije, ali zaključak još nisam implementirao s K210). Slobodno pogledajte pitanja u spremištu aXeleRate i napravite PR ako mislite da postoje neka poboljšanja koja možete pridonijeti!

Evo nekoliko članaka koje sam koristio pri pisanju ovog vodiča. Pogledajte ako želite saznati više o otkrivanju objekata s neuronskim mrežama:

Detektori objekata s ograničenim okvirima: razumijevanje YOLO -a, gledate samo jednom

Razumijevanje YOLO -a (više matematike)

Lagani vodič o tome kako lokalizacija objekata YOLO radi s Kerasom (2. dio)

Otkrivanje objekata u stvarnom vremenu s YOLO, YOLOv2 i sada YOLOv3

Nadam se da možete koristiti znanje koje sada imate za izgradnju izvrsnih projekata sa strojnim vidom! Ploče Sipeed možete kupiti ovdje, one su među najjeftinijim opcijama dostupnim za ML na ugrađenim sustavima.

Dodajte me na LinkedIn ako imate pitanja i pretplatite se na moj YouTube kanal kako biste primali obavijesti o zanimljivijim projektima koji uključuju strojno učenje i robotiku.

Preporučeni: