Satura rādītājs:

Objektu noteikšana ar Sipeed MaiX dēļiem (Kendryte K210): 6 soļi
Objektu noteikšana ar Sipeed MaiX dēļiem (Kendryte K210): 6 soļi

Video: Objektu noteikšana ar Sipeed MaiX dēļiem (Kendryte K210): 6 soļi

Video: Objektu noteikšana ar Sipeed MaiX dēļiem (Kendryte K210): 6 soļi
Video: VISU NAKTI AR POLTERGEISTU DZĪVOKĻA MĀJĀ es filmēju rāpojošo darbību. 2024, Jūlijs
Anonim
Image
Image

Turpinot manu iepriekšējo rakstu par attēlu atpazīšanu ar Sipeed MaiX Boards, es nolēmu uzrakstīt vēl vienu apmācību, koncentrējoties uz objektu noteikšanu. Nesen parādījās interesanta aparatūra ar Kendryte K210 mikroshēmu, tostarp Seeed AI cepure Edge Computing, M5 steka M5StickV un DFRobot HuskyLens (lai gan tai ir patentēta programmaparatūra un tā ir vairāk paredzēta iesācējiem). Pateicoties lētajai cenai, Kendryte K210 ir pievērsusies cilvēkiem, vēloties saviem projektiem pievienot datora redzējumu. Bet, kā parasti ar ķīniešu aparatūras produktiem, trūkst tehniskā atbalsta, un to es cenšos uzlabot ar saviem rakstiem un videoklipiem. Bet paturiet prātā, ka es neesmu Kendryte vai Sipeed izstrādātāju komandā un nevaru atbildēt uz visiem jautājumiem, kas saistīti ar viņu produktu.

Paturot to prātā, sāksim! Sāksim ar īsu (un vienkāršotu) pārskatu par objektu atpazīšanas CNN modeļu darbību.

ATJAUNINĀT 2020. GADA MAIJU: Redzot, kā mans raksts un video par objektu noteikšanu ar K210 dēļiem joprojām ir ļoti populāri, un starp labākajiem rezultātiem pakalpojumā YouTube un Google, es nolēmu atjaunināt rakstu, iekļaujot tajā informāciju par aXeleRate, Keras balstītu AI sistēmu. Edge I attīstās. Būtībā aXeleRate pamatā ir skriptu kolekcija, ko izmantoju attēlu atpazīšanas/objektu noteikšanas modeļu apmācībai - apvienota vienotā ietvarā un optimizēta darbplūsmai pakalpojumā Google Colab. Tas ir ērtāk lietojams un aktuālāks.

Raksta vecajai versijai to joprojām varat redzēt vietnē steemit.com.

1. darbība. Izskaidrota objektu noteikšanas modeļa arhitektūra

Izskaidrota objektu noteikšanas modeļa arhitektūra
Izskaidrota objektu noteikšanas modeļa arhitektūra
Izskaidrota objektu noteikšanas modeļa arhitektūra
Izskaidrota objektu noteikšanas modeļa arhitektūra

Attēlu atpazīšanas (vai attēlu klasifikācijas) modeļi visu attēlu izmanto kā ievadi un izvada varbūtību sarakstu katrai klasei, kuru mēs cenšamies atpazīt. Tas ir ļoti noderīgi, ja mūs interesējošais objekts aizņem lielu attēla daļu un mums nav īpaši vienalga par tā atrašanās vietu. Bet ko darīt, ja mūsu projekts (teiksim, sejas izsekošanas kamera) prasa, lai mums būtu ne tikai zināšanas par attēla objekta veidu, bet arī tā koordinātas. Un kā ir ar projektu, kas prasa atklāt vairākus objektus (piemēram, skaitīšanai)?

Lūk, kad noder objektu noteikšanas modeļi. Šajā rakstā mēs izmantosim YOLO (jūs skatāties tikai vienu reizi) arhitektūru un koncentrēsimies uz šīs arhitektūras iekšējo mehāniku.

Mēs cenšamies noteikt, kādi objekti ir attēlā un kādas ir to koordinātas. Tā kā mašīnmācīšanās nav maģija un nav "domājoša mašīna", bet tikai algoritms, kas izmanto statistiku, lai optimizētu funkciju (neironu tīkls), lai labāk atrisinātu konkrētu problēmu. Mums ir jāpārfrāzē šī problēma, lai tā būtu vairāk "optimizējama". Naiva pieeja šeit būtu panākt, lai algoritms samazinātu zaudējumus (atšķirības) starp tā prognozi un pareizām objekta koordinātām. Tas darbotos diezgan labi, ja vien attēlā ir tikai viens objekts. Vairākiem objektiem mēs izmantojam atšķirīgu pieeju - mēs pievienojam režģi un liekam tīklam paredzēt objekta (-u) klātbūtni (vai neesamību) katrā režģī. Izklausās lieliski, bet tomēr atstāj pārāk daudz neskaidrību tīklam - kā izvadīt prognozi un ko darīt, ja vienā tīkla šūnā ir vairāki objekti ar centru? Mums jāpievieno vēl viens ierobežojums - tā sauktie enkuri. Enkuri ir sākotnējie izmēri (platums, augstums), no kuriem daži (vistuvāk objekta izmēram) tiks mainīti atbilstoši objekta izmēram - izmantojot dažus neironu tīkla izvadus (galīgā iezīmju karte).

Tātad, šeit ir augstākā līmeņa skats uz to, kas notiek, kad YOLO arhitektūras neironu tīkls attēlam veic objekta noteikšanu. Saskaņā ar iezīmju nosūcēja tīkla noteiktajām iezīmēm katrai režģa šūnai tiek izveidots prognožu kopums, kas ietver enkura nobīdi, enkura varbūtību un enkura klasi. Tad mēs atmetam prognozes ar mazu varbūtību un voila!

2. solis: sagatavojiet vidi

Sagatavojiet vidi
Sagatavojiet vidi

aXeleRate pamatā ir brīnišķīgs penny4860, SVHN yolo-v2 ciparu detektora projekts. aXeleRate paceļ šo YOLO detektora ieviešanu Kerasā jaunā līmenī un izmanto savu ērto konfigurācijas sistēmu, lai apmācītu un pārveidotu attēlu atpazīšanas/objektu noteikšanas un attēlu segmentēšanas tīklus ar dažādām aizmugures sistēmām.

Ir divi veidi, kā izmantot aXeleRate: darbojas lokāli Ubuntu mašīnā vai pakalpojumā Google Colab. Lai darbotos pakalpojumā Google Colab, apskatiet šo piemēru:

PASCAL-VOC Object Detection Colab Notebook

Pašlaik ir arī daudz vieglāk apmācīt savu modeli lokāli un eksportēt to, lai to izmantotu ar aparatūras paātrinājumu. Es ļoti iesaku instalēt visas nepieciešamās atkarības Anaconda vidē, lai jūsu projekts būtu atdalīts no citiem un izvairītos no konfliktiem.

Lejupielādējiet instalētāju šeit.

Kad instalēšana ir pabeigta, izveidojiet jaunu vidi:

conda izveidot -n yolo python = 3.7

Aktivizēsim jauno vidi

conda aktivizēt yolo

Pirms jūsu bash apvalka parādīsies prefikss ar vides nosaukumu, norādot, ka pašlaik strādājat šajā vidē.

Instalējiet aXeleRate savā lokālajā datorā ar

pip instalēt git+https://github.com/AIWintermuteAI/aXeleRate

Un pēc tam palaidiet to, lai lejupielādētu skriptus, kas jums būs nepieciešami apmācībai un secinājumiem:

git klons

Ātros testus varat veikt, izmantojot tests_training.py mapē aXeleRate. Tā veiks apmācību un secinājumus katram modeļa tipam, saglabās un pārveidos apmācītos modeļus. Tā kā tā ir tikai apmācība 5 laikmetiem un datu kopa ir ļoti maza, jūs nevarēsit iegūt noderīgus modeļus, taču šis skripts ir paredzēts tikai, lai pārbaudītu, vai nav kļūdu.

3. darbība: apmāciet objektu noteikšanas modeli, izmantojot Keras

Apmāciet objektu noteikšanas modeli ar Keras
Apmāciet objektu noteikšanas modeli ar Keras

Tagad mēs varam palaist apmācības skriptu ar konfigurācijas failu. Tā kā Keras YOLO objektu detektora ieviešana ir diezgan sarežģīta, tā vietā, lai izskaidrotu katru atbilstošo koda gabalu, es paskaidrošu, kā konfigurēt apmācību, kā arī aprakstīšu atbilstošos moduļus, ja vēlaties paši tajos veikt dažas izmaiņas.

Sāksim ar rotaļlietu piemēru un apmācīsim jenota detektoru. Mapē /config, raccoon_detector.json, ir konfigurācijas fails. Mēs izvēlamies MobileNet7_5 kā arhitektūru (kur 7_5 ir sākotnējā Mobilenet ieviešanas alfa parametrs, kontrolē tīkla platumu) un 224x224 kā ievades lielumu. Apskatīsim svarīgākos konfigurācijas parametrus:

Tips ir modeļa priekšpuse - klasifikators, detektors vai segnets Arhitektūra ir modeļa aizmugure (funkciju nosūcējs)

- Pilns Yolo - Tiny Yolo - MobileNet1_0 - MobileNet7_5 - MobileNet5_0 - MobileNet2_5 - SqueezeNet - VGG16 - ResNet50

Lai iegūtu papildinformāciju par enkuriem, lūdzu, izlasiet šeit

Iezīmes ir jūsu datu kopā esošās etiķetes. SVARĪGI! Lūdzu, uzskaitiet visas datu kopā esošās etiķetes.

object_scale nosaka, cik lielā mērā sodīt par nepareizu objektu prognozētāju uzticības prognozi

no_object_scale nosaka, cik lielā mērā sodīt par nepareizu prognozētāju uzticības prognozi

coord_scale nosaka, cik daudz sodīt par nepareizu pozīciju un izmēru prognozēm (x, y, w, h)

class_scale nosaka, cik lielā mērā sodīt par nepareizu klases prognozi

augumentation - attēla palielināšana, izmēru maiņa, attēla pārvietošana un aizmiglošana, lai novērstu pārmērīgu uzstādīšanu un datu kopa būtu daudzveidīgāka.

train_times, validation_times - cik reizes atkārtot datu kopu. Noderīgi, ja jums ir papildinājums

iespējots

first_trainable_layer - ļauj iesaldēt noteiktus slāņus, ja izmantojat iepriekš apmācītu funkciju tīklu

Tagad mums ir jālejupielādē datu kopa, ko es koplietoju savā Google diskā (sākotnējā datu kopa), kas ir jenotsatklāšanas datu kopa, kurā ir 150 anotēti attēli.

Noteikti attiecīgi mainiet konfigurācijas faila rindas (vilciena_attēlu_mape, vilciena_nozīme_mape) un pēc tam sāciet apmācību ar šādu komandu:

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

train.py nolasa konfigurāciju no.json faila un apmāca modeli ar skriptu axelerate/network/yolo/yolo_frontend.py. yolo/backend/loss.py ir vieta, kur tiek ieviesta pielāgota zuduma funkcija, un yolo/backend/network.py ir vieta, kur tiek izveidots modelis (kopā ievades, funkciju nosūcēja un noteikšanas slāņi). axelerate/network/common_utils/fit.py ir skripts, kas īsteno apmācības procesu, un axelerate/network/common_utils/feature.py satur funkciju nosūcējus. Ja jūs plānojat izmantot apmācītu modeli ar K210 mikroshēmu un Micropython programmaparatūru, atmiņas ierobežojumu dēļ varat izvēlēties starp MobileNet (2_5, 5_0 un 7_5) un TinyYolo, taču esmu atklājis, ka MobileNet nodrošina labāku noteikšanas precizitāti.

Tā kā tas ir rotaļlietu piemērs un tajā ir tikai 150 jenotu attēli, apmācības procesam vajadzētu būt diezgan ātram, pat bez GPU, lai gan precizitāte būs tālu no zvaigznēm. Ar darbu saistītam projektam esmu apmācījis ceļa zīmju detektoru un skaitļu detektoru, abās datu kopās bija vairāk nekā daži tūkstoši mācību piemēru.

4. darbība: pārveidojiet to.kmodel formātā

Pārvērst to.kmodel formātā
Pārvērst to.kmodel formātā

Izmantojot aXeleRate, modeļa pārveidošana tiek veikta automātiski - tā, iespējams, ir lielākā atšķirība no vecās apmācības skriptu versijas! Turklāt jūs saņemat modeļa failus un apmācības grafiku, kas ir kārtīgi saglabāti projekta mapē. Es arī atklāju, ka vaiidācijas precizitāte dažkārt nesniedz novērtējumu par modeļa reālo veiktspēju objektu noteikšanai, un tāpēc es pievienoju mAP kā objektu noteikšanas modeļu validācijas metriku. Vairāk par mAP varat lasīt šeit.

Ja mAP, vidējā vidējā precizitāte (mūsu validācijas rādītājs) 20 laikmetos neuzlabojas, apmācība tiks priekšlaicīgi pārtraukta. Katru reizi, kad uzlabojas karte, modelis tiek saglabāts projekta mapē. Kad apmācība ir beigusies, aXeleRate automātiski pārveido labāko modeli noteiktos formātos - no šī brīža jūs varat izvēlēties "tflite", "k210" vai "edgetpu".

Tagad uz pēdējo soli, faktiski izmantojot mūsu modeli Sipeed aparatūrā!

5. darbība: palaidiet Micropython programmaparatūru

Palaidiet Micropython programmaparatūru
Palaidiet Micropython programmaparatūru

Ir iespējams izdarīt secinājumus ar mūsu objektu noteikšanas modeli ar C kodu, bet ērtības labad mēs izmantosim Micropython programmaparatūru un MaixPy IDE.

Lejupielādējiet MaixPy IDE no šejienes un mikropitona programmaparatūru no šejienes. Jūs varat izmantot python skriptu kflash.py, lai ierakstītu programmaparatūru vai lejupielādētu šeit atsevišķu GUI zibatmiņas rīku.

Kopējiet model.kmodel uz SD kartes sakni un ievietojiet SD karti Sipeed Maix Bit (vai citā K210 ierīcē). Varat arī ierakstīt.kmodel ierīces zibatmiņā. Manā skripta paraugā no zibatmiņas skan.kmodel. Ja izmantojat SD karti, lūdzu, mainiet šo rindiņu

uzdevums = kpu.load (0x200000)

uz

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

Atveriet MaixPy IDE un nospiediet savienojuma pogu. No mapes example_scripts/k210/detector atveriet skriptu raccoon_detector.py un nospiediet pogu Sākt. Jums vajadzētu redzēt tiešraidi no kameras ar ierobežojošām kastēm … labi, jenoti. Jūs varat uzlabot modeļa precizitāti, sniedzot vairāk apmācības piemēru, taču paturiet prātā, ka tas ir feini mazs modelis (1,9 M) un tam būs problēmas noteikt mazus objektus (zemas izšķirtspējas dēļ).

Viens no jautājumiem, ko saņēmu komentāros pie mana iepriekšējā raksta par attēlu atpazīšanu, ir tas, kā nosūtīt atklāšanas rezultātus, izmantojot UART/I2C uz citu ierīci, kas savienota ar Sipeed izstrādes plates. Manā github krātuvē jūs varēsit atrast citu skripta paraugu - raccoon_detector_uart.py, kas (jūs uzminējāt) atklāj jenotus un nosūta ierobežojošo lodziņu koordinātas virs UART. Paturiet prātā, ka UART saziņai izmantotās tapas ir atšķirīgas no dažādiem dēļiem, un tas ir jāpārbauda dokumentācijā.

6. darbība. Kopsavilkums

Kendryte K210 ir cieta mikroshēma datora redzei, elastīga, kaut arī ar ierobežotu atmiņu. Līdz šim manās apmācībās mēs esam apskatījuši tā izmantošanu pielāgotu objektu atpazīšanai, pielāgotu objektu noteikšanai un dažu OpenMV balstītu datora redzes uzdevumu izpildei. Es skaidri zinu, ka tas ir piemērots arī sejas atpazīšanai, un ar nelielu piepūli vajadzētu būt iespējai veikt pozu noteikšanu un attēlu segmentēšanu (semantiskās segmentācijas modeļa apmācībai varat izmantot aXeleRate, bet es vēl neīstenoju secinājumu ar K210). Jūtieties brīvi apskatīt aXeleRate krātuves problēmas un izveidojiet PR, ja domājat, ka ir daži uzlabojumi, ko varat sniegt!

Šeit ir daži raksti, kurus izmantoju, rakstot šo pamācību. Apskatiet, vai vēlaties uzzināt vairāk par objektu noteikšanu, izmantojot neironu tīklus:

Robežkastes objektu detektori: saprotot YOLO, jūs izskatāties tikai vienu reizi

Izpratne par YOLO (vairāk matemātikas)

Maigs ceļvedis par to, kā YOLO objektu lokalizācija darbojas kopā ar Keras (2. daļa)

Reāllaika objektu noteikšana, izmantojot YOLO, YOLOv2 un tagad YOLOv3

Ceru, ka varat izmantot savas zināšanas, lai izveidotu lieliskus projektus ar mašīnas redzējumu! Jūs varat iegādāties Sipeed dēļus šeit, tie ir vieni no lētākajiem ML pieejamajiem variantiem iegultās sistēmās.

Pievienojiet mani LinkedIn, ja jums ir kādi jautājumi, un abonējiet manu YouTube kanālu, lai saņemtu paziņojumu par interesantākiem projektiem, kas saistīti ar mašīnmācīšanos un robotiku.

Ieteicams: