Sisukord:

Objektide tuvastamine Sipeed MaiX tahvlitega (Kendryte K210): 6 sammu
Objektide tuvastamine Sipeed MaiX tahvlitega (Kendryte K210): 6 sammu

Video: Objektide tuvastamine Sipeed MaiX tahvlitega (Kendryte K210): 6 sammu

Video: Objektide tuvastamine Sipeed MaiX tahvlitega (Kendryte K210): 6 sammu
Video: Privacy, Security, Society - Computer Science for Business Leaders 2016 2024, November
Anonim
Image
Image

Jätkates oma eelmisele artiklile pildituvastuse kohta Sipeed MaiX Boards'iga, otsustasin kirjutada veel ühe õpetuse, keskendudes objektide tuvastamisele. Hiljuti ilmus Kendryte K210 kiibiga huvitav riistvara, sealhulgas Seeed AI Hat for Edge Computing, M5 virna M5StickV ja DFRobot'i HuskyLens (kuigi sellel on patenteeritud püsivara ja see on rohkem mõeldud algajatele). Odava hinna tõttu on Kendryte K210 inimestele meeldinud, soovides oma projektidesse arvutinägemust lisada. Kuid nagu Hiina riistvaratoodete puhul tavaliselt, puudub tehniline tugi ja seda püüan oma artiklite ja videotega parandada. Kuid pidage meeles, et ma ei kuulu Kendryte või Sipeed arendajate meeskonda ega saa vastata kõigile nende tootega seotud küsimustele.

Seda silmas pidades alustame! Alustame lühikese (ja lihtsustatud) ülevaatega objektide tuvastamise CNN -mudelite toimimisest.

VÄRSKENDAMINE MAI 2020: Nähes, kuidas minu artikkel ja video objektide tuvastamise kohta K210 tahvlitega on endiselt väga populaarsed ning YouTube'i ja Google'i parimate tulemuste hulgas, otsustasin artiklit värskendada, lisades teabe aXeleRate, Keras-põhise AI raamistiku kohta Serv I areneb. Põhimõtteliselt põhineb aXeleRate skriptide kogumil, mida kasutasin pildituvastuse/objektide tuvastamise mudelite koolitamiseks - kombineerituna üheks raamistikuks ja optimeeritud Google Colabi töövoo jaoks. Seda on mugavam kasutada ja ajakohasem.

Artikli vana versiooni puhul näete seda endiselt saidil steemit.com.

1. samm: objekti tuvastamise mudeli arhitektuuri selgitamine

Objekti tuvastamise mudeli arhitektuur on selgitatud
Objekti tuvastamise mudeli arhitektuur on selgitatud
Objekti tuvastamise mudeli arhitektuur on selgitatud
Objekti tuvastamise mudeli arhitektuur on selgitatud

Pildituvastuse (või pildiklassifikatsiooni) mudelid võtavad sisendina kogu pildi ja väljastavad iga klassi, mida proovime ära tunda, tõenäosuste loendi. See on väga kasulik, kui meid huvitav objekt hõivab suure osa pildist ja me ei hooli selle asukohast eriti. Aga mis siis, kui meie projekt (näiteks näo jälgimiskaamera) nõuab meilt mitte ainult teadmisi pildil oleva objekti tüübi kohta, vaid ka selle koordinaate. Ja mis saab projektist, mis nõuab mitme objekti tuvastamist (näiteks loendamiseks)?

Siin on abiks objektide tuvastamise mudelid. Selles artiklis kasutame YOLO (vaatate ainult üks kord) arhitektuuri ja keskendume selgitustele selle konkreetse arhitektuuri sisemisele mehaanikale.

Püüame kindlaks teha, millised objektid on pildil ja millised on nende koordinaadid. Kuna masinõpe ei ole maagia ja mitte "mõtlev masin", vaid lihtsalt algoritm, mis kasutab statistikat funktsiooni (närvivõrk) optimeerimiseks konkreetse probleemi paremaks lahendamiseks. Peame selle probleemi parafraseerima, et muuta see "optimeeritumaks". Naiivne lähenemine oleks see, kui algoritm minimeeriks kaotuse (erinevuse) selle ennustamise ja objekti õigete koordinaatide vahel. See toimiks päris hästi, kui meil on pildil ainult üks objekt. Mitme objekti puhul kasutame erinevat lähenemist - lisame võrgu ja paneme oma võrgu ennustama objekti (objektide) olemasolu (või puudumist) igas ruudustikus. Kõlab suurepäraselt, kuid jätab võrgule siiski liiga palju ebakindlust - kuidas ennustust väljastada ja mida teha, kui ühe ruudustiku sees on mitu objekti, mille keskpunkt on? Peame lisama veel ühe piirangu - nn ankrud. Ankrud on esialgsed suurused (laius, kõrgus), millest mõned (objekti suurusele kõige lähemal) muudetakse objekti suuruseks - kasutades mõningaid närvivõrgu väljundeid (lõplik funktsioonikaart).

Niisiis, siin on tipptasemel vaade sellele, mis toimub siis, kui YOLO arhitektuuri närvivõrk teostab pildil objekti tuvastamise. Vastavalt funktsioonide ekstraheerimisvõrgu tuvastatud funktsioonidele koostatakse iga ruudustiku lahtri jaoks prognooside komplekt, mis sisaldab ankrute nihet, ankru tõenäosust ja ankruklassi. Siis lükkame ennustused väikese tõenäosusega kõrvale ja voila!

Samm: valmistage keskkond ette

Valmistage keskkond ette
Valmistage keskkond ette

aXeleRate põhineb penny4860, SVHN yolo-v2 numbridetektori imelisel projektil. aXeleRate viib selle YOLO detektori Kerasis juurutamise järgmisele tasemele ja kasutab oma mugavat konfiguratsioonisüsteemi erinevate taustaprogrammidega pildituvastuse/objektide tuvastamise ja piltide segmenteerimise võrkude koolitamiseks ja teisendamiseks.

AXeleRate'i kasutamiseks on kaks võimalust: kohapeal töötamine Ubuntu masinas või Google Colabis. Google Colabis töötamiseks vaadake seda näidet:

PASCAL-VOC Object Detection Colabi sülearvuti

Samuti on nüüd palju lihtsam oma mudelit kohapeal koolitada ja riistvarakiirendusega kasutamiseks eksportida. Soovitan tungivalt installida kõik vajalikud sõltuvused Anaconda keskkonda, et hoida oma projekt teistest eraldatuna ja vältida konflikte.

Laadige installer alla siit.

Pärast installimise lõppu looge uus keskkond:

conda create -n yolo python = 3.7

Aktiveerime uue keskkonna

conda aktiveeri yolo

Bashi kesta ees ilmub eesliide koos keskkonna nimega, mis näitab, et töötate praegu selles keskkonnas.

Installige aXeleRate oma kohalikku masinasse

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

Seejärel käivitage see koolituste ja järelduste jaoks vajalike skriptide allalaadimiseks:

git kloon

Kiireid teste saate käivitada kaustas aXeleRate, kasutades teste_training.py. See korraldab koolitust ja järeldab iga mudeli tüübi kohta, salvestab ja teisendab koolitatud mudeleid. Kuna see on koolitus ainult 5 ajastul ja andmekogum on väga väike, ei saa te kasulikke mudeleid hankida, kuid see skript on mõeldud ainult vigade puudumise kontrollimiseks.

3. samm: treenige objekti tuvastamise mudelit Kerasiga

Treenige objekti tuvastamise mudelit Kerasiga
Treenige objekti tuvastamise mudelit Kerasiga

Nüüd saame konfiguratsioonifailiga käivitada treeningskripti. Kuna YOLO objektidetektori Kerase rakendamine on üsna keeruline, selgitan selle asemel, et selgitada iga asjakohast kooditükki, selgitan koolituse seadistamist ja kirjeldan ka asjakohaseid mooduleid, juhuks kui soovite neid ise muuta.

Alustame mänguasja näitega ja treenime kährikudetektori. Kausta /config sees on konfiguratsioonifail raccoon_detector.json. Arhitektuuriks valime MobileNet7_5 (kus 7_5 on algse Mobileneti rakenduse alfaparameeter, juhib võrgu laiust) ja sisendi suuruseks 224x224. Vaatame konfiguratsiooni kõige olulisemaid parameetreid:

Tüüp on mudeli esiplaan - klassifikaator, detektor või segnet Arhitektuur on mudeli taustaprogramm (funktsioonide väljavõtja)

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

Ankrute kohta lisateabe saamiseks lugege palun siin

Sildid on teie andmekogus olevad sildid. TÄHTIS: Palun loetlege kõik andmestikus olevad sildid.

object_scale määrab, kui palju karistada objekti ennustajate vale usalduse ennustamist

no_object_scale määrab, kui palju karistada mitteobjektide ennustajate vale usalduse ennustamist

coord_scale määrab, kui palju karistada vale asukoha ja suuruse ennustuste eest (x, y, w, h)

class_scale määrab, kui palju karistada vale klassi ennustamist

augumentation - pildi suurendamine, suuruse muutmine, nihutamine ja pildi hägustamine, et vältida liigset sobitamist ja andmekogumi mitmekesisust.

rongiajad, valideerimisajad - mitu korda andmestikku korrata. Kasulik, kui teil on täiendus

lubatud

first_trainable_layer - võimaldab teil teatud kihid külmutada, kui kasutate eelnevalt koolitatud funktsioonivõrku

Nüüd peame alla laadima andmekogumi, mida jagasin oma Google Drive'is (algne andmekogum), mis on kährikutuvastuse andmestik, mis sisaldab 150 kommenteeritud pilti.

Muutke kindlasti konfiguratsioonifaili (rongi_pildi_kaust, rongi_kaust) ridu ja alustage treeningut järgmise käsuga:

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

train.py loeb konfiguratsiooni.json -failist ja treenib mudelit skriptiga axelerate/network/yolo/yolo_frontend.py. yolo/backend/loss.py on see, kus rakendatakse kohandatud kadumisfunktsiooni ja yolo/backend/network.py on see, kus mudel luuakse (sisend-, funktsioonide väljatõmbe- ja tuvastuskihid kokku). axelerate/network/common_utils/fit.py on skript, mis rakendab koolitusprotsessi ja axelerate/networks/common_utils/feature.py sisaldab funktsioonide väljavõtjaid. Kui kavatsete kasutada koolitatud mudelit koos K210 kiibi ja Micropythoni püsivaraga, saate mälu piirangute tõttu valida MobileNeti (2_5, 5_0 ja 7_5) ja TinyYolo vahel, kuid olen leidnud, et MobileNet annab parema tuvastamise täpsuse.

Kuna see on mänguasja näide ja sisaldab ainult 150 pesukaru pilti, peaks treeningprotsess olema isegi GPU -ta kasutamata üsna kiire, kuigi täpsus pole kaugeltki kaugeltki. Tööga seotud projekti jaoks olen koolitanud liiklusmärkide ja numbridetektori, mõlemad andmekogumid sisaldasid üle paari tuhande koolitusnäite.

Samm: teisendage see.kmodeli vorminguks

Teisenda see.kmodeli vormingusse
Teisenda see.kmodeli vormingusse

AXeleRate'i abil toimub mudeli teisendamine automaatselt - see on ilmselt suurim erinevus treeningskriptide vanast versioonist! Lisaks saate mudelifailid ja treeninggraafiku korralikult projekti kausta salvestada. Samuti leidsin, et muutmise täpsus ei anna mõnikord hinnangut mudeli tegeliku jõudluse kohta objektide tuvastamiseks ja seepärast lisasin objektide tuvastamise mudelite valideerimismõõdikuna mAP. MAP -i kohta saate rohkem lugeda siit.

Kui mAP, keskmine keskmine täpsus (meie valideerimismõõdik) ei parane 20 ajastul, peatub koolitus enneaegselt. Iga kord, kui mAP paraneb, salvestatakse mudel projekti kausta. Pärast treeningu lõppu teisendab aXeleRate parima mudeli automaatselt määratud vormingutesse - praeguse seisuga saate valida "tflite", "k210" või "edgetpu".

Nüüd viimase sammu juurde, tegelikult meie mudeli käitamine Sipeedi riistvaraga!

Samm: käitage Micropythoni püsivara

Käivitage Micropythoni püsivara
Käivitage Micropythoni püsivara

Meie C -koodiga objekti tuvastamise mudeliga on võimalik teha järeldusi, kuid mugavuse huvides kasutame selle asemel Micropythoni püsivara ja MaixPy IDE -d.

Laadige siit alla MaixPy IDE ja siit Micropython püsivara. Püsivara põletamiseks võite kasutada pythoni skripti kflash.py või alla laadida eraldi GUI välgutööriista.

Kopeerige model.kmodel SD -kaardi juure ja sisestage SD -kaart Sipeed Maix Bit'i (või mõnda muusse K210 -seadmesse). Teise võimalusena saate põletada.kmodel seadme välkmällu. Minu näiteskript loeb välkmälust.kmodel. Kui kasutate SD -kaarti, muutke seda rida

ülesanne = kpu.load (0x200000)

et

ülesanne = kpu.load ("/sd/model.kmodel")

Avage MaixPy IDE ja vajutage ühendamisnuppu. Avage skript raccoon_detector.py kaustast example_scripts/k210/detector ja vajutage nuppu Start. Te peaksite nägema kaamerast otseülekannet, mille ümber on piiravad kastid … noh, kährikud. Saate mudeli täpsust suurendada, esitades rohkem koolitusnäiteid, kuid pidage meeles, et see on väike väike mudel (1,9 M) ja tal on probleeme väikeste objektide tuvastamisega (madala eraldusvõime tõttu).

Üks küsimus, mille sain oma eelmise pildituvastust käsitleva artikli kommentaarides, on see, kuidas saata tuvastamistulemused UART/I2C kaudu teisele seadmele, mis on ühendatud Sipeedi arendusplaatidega. Minu githubi hoidlast leiate veel ühe näidiskripti raccoon_detector_uart.py, mis (arvate ära) tuvastab kährikud ja saadab piirdebokside koordinaadid üle UART -i. Pidage meeles, et UART -suhtluseks kasutatavad tihvtid on erinevatel tahvlitel erinevad, seda peate dokumentides ise kontrollima.

6. samm: kokkuvõte

Kendryte K210 on kindel kiip arvutite nägemiseks, paindlik, kuigi piiratud mäluga. Siiani on minu õpetustes käsitletud selle kasutamist kohandatud objektide äratundmiseks, kohandatud objektide tuvastamiseks ja mõnede OpenMV -põhiste arvutinägemisülesannete käivitamiseks. Ma tean kindlalt, et see sobib ka näotuvastuseks ning mõningase nokitsemisega peaks olema võimalik teha poosituvastust ja piltide segmenteerimist (semantilise segmenteerimismudeli treenimiseks saate kasutada aXeleRate'i, kuid ma ei rakendanud veel järeldust K210 -ga). Vaadake julgelt aXeleRate'i hoidla probleeme ja tehke suhtekorraldus, kui arvate, et saate mõningaid parandusi teha!

Siin on mõned artiklid, mida selle õpetuse kirjutamisel kasutasin. Vaadake, kui soovite rohkem teada saada närvivõrkudega objektide tuvastamise kohta:

Piirdekasti objektidetektorid: YOLOst aru sa vaatad ainult üks kord

YOLO mõistmine (rohkem matemaatikat)

Õrn juhend selle kohta, kuidas YOLO objektide lokaliseerimine töötab koos Kerasega (2. osa)

Reaalajas objektide tuvastamine YOLO, YOLOv2 ja nüüd YOLOv3 abil

Loodetavasti saate oma olemasolevaid teadmisi kasutada masina nägemisega vingete projektide loomiseks! Siipplaate saate osta siit, need on ühed odavaimad võimalused, mis on manussüsteemides ML -i jaoks saadaval.

Kui teil on küsimusi, lisage mind LinkedIni ja tellige minu YouTube'i kanal, et saada märguandeid huvitavamate masinõppe ja robootikaga seotud projektide kohta.

Soovitan: