Satura rādītājs:
- 1. darbība. Izskaidrota objektu noteikšanas modeļa arhitektūra
- 2. solis: sagatavojiet vidi
- 3. darbība: apmāciet objektu noteikšanas modeli, izmantojot Keras
- 4. darbība: pārveidojiet to.kmodel formātā
- 5. darbība: palaidiet Micropython programmaparatūru
- 6. darbība. Kopsavilkums
Video: Objektu noteikšana ar Sipeed MaiX dēļiem (Kendryte K210): 6 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:51
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
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
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
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ā
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
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:
Attēlu atpazīšana ar K210 dēļiem un Arduino IDE/Micropython: 6 soļi (ar attēliem)
Attēlu atpazīšana, izmantojot K210 plates un Arduino IDE/Micropython: Es jau uzrakstīju vienu rakstu par to, kā palaist OpenMV demonstrācijas Sipeed Maix Bit, kā arī ar šo dēli izveidoju objekta noteikšanas demonstrācijas video. Viens no daudzajiem jautājumiem, ko cilvēki ir uzdevuši, ir - kā es varu atpazīt objektu, kuram neironu tīkls nav piemērots
Raspberry Pi objektu noteikšana: 7 soļi
Raspberry Pi objektu noteikšana: šajā rokasgrāmatā ir sniegti soli pa solim norādījumi, kā Raspberry Pi iestatīt TensorFlow objektu noteikšanas API. Izpildot šajā rokasgrāmatā norādītās darbības, jūs varēsit izmantot savu Raspberry Pi, lai veiktu objektu noteikšanu tiešraides video no P
Objektu noteikšana W/ Dragonboard 410c vai 820c, izmantojot OpenCV un Tensorflow .: 4 soļi
Objektu noteikšana W/ Dragonboard 410c vai 820c, izmantojot OpenCV un Tensorflow .: Šī instrukcija apraksta, kā instalēt OpenCV, Tensorflow un mašīnmācīšanās ietvarus Python 3.5, lai palaistu objektu noteikšanas lietojumprogrammu
Objektu noteikšana, braucot ar RC automašīnu: 9 soļi
Atklājiet objektus, braucot ar RC automašīnu: Šis projekts ir par ultraskaņas sensoru izmantošanu automašīnā, lai noteiktu šķēršļus
Sipeed MaiX bitu OpenMV demonstrācijas - datora redze: 3 soļi
Sipeed MaiX bitu OpenMV demonstrācijas - datora redze: Šis ir otrais raksts sērijā par Sipeed AI Edge mikrokontrolleru platformā. Šoreiz es rakstīšu par MaiX Bit (saite uz Seeed Studio Shop), mazāku, ar maizes dēli gatavu izstrādes dēli. Tās specifikācijas ir ļoti līdzīgas