Sisukord:
- 1. samm: objekti tuvastamise mudeli arhitektuuri selgitamine
- Samm: valmistage keskkond ette
- 3. samm: treenige objekti tuvastamise mudelit Kerasiga
- Samm: teisendage see.kmodeli vorminguks
- Samm: käitage Micropythoni püsivara
- 6. samm: kokkuvõte
Video: Objektide tuvastamine Sipeed MaiX tahvlitega (Kendryte K210): 6 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:46
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
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
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
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
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
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:
WiFi automaatühenduse kasutamine ESP8266/ESP32 tahvlitega: 3 sammu
WiFi automaatühenduse kasutamine koos ESP8266/ESP32 tahvlitega: õpime kasutama teeki AutoConnect, mis võimaldab meil nutitelefoni abil WiFi -pöörduspunktidega ühenduse luua ja neid hallata. Ülaltoodud video juhendab teid protsessis koos vajalike ekraanidega. juurde pääseda, et saada teavet selle kohta
Vaarika Pi objektide tuvastamine: 7 sammu
Raspberry Pi objektide tuvastamine: see juhend pakub samm-sammult juhiseid TensorFlow objekti tuvastamise API seadistamiseks Raspberry Pi-le. Selle juhendi juhiseid järgides saate oma Raspberry Pi abil teha objekti tuvastamist reaalajas videol
Objektide tuvastamine RC -autoga sõites: 9 sammu
Objektide tuvastamine RC -autoga sõites: See projekt käsitleb ultraheli andurite kasutamist autos takistuste tuvastamiseks
Sipeed MaiX Bit OpenMV demod - arvuti nägemine: 3 sammu
Sipeed MaiX Bit OpenMV demod - arvuti nägemine: see on teine artikkel sarjas Sipeed AI kohta Edge mikrokontrolleri platvormil. Seekord kirjutan MaiX Bitist (link saidile Seeed Studio Shop), väiksemast, leivaplaadi jaoks valmis arendusplaadist. Selle spetsifikatsioonid on väga sarnased
Visuaalsete objektide tuvastamine kaameraga (TfCD): 15 sammu (piltidega)
Visuaalsete objektide tuvastamine kaameraga (TfCD): kognitiivsed teenused, mis suudavad ära tunda emotsioone, inimeste nägusid või lihtsaid objekte, on praegu alles arengu alguses, kuid masinõppega areneb see tehnoloogia üha enam. Me võime eeldada, et näeme seda võlu rohkem