INHOUDSOPGAWE:

Voorwerpopsporing met Sipeed MaiX -borde (Kendryte K210): 6 stappe
Voorwerpopsporing met Sipeed MaiX -borde (Kendryte K210): 6 stappe

Video: Voorwerpopsporing met Sipeed MaiX -borde (Kendryte K210): 6 stappe

Video: Voorwerpopsporing met Sipeed MaiX -borde (Kendryte K210): 6 stappe
Video: RiscV (K210) board driving a nema17 stepper motor with high torque 2024, Julie
Anonim
Image
Image

As 'n voortsetting van my vorige artikel oor beeldherkenning met Sipeed MaiX Boards, het ek besluit om nog 'n handleiding te skryf, met die fokus op objekopsporing. Daar het onlangs 'n paar interessante hardeware verskyn met die Kendryte K210 -chip, insluitend Seeed AI Hat for Edge Computing, M5StickV's M5StickV en DFRobot's HuskyLens (alhoewel die een eie firmware het en meer gerig is op volledige beginners). Vanweë die goedkoop prys, het Kendryte K210 'n beroep op mense gedoen, wat rekenaarvisie by hul projekte wou voeg. Maar soos gewoonlik met Chinese hardeware -produkte, ontbreek die tegniese ondersteuning, en dit is iets wat ek probeer verbeter met my artikels en video's. Hou egter in gedagte dat ek nie deel is van die Kendryte- of Sipeed -ontwikkelaarspan nie en nie al die vrae rakende hul produk kan beantwoord nie.

Met dit in gedagte, laat ons begin! Ons begin met 'n kort (en vereenvoudigde) oorsig van hoe CNN -modelle vir objekherkenning werk.

UPDATE MEI 2020: Toe ek sien hoe my artikel en video oor objekopsporing met K210-borde nog steeds baie gewild is, en onder die beste resultate op YouTube en Google, het ek besluit om die artikel op te dateer om die inligting oor aXeleRate, Keras-gebaseerde raamwerk vir AI op die Edge ontwikkel ek. aXeleRate is in wese gebaseer op die versameling skrifte wat ek gebruik het vir die opleiding van beeldherkennings-/objekopsporingsmodelle - gekombineer tot 'n enkele raamwerk en geoptimaliseer vir werkstroom op Google Colab. Dit is geriefliker om te gebruik en meer op datum.

Vir die ou weergawe van die artikel kan u dit steeds op steemit.com sien.

Stap 1: Voorwerpopsporingsmodelargitektuur verduidelik

Objekopsporingsmodelargitektuur verduidelik
Objekopsporingsmodelargitektuur verduidelik
Objekopsporingsmodelargitektuur verduidelik
Objekopsporingsmodelargitektuur verduidelik

Modelle vir beeldherkenning (of beeldklassifikasie) neem die hele beeld as 'n invoer en gee 'n lys met waarskynlikhede vir elke klas wat ons probeer herken. Dit is baie handig as die voorwerp waarin ons belangstel 'n groot deel van die beeld beslaan en ons nie veel omgee vir die ligging daarvan nie. Maar wat as ons projek (byvoorbeeld kamera vir gesigsporing) vereis dat ons nie net kennis dra van die tipe voorwerp in die beeld nie, maar ook van die koördinate daarvan. En wat van die projek wat die opsporing van verskeie voorwerpe vereis (byvoorbeeld om te tel)?

Dit is wanneer objekopsporingsmodelle handig te pas kom. In hierdie artikel gebruik ons YOLO (jy kyk net een keer) argitektuur en fokus die verduideliking op die interne meganika van hierdie spesifieke argitektuur.

Ons probeer vasstel watter voorwerpe in die prentjie voorkom en wat hul koördinate is. Aangesien masjienleer nie magie is nie en nie 'n denkmasjien 'nie, maar slegs 'n algoritme wat statistieke gebruik om die funksie (neurale netwerk) te optimaliseer om 'n spesifieke probleem beter op te los. Ons moet hierdie probleem omskryf om dit meer 'optimaliseerbaar' te maak. 'N Naïewe benadering hier is dat die algoritme die verlies (verskil) tussen die voorspelling en die korrekte koördinate van die voorwerp tot 'n minimum beperk. Dit sal redelik goed werk, solank ons slegs een voorwerp in die prentjie het. Vir verskeie voorwerpe neem ons 'n ander benadering - ons voeg die rooster by en laat ons netwerk die teenwoordigheid (of afwesigheid) van die voorwerp (e) in elke rooster voorspel. Dit klink wonderlik, maar laat steeds te veel onsekerheid vir die netwerk - hoe kan u die voorspelling lewer en wat om te doen as daar veelvuldige voorwerpe met 'n middel in een roostersel is? Ons moet nog 'n beperking byvoeg - sogenaamde ankers. Ankers is aanvanklike groottes (breedte, hoogte) waarvan sommige (die naaste aan die grootte van die voorwerp) na die voorwerpgrootte verander word - met behulp van sommige uitsette van die neurale netwerk (finale funksiekaart).

Hier is 'n uitsig op die hoogste vlak oor wat aan die gang is wanneer die neurale netwerk van YOLO-argitektuur 'n voorwerpopsporing op die beeld uitvoer. Volgens funksies wat deur funksie -aftrekkernetwerk opgespoor word, word 'n stel voorspellings gemaak vir elke roostersel, wat die verrekening van ankers, ankerwaarskynlikheid en ankerklas insluit. Dan gooi ons die voorspellings met 'n lae waarskynlikheid en voila weg!

Stap 2: Berei die omgewing voor

Berei die omgewing voor
Berei die omgewing voor

aXeleRate is gebaseer op 'n wonderlike projek deur penny4860, SVHN yolo-v2-syfer-detektor. aXeleRate neem hierdie implementering van die YOLO -detektor in Keras na 'n volgende vlak en gebruik sy gerieflike konfigurasiestelsel om opleiding en omskakeling van beeldherkenning/objekopsporing en beeldsegmenteringsnetwerke uit te voer met verskillende backends.

Daar is twee maniere om aXeleRate te gebruik: plaaslik op Ubuntu -masjien of in Google Colab. Kyk na hierdie voorbeeld om in Google Colab te werk:

PASCAL-VOC Object Detection Colab Notebook

Dit is ook baie makliker om u model plaaslik op te lei en uit te voer om dit met hardewareversnelling te gebruik.

Laai die installeerder hier af.

Skep 'n nuwe omgewing nadat die installasie voltooi is:

conda create -n yolo python = 3.7

Laat ons die nuwe omgewing aktiveer

konda aktiveer yolo

'N Voorvoegsel voor u bash -dop verskyn met die naam van die omgewing, wat aandui dat u nou in die omgewing werk.

Installeer aXeleRate op u plaaslike masjien met

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

En voer dit dan uit om skrifte af te laai wat u benodig vir opleiding en afleiding:

git -kloon

U kan vinnige toetse met tests_training.py in 'n aXeleRate -lêergids uitvoer. Dit sal opleiding en afleiding vir elke modeltipe uitvoer, opgeleide modelle stoor en omskakel. Aangesien dit slegs opleiding vir 5 tydperke is en die datastel baie klein is, kan u nie nuttige modelle kry nie, maar hierdie skrif is slegs bedoel om te kyk of daar nie foute is nie.

Stap 3: Leer 'n voorwerpopsporingsmodel op met Keras

Leer 'n voorwerpopsporingsmodel op met Keras
Leer 'n voorwerpopsporingsmodel op met Keras

Nou kan ons 'n opleidingsskrif met die konfigurasielêer uitvoer. Aangesien Keras se implementering van YOLO -objekdetektor redelik ingewikkeld is, sal ek verduidelik hoe u die opleiding moet instel en ook relevante modules moet beskryf in plaas daarvan om elke relevante kode te verduidelik.

Kom ons begin met 'n speelding -voorbeeld en lei 'n wasbeerdetektor op. Daar is 'n config -lêer in die /config -lêergids, raccoon_detector.json. Ons kies MobileNet7_5 as argitektuur (waar 7_5 die alfa -parameter van die oorspronklike Mobilenet -implementering is, die breedte van die netwerk beheer) en 224x224 as invoergrootte. Kom ons kyk na die belangrikste parameters in die konfigurasie:

Tipe is model frontend - Classifier, Detector of SegnetArchitecture is model backend (funksie extractor)

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

Lees hier meer https://github.com/pjreddie/darknet/issues/568 vir meer inligting oor ankers

Etikette is etikette wat in u datastel voorkom. BELANGRIK: Maak 'n lys van al die etikette in die datastel.

object_scale bepaal hoeveel om verkeerde voorspelling van vertroue van voorwerpvoorspellers te straf

no_object_scale bepaal hoeveel om verkeerde voorspelling van vertroue van nie-objekvoorspellers te penaliseer

coord_scale bepaal hoeveel om verkeerde posisie en groottevoorspellings te penaliseer (x, y, w, h)

class_scale bepaal hoeveel om verkeerde klasvoorspelling te straf

augumentation - beeldvergroting, die grootte, die verskuiwing en vervaging van die beeld om te voorkom dat dit te veel pas en 'n groter verskeidenheid in datastelle kan hê.

train_times, validation_times - hoeveel keer om die datastel te herhaal. Nuttig as u 'n aanvulling het

geaktiveer

first_trainable_layer - stel u in staat om sekere lae te vries as u 'n vooraf opgeleide funksienetwerk gebruik

Nou moet ons die datastel aflaai wat ek op my Google Drive gedeel het (oorspronklike datastel), wat 'n raketopsporingsdatastel is, wat 150 geannoteerde foto's bevat.

Maak seker dat u die reëls in die konfigurasielêer (train_image_folder, train_annot_folder) dienooreenkomstig verander en begin dan met die opleiding met die volgende opdrag:

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

train.py lees die konfigurasie uit die.json -lêer en lei die model op met 'n axelerate/netwerke/yolo/yolo_frontend.py -script. yolo/backend/loss.py is waar die persoonlike verliesfunksie geïmplementeer word en yolo/backend/network.py is die plek waar die model geskep word (invoer, funksie -extractor en opsporingslae saamgestel). axelerate/netwerke/common_utils/fit.py is 'n script wat die opleidingsproses implementeer en axelerate/netwerke/common_utils/feature.py bevat funksie -uittreksels. As u van plan is om 'n opgeleide model met K210 -chip en Micropython -firmware te gebruik, kan u as gevolg van geheue -beperkings kies tussen MobileNet (2_5, 5_0 en 7_5) en TinyYolo, maar ek het gevind dat MobileNet 'n beter akkuraatheid van opsporing bied.

Aangesien dit 'n speelding is en slegs 150 beelde van wasbeer bevat, behoort die opleidingsproses redelik vinnig te wees, selfs sonder GPU, hoewel die akkuraatheid ver van sterre sal wees. Vir werkverwante projekte het ek 'n verkeersborddetektor en 'n nommerverklikker opgelei. Beide datastelle bevat meer as 'n paar duisend opleidingsvoorbeelde.

Stap 4: Skakel dit om na.kmodel -formaat

Skakel dit om na.kmodel -formaat
Skakel dit om na.kmodel -formaat

Met aXeleRate word modelomskakeling outomaties uitgevoer - dit is waarskynlik die grootste verskil van die ou weergawe van opleidingsskrifte! Boonop kry u die modellêers en die opleidingsgrafiek netjies in die projektmap. Ek het ook agtergekom dat die akkuraatheid van vaiidasie soms nie 'n skatting gee van die werklike prestasie van die model vir objekopsporing nie, en daarom het ek mAP bygevoeg as 'n valideringsmetrik vir objekopsporingsmodelle. U kan hier meer lees oor mAP.

As die mAP, gemiddelde gemiddelde presisie (ons validasie -metriek) vir 20 tydperke nie verbeter nie, stop die opleiding voortydig. Elke keer as mAP verbeter, word die model in die projekmap gestoor. Nadat die opleiding verby is, skakel aXeleRate die beste model outomaties om in gespesifiseerde formate - u kan vanaf nou "tflite", "k210" of "edgetpu" kies.

Nou tot by die laaste stap: ons model werk eintlik op Sipeed -hardeware!

Stap 5: Begin met die Micropython -firmware

Begin op die Firmware van Micropython
Begin op die Firmware van Micropython

Dit is moontlik om afleiding te maak van ons objekopsporingsmodel met C -kode, maar om gemak te gebruik, gebruik ons Micropython -firmware en MaixPy IDE in plaas daarvan.

Laai MaixPy IDE hier af en mikropython -firmware van hier af. U kan python script kflash.py gebruik om die firmware te verbrand of 'n aparte GUI -flitshulpmiddel hier af te laai.

Kopieer model.kmodel na die wortel van 'n SD -kaart en plaas die SD -kaart in die Sipeed Maix Bit (of 'n ander K210 -toestel). U kan ook.kmodel na die flitsgeheue van die toestel verbrand. My voorbeeldskrif lees.kmodel uit die flitsgeheue. Verander hierdie reël as u 'n SD -kaart gebruik

taak = kpu.load (0x200000)

aan

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

Maak MaixPy IDE oop en druk die verbindingsknoppie. Maak die wasbeer_detector.py -script oop uit die map_ example_scripts/k210/detector en druk die Start -knoppie. U behoort 'n regstreekse stroom van die kamera af te sien met bokse rondom … wel wasbere. U kan die akkuraatheid van die model verhoog deur meer opleidingsvoorbeelde te gee, maar hou in gedagte dat dit 'n klein klein model (1,9 M) is en probleme met die opsporing van klein voorwerpe (weens lae resolusie) sal ondervind.

Een van die vrae wat ek in die kommentaar op my vorige artikel oor beeldherkenning gekry het, is hoe om die opsporingsresultate via UART/I2C na 'n ander toestel wat aan Sipeed -ontwikkelingsborde gekoppel is, te stuur. In my github -bewaarplek kan u nog 'n voorbeeldskrif vind, raccoon_detector_uart.py, wat (u raai dit) wasbere opspoor en die koördinate van die omringende bokse oor UART stuur. Hou in gedagte dat penne wat vir UART -kommunikasie gebruik word, van verskillende borde verskil; dit is iets wat u self in die dokumentasie moet nagaan.

Stap 6: Opsomming

Kendryte K210 is 'n soliede chip vir rekenaarvisie, buigsaam, hoewel daar beperkte geheue beskikbaar is. Tot dusver het ek in my tutoriale gedek oor die gebruik daarvan om aangepaste voorwerpe te herken, aangepaste voorwerpe op te spoor en enkele OpenMV -gebaseerde rekenaarvisie -take uit te voer. Ek weet dat dit ook geskik is vir gesigsherkenning, en met 'n bietjie geknoei moet dit moontlik wees om posopsporing en beeldsegmentering te doen (u kan aXeleRate gebruik om 'n semantiese segmenteringsmodel op te lei, maar ek het nog nie die afleiding met K210 geïmplementeer nie). Kyk gerus na die kwessies van aXeleRate -bewaarplekke en maak 'n PR as u dink daar is verbeterings wat u kan bydra!

Hier is 'n paar artikels wat ek gebruik het om hierdie tutoriaal te skryf; kyk gerus as u meer wil leer oor voorwerpopsporing met neurale netwerke:

Objekdetektore met omringende bokse: verstaan YOLO, jy kyk net een keer

YOLO verstaan (meer wiskunde)

Sagte gids oor hoe YOLO -objektlokalisering met Keras werk (deel 2)

Real-time voorwerpopsporing met YOLO, YOLOv2 en nou YOLOv3

Hoop dat u die kennis wat u nou het, kan gebruik om wonderlike projekte met masjienvisie te bou! U kan Sipeed -borde hier koop; dit is een van die goedkoopste opsies wat beskikbaar is vir ML op ingebedde stelsels.

Voeg my by LinkedIn as u enige vrae het en teken in op my YouTube -kanaal om in kennis gestel te word van meer interessante projekte rakende masjienleer en robotika.

Aanbeveel: