Sadržaj:

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

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

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

Kao nastavak mog prethodnog članka o prepoznavanju slika sa Sipeed MaiX pločama, odlučio sam napisati još jedan vodič, fokusirajući se na otkrivanje objekata. Nedavno se pojavio neki zanimljiv hardver sa čipom Kendryte K210, uključujući Seeed AI Hat za Edge Computing, M5 stack 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čunalnu viziju 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 video zapisima. 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 kako CNN modeli za prepoznavanje objekata funkcioniraju.

AŽURIRAJTE MAJ 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, Keras-baziranom okviru za AI na Ivice razvijam. aXeleRate se, u osnovi, temelji na zbirci skripti koje sam koristio za obuku modela prepoznavanja slika/otkrivanja objekata - kombiniranih u jedinstveni okvir i optimiziranih za tijek rada na Google Colabu. Pogodniji je za upotrebu i ažuriraniji.

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

Korak 1: Objašnjena arhitektura modela za otkrivanje 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 listu vjerovatnoća za svaku klasu koju pokušavamo prepoznati. Vrlo je korisno ako objekt koji nas zanima zauzima veliki dio slike i ne brinemo puno o njegovoj lokaciji. Ali š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 šta je sa projektom koji zahtijeva otkrivanje više objekata (na primjer za brojanje)?

Ovdje će vam dobro doći modeli otkrivanja objekata. U ovom članku koristit ćemo arhitekturu YOLO (samo jednom pogledate) i usredotočit ćemo 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 "mašina 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 ispravnih koordinata objekta. To bi dobro funkcioniralo, sve dok imamo samo jedan objekt na slici. Za više objekata koristimo drugačiji pristup - dodajemo mrežu i tjeramo našu mrežu da predvidi prisutnost (ili odsutnost) objekata u svakoj mreži. Zvuči odlično, ali ipak ostavlja previše neizvjesnosti za mrežu - kako izvesti predviđanje i što učiniti kada postoji više objekata s centrom unutar jedne ćelije mreže? Moramo dodati još jedno ograničenje - takozvana sidra. Sidra su početne veličine (širina, visina) od kojih će neke (najbliže veličini objekta) biti promijenjene u veličinu objekta - koristeći neke izlaze iz neuronske mreže (konačna karta karakteristika).

Dakle, ovdje je pogled na najviši nivo o tome šta se događa kada YOLO arhitektura neuronske mreže izvodi detekciju objekta na slici. Prema karakteristikama koje je otkrila mreža za izdvajanje značajki, za svaku ćeliju mreže 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 je zasnovan na izvrsnom projektu penny4860, SVHN yolo-v2 detektora. aXeleRate podiže ovu implementaciju YOLO detektora u Kerasu na viši nivo i koristi svoj prikladan konfiguracijski sistem za izvođenje obuke i konverziju 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 mašini ili u Google Colabu. Za pokretanje u Google Colabu pogledajte ovaj primjer:

Colab bilježnica 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 enable yolo

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

Instalirajte aXeleRate na svoju lokalnu mašinu pomoću

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

A zatim pokrenite ovo za preuzimanje skripti koje su vam potrebne za obuku i zaključivanje:

git clone

Možete pokrenuti brze testove sa test_training.py u folderu aXeleRate. Pokretat će obuku i zaključivanje za svaki tip 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 grešaka.

Korak 3: S Kerasom obučite model otkrivanja objekata

Obučite model otkrivanja objekata s Kerasom
Obučite model otkrivanja objekata s Kerasom

Sada možemo pokrenuti skriptu za obuku s konfiguracijskom datotekom. Budući da je Keras implementacija YOLO detektora objekata prilično komplicirana, umjesto objašnjenja svakog relevantnog dijela koda, objasnit ću kako konfigurirati obuku i opisati relevantne module, u slučaju da sami želite unijeti neke promjene.

Počnimo s primjerom igračke i obučimo detektor rakuna. U fascikli /config nalazi se konfiguraciona 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:

Tip 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 prediktora objekata

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 prilagođavanje i povećala raznolikost u skupu podataka.

train_times, validation_times - koliko puta ponoviti skup podataka. Korisno ako imate augumentaciju

omogućeno

first_trainable_layer - omogućava vam zamrzavanje određenih slojeva ako koristite unaprijed obučenu mrežu funkcija

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.

Obavezno promijenite linije u konfiguracijskoj datoteci (train_image_folder, train_annot_folder) u skladu s tim, 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 obučava model pomoću axelerate/networks/yolo/yolo_frontend.py skripte. yolo/backend/loss.py je mjesto gdje je implementirana prilagođena funkcija gubitka, a yolo/backend/network.py je mjesto gdje se kreira model (ulaz, ekstraktor značajki i slojevi detekcije zajedno). axelerate/networks/common_utils/fit.py je skripta koja implementira proces obuke, a axelerate/networks/common_utils/feature.py sadrži ekstraktore funkcija. 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 preciznost 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

Sa aXeleRate -om, konverzija modela se vrši automatski - ovo je vjerovatno najveća razlika od stare verzije skripti za obuku! Osim toga, datoteke modela i grafikon obuke uredno se spremaju u fasciklu projekta. Također sam otkrio da točnost provjere ponekad ne uspijeva procijeniti stvarne performanse modela za otkrivanje objekata i zato sam 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 metrika provjere valjanosti) ne poboljšava 20 epoha, obuka će se prerano prekinuti. Svaki put kada se mAP poboljša, model se sprema u fasciklu projekta. Nakon završetka obuke, aXeleRate automatski konvertuje najbolji model u određene formate - od sada možete izabrati "tflite", "k210" ili "edgetpu".

Sada do posljednjeg koraka, 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 sa našim modelom otkrivanja objekata sa C kodom, ali radi praktičnosti koristit ćemo umjesto toga Micropython firmver i MaixPy IDE.

Preuzmite MaixPy IDE odavde i mikropython firmver odavde. Možete upotrijebiti python skriptu kflash.py za snimanje firmvera ili ovdje preuzeti zasebni alat za GUI flash.

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 ovu liniju

zadatak = kpu.load (0x200000)

to

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

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

Jedno od pitanja koje sam dobio u komentarima na svoj prethodni članak o prepoznavanju slika je kako poslati rezultate detekcije 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 je nešto što morate provjeriti u dokumentaciji.

Korak 6: Sažetak

Kendryte K210 čvrst je čip za računarski 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 zasnovanih na OpenMV -u. Zaista znam da je pogodan i za prepoznavanje lica, a uz izvjesna petljanja trebalo bi biti moguće izvršiti otkrivanje poza i segmentaciju slike (možete koristiti aXeleRate za obuku modela semantičke segmentacije, ali još nisam implementirao zaključak s K210). Slobodno pogledajte probleme sa spremištem 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 pomoću neuronskih mreža:

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

Razumijevanje YOLO -a (više matematike)

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

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

Nadam se da možete iskoristiti svoje znanje koje sada imate za izgradnju sjajnih projekata s mašinskim vidom! Ovdje možete kupiti Sipeed ploče, one su među najjeftinijim opcijama dostupnim za ML na ugrađenim sistemima.

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čuje se: