Turinys:

Objekto aptikimas naudojant „Sipeed MaiX“plokštes („Kendryte K210“): 6 žingsniai
Objekto aptikimas naudojant „Sipeed MaiX“plokštes („Kendryte K210“): 6 žingsniai

Video: Objekto aptikimas naudojant „Sipeed MaiX“plokštes („Kendryte K210“): 6 žingsniai

Video: Objekto aptikimas naudojant „Sipeed MaiX“plokštes („Kendryte K210“): 6 žingsniai
Video: CS50 2014 - Week 9 2024, Liepa
Anonim
Image
Image

Tęsdamas ankstesnį straipsnį apie vaizdo atpažinimą naudojant „Sipeed MaiX Boards“, nusprendžiau parašyti dar vieną mokymo programą, daugiausia dėmesio skiriant objektų aptikimui. Neseniai pasirodė įdomi aparatinė įranga su „Kendryte K210“mikroschema, įskaitant „Seeed AI Hat Edge Computing“, „M5“kamino „M5StickV“ir „DFRobot“„HuskyLens“(nors ši turi patentuotą programinę įrangą ir yra labiau skirta pradedantiesiems). Dėl pigios kainos „Kendryte K210“kreipėsi į žmones, norėdama į savo projektus įtraukti kompiuterinę viziją. Tačiau, kaip įprasta naudojant Kinijos aparatūros gaminius, trūksta techninės pagalbos, ir tai bandau patobulinti savo straipsniais ir vaizdo įrašais. Tačiau atminkite, kad aš nepriklausau „Kendryte“ar „Sipeed“kūrėjų komandai ir negaliu atsakyti į visus klausimus, susijusius su jų produktu.

Turėdami tai omenyje, pradėkime! Pradėsime nuo trumpos (ir supaprastintos) objektų atpažinimo CNN modelių veikimo apžvalgos.

2020 m. GEGUŽĖS ATNAUJINIMAS: matydamas, kaip mano straipsnis ir vaizdo įrašas apie objektų aptikimą naudojant K210 plokštes vis dar yra labai populiarūs ir tarp geriausių „YouTube“ir „Google“rezultatų, nusprendžiau atnaujinti straipsnį, kad jame būtų informacija apie „aXeleRate“, „Keras“pagrįstą AI sistemą. I kraštas vystosi. „aXeleRate“iš esmės pagrįsta scenarijų rinkiniu, kurį naudoju mokydamas vaizdo atpažinimo/objektų aptikimo modelius - sujungtas į vieną sistemą ir optimizuotas darbo eigai „Google Colab“. Tai patogiau naudoti ir atnaujinti.

Senąją straipsnio versiją vis tiek galite pamatyti svetainėje steemit.com.

1 žingsnis: paaiškinta objektų aptikimo modelio architektūra

Paaiškinta objekto aptikimo modelio architektūra
Paaiškinta objekto aptikimo modelio architektūra
Paaiškinta objekto aptikimo modelio architektūra
Paaiškinta objekto aptikimo modelio architektūra

Vaizdo atpažinimo (arba vaizdo klasifikavimo) modeliai visą vaizdą laiko įvestimi ir pateikia kiekvienos klasės, kurią bandome atpažinti, tikimybių sąrašą. Tai labai naudinga, jei mus dominantis objektas užima didelę vaizdo dalį ir mums nelabai rūpi jo vieta. O kas, jei mūsų projektas (tarkime, veido stebėjimo kamera) reikalauja ne tik turėti žinių apie objekto tipą vaizde, bet ir jo koordinates. O kaip su projektu, kuriam reikia aptikti kelis objektus (pavyzdžiui, skaičiavimui)?

Štai tada praverčia objektų aptikimo modeliai. Šiame straipsnyje mes naudosime YOLO (jūs žiūrite tik vieną kartą) architektūrą ir paaiškinimą sutelksime į šios konkrečios architektūros vidinę mechaniką.

Mes bandome nustatyti, kokie objektai yra paveikslėlyje ir kokios yra jų koordinatės. Kadangi mašininis mokymasis nėra magija ir ne „mąstanti mašina“, o tik algoritmas, kuris naudoja statistiką, kad optimizuotų funkciją (neuroninį tinklą), kad geriau išspręstų tam tikrą problemą. Turime perfrazuoti šią problemą, kad ji būtų labiau „optimizuojama“. Naivus požiūris būtų toks, kad algoritmas sumažintų nuostolius (skirtumus) tarp numatymo ir teisingų objekto koordinačių. Tai veiktų gana gerai, jei paveikslėlyje yra tik vienas objektas. Kelių objektų atveju laikomės skirtingo požiūrio - pridedame tinklelį ir priverčiame tinklą numatyti objekto (-ų) buvimą (ar nebuvimą) kiekviename tinklelyje. Skamba puikiai, tačiau vis tiek palieka per daug neaiškumų tinklui - kaip išvesti prognozę ir ką daryti, kai vienos tinklelio ląstelės viduje yra keli objektai? Turime pridėti dar vieną apribojimą - vadinamuosius inkarus. Inkarai yra pradiniai dydžiai (plotis, aukštis), kai kurie iš jų (arčiausiai objekto dydžio) bus pakeisti į objekto dydį - naudojant kai kuriuos neuroninio tinklo išėjimus (galutinis funkcijų žemėlapis).

Taigi, čia yra aukščiausio lygio vaizdas, kas vyksta, kai YOLO architektūros neuroninis tinklas atvaizde aptinka objekto aptikimą. Pagal funkcijų ištraukimo tinklo aptiktas ypatybes, kiekvienai tinklelio ląstelei pateikiamas prognozių rinkinys, į kurį įeina inkarų poslinkis, inkaro tikimybė ir inkaro klasė. Tada mes atmetame prognozes su maža tikimybe ir voila!

2 žingsnis: Paruoškite aplinką

Paruoškite aplinką
Paruoškite aplinką

„aXeleRate“yra pagrįstas nuostabiu penny4860, SVHN yolo-v2 skaitmenų detektoriaus projektu. „aXeleRate“perkelia šį „YOLO“detektoriaus Keras įdiegimą į kitą lygį ir naudoja patogią konfigūracijos sistemą, skirtą mokymui ir vaizdo atpažinimo/objektų aptikimo ir vaizdo segmentavimo tinklų su įvairiomis foninėmis programomis konvertavimui.

Yra du būdai, kaip naudoti „aXeleRate“: veikia vietoje „Ubuntu“kompiuteryje arba „Google Colab“. Jei norite paleisti „Google Colab“, peržiūrėkite šį pavyzdį:

„PASCAL-VOC Object Detection Colab Notebook“

Dabar taip pat daug lengviau mokyti savo modelį vietoje ir eksportuoti jį naudoti su aparatūros spartinimu. Aš labai rekomenduoju įdiegti visas būtinas priklausomybes „Anaconda“aplinkoje, kad jūsų projektas būtų atskirtas nuo kitų ir išvengtumėte konfliktų.

Atsisiųskite diegimo programą čia.

Baigę diegti, sukurkite naują aplinką:

conda create -n yolo python = 3.7

Suaktyvinkime naują aplinką

conda aktyvuoti yolo

Prieš jūsų „bash“apvalkalą bus rodomas priešdėlis su aplinkos pavadinimu, rodančiu, kad dabar dirbate toje aplinkoje.

Įdiekite „aXeleRate“savo vietiniame kompiuteryje naudodami

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

Tada paleiskite tai, kad atsisiųstumėte scenarijus, kurių jums reikės mokymui ir išvadoms:

git klonas

Galite atlikti greitus testus naudodami test_training.py aplanke aXeleRate. Ji vykdys mokymus ir padarys išvadas kiekvienam modelio tipui, išsaugos ir konvertuos apmokytus modelius. Kadangi tai tik 5 epochų mokymai, o duomenų rinkinys yra labai mažas, negalėsite gauti naudingų modelių, tačiau šis scenarijus skirtas tik patikrinti, ar nėra klaidų.

3 žingsnis: išmokykite objektų aptikimo modelį naudodami „Keras“

Treniruokite objektų aptikimo modelį su Keras
Treniruokite objektų aptikimo modelį su Keras

Dabar galime paleisti mokymo scenarijų su konfigūracijos failu. Kadangi „Keras“YOLO objektų detektoriaus diegimas yra gana sudėtingas, užuot paaiškinęs kiekvieną atitinkamą kodo dalį, paaiškinsiu, kaip sukonfigūruoti mokymą, ir aprašysiu atitinkamus modulius, jei norite patys juos pakeisti.

Pradėkime nuo žaislo pavyzdžio ir išmokykime meškėnų detektorių. /Config aplanke yra konfigūracijos failas raccoon_detector.json. Mes pasirenkame „MobileNet7_5“kaip architektūrą (kur 7_5 yra pradinio „Mobilenet“diegimo alfa parametras, valdo tinklo plotį) ir 224x224 kaip įvesties dydį. Pažvelkime į svarbiausius konfigūracijos parametrus:

Tipas yra modelio priekinė dalis - klasifikatorius, detektorius arba segnetas Architektūra yra modelio užpakalinė dalis (funkcijų ištraukėjas)

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

Norėdami gauti daugiau informacijos apie inkarus, skaitykite čia

Etiketės yra etiketės, esančios jūsų duomenų rinkinyje. SVARBU: Prašome išvardyti visas duomenų rinkinyje esančias etiketes.

object_scale nustato, kiek bausti už neteisingą objektų prognozuotojų pasitikėjimo prognozavimą

no_object_scale nustato, kiek bausti už neteisingą ne objekto prognozuotojų pasitikėjimo prognozavimą

„coord_scale“nustato, kiek bausti už neteisingą padėties ir dydžio prognozę (x, y, w, h)

class_scale nustato, kiek bausti už neteisingą klasės prognozavimą

augmentation - vaizdo padidinimas, dydžio keitimas, poslinkis ir vaizdo suliejimas, kad būtų išvengta per didelio pritaikymo ir būtų daugiau duomenų rinkinio.

traukinio laikas, patvirtinimo laikas - kiek kartų kartoti duomenų rinkinį. Naudinga, jei turite papildymą

įjungtas

first_trainable_layer - leidžia užšaldyti tam tikrus sluoksnius, jei naudojate iš anksto apmokytą funkcijų tinklą

Dabar turime atsisiųsti duomenų rinkinį, kurį bendrinau savo „Google“diske (originalus duomenų rinkinys), kuris yra meškėnų aptikimo duomenų rinkinys, kuriame yra 150 anotuotų nuotraukų.

Būtinai pakeiskite konfigūracijos failo eilutes (traukinio_paveikslėlio_aplankas, traukinio_neaplankas) ir pradėkite mokymą naudodami šią komandą:

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

train.py nuskaito konfigūraciją iš.json failo ir moko modelį su scenarijumi axelerate/network/yolo/yolo_frontend.py. yolo/backend/loss.py yra tai, kur įgyvendinama pasirinktinė nuostolių funkcija, o yolo/backend/network.py - tai kuriamas modelis (įvesties, funkcijų ištraukimo ir aptikimo sluoksniai kartu). „axelerate/networks/common_utils/fit.py“yra scenarijus, įgyvendinantis mokymo procesą, o „axelerate“/tinklai/common_utils/feature.py yra funkcijų ištraukikliai. Jei ketinate naudoti apmokytą modelį su K210 mikroschema ir „Micropython“programine įranga, dėl atminties apribojimų galite pasirinkti „MobileNet“(2_5, 5_0 ir 7_5) ir „TinyYolo“, tačiau pastebėjau, kad „MobileNet“suteikia geresnį aptikimo tikslumą.

Kadangi tai yra žaislų pavyzdys ir jame yra tik 150 meškėnų vaizdų, mokymo procesas turėtų būti gana greitas, net ir be GPU, nors tikslumas bus toli gražu ne puikus. Su darbu susijusiam projektui aš išmokau kelio ženklų detektorių ir skaičių detektorių, abiejuose duomenų rinkiniuose buvo daugiau nei keli tūkstančiai mokymo pavyzdžių.

4 veiksmas: konvertuokite jį į.kmodel formatą

Konvertuokite jį į.kmodel formatą
Konvertuokite jį į.kmodel formatą

Naudojant „aXeleRate“modelio konvertavimas atliekamas automatiškai - tai turbūt didžiausias skirtumas nuo senosios mokymo scenarijų versijos! Be to, modelio failai ir mokymo grafikas tvarkingai išsaugomi projekto aplanke. Be to, aš pastebėjau, kad vairavimo tikslumas kartais nesuteikia objekto aptikimo modelio realaus našumo įvertinimo, todėl pridėjau mAP kaip objektų aptikimo modelių patvirtinimo metriką. Daugiau apie mAP galite perskaityti čia.

Jei mAP, vidutinis vidutinis tikslumas (mūsų patvirtinimo metrika) nepagerėja 20 epochų, mokymas bus nutrauktas anksčiau laiko. Kaskart tobulinant mAP, modelis išsaugomas projekto aplanke. Pasibaigus treniruotėms, „aXeleRate“automatiškai konvertuoja geriausią modelį į nurodytus formatus - nuo šiol galite pasirinkti „tflite“, „k210“arba „edgetpu“.

Dabar pereikite prie paskutinio žingsnio, iš tikrųjų paleiskite mūsų modelį naudodami „Sipeed“aparatinę įrangą!

5 veiksmas: paleiskite „Micropython“programinę -aparatinę įrangą

Paleiskite „Micropython“programinę įrangą
Paleiskite „Micropython“programinę įrangą

Galima daryti išvadą naudojant mūsų objektų aptikimo modelį su C kodu, tačiau patogumo dėlei naudosime „Micropython“programinę įrangą ir „MaixPy IDE“.

Atsisiųskite „MaixPy IDE“iš čia ir „MicroPython“programinę -aparatinę įrangą iš čia. Galite naudoti „python“scenarijų kflash.py, kad įrašytumėte programinę įrangą arba atsisiųstumėte atskirą GUI „flash“įrankį čia.

Nukopijuokite model.kmodel į SD kortelės šaknį ir įdėkite SD kortelę į „Sipeed Maix Bit“(arba kitą K210 įrenginį). Arba galite įrašyti.kmodel į įrenginio „flash“atmintį. Mano pavyzdiniame scenarijuje iš „flash“atminties rašoma.kmodel. Jei naudojate SD kortelę, pakeiskite šią eilutę

užduotis = kpu.load (0x200000)

į

užduotis = kpu.load ("/sd/model.kmodel")

Atidarykite „MaixPy IDE“ir paspauskite prisijungimo mygtuką. Atidarykite raccoon_detector.py scenarijų iš aplanko example_scripts/k210/detector ir paspauskite mygtuką Pradėti. Turėtumėte matyti tiesioginį srautą iš kameros su ribojančiomis dėžėmis … na, meškėnai. Galite padidinti modelio tikslumą pateikdami daugiau mokymo pavyzdžių, tačiau atminkite, kad tai yra pasakiškas mažas modelis (1,9 M) ir jis turės problemų aptikdamas mažus objektus (dėl mažos skiriamosios gebos).

Vienas iš klausimų, kuriuos gavau komentaruose prie mano ankstesnio straipsnio apie vaizdo atpažinimą, yra tai, kaip nusiųsti aptikimo rezultatus per UART/I2C į kitą įrenginį, prijungtą prie „Sipeed“kūrimo plokščių. Mano „github“saugykloje galėsite rasti kitą scenarijaus pavyzdį, raccoon_detector_uart.py, kuris (jūs atspėjote) aptinka meškėnus ir siunčia ribojančių laukelių koordinates per UART. Atminkite, kad UART komunikacijai naudojami kaiščiai yra skirtingi skirtingose plokštėse, tai reikia patikrinti dokumentuose.

6 žingsnis: Santrauka

„Kendryte K210“yra tvirtas kompiuterio matymo lustas, lankstus, nors ir turintis mažai atminties. Iki šiol mano vadovėliuose aptarėme jo naudojimą atpažinti pasirinktinius objektus, aptikti pasirinktinius objektus ir vykdyti kai kurias „OpenMV“pagrįstas kompiuterio vizijos užduotis. Aš tikrai žinau, kad jis taip pat tinka veido atpažinimui ir šiek tiek patobulinus, turėtų būti įmanoma nustatyti pozą ir vaizdo segmentavimą (semantinio segmentavimo modeliui mokyti galite naudoti „aXeleRate“, bet dar neįdiegiau išvados su K210). Nesivaržykite pažvelgti į „aXeleRate“saugyklos problemas ir pasidarykite viešąjį ryšį, jei manote, kad galite patobulinti!

Štai keletas straipsnių, kuriuos naudojau rašydamas šią pamoką, pažiūrėkite, ar norite daugiau sužinoti apie objektų aptikimą naudojant neuroninius tinklus:

Ribojančių dėžių objektų detektoriai: suprasdami YOLO, jūs atrodote tik vieną kartą

YOLO supratimas (daugiau matematikos)

Švelnus vadovas, kaip YOLO objektų lokalizavimas veikia su „Keras“(2 dalis)

Realaus laiko objektų aptikimas naudojant YOLO, YOLOv2 ir dabar YOLOv3

Tikimės, kad galėsite panaudoti turimas žinias kurdami nuostabius projektus su mašininiu matymu! Čia galite nusipirkti „Sipeed“plokščių, jos yra vienos pigiausių ML parinkčių įterptosiose sistemose.

Jei turite klausimų, pridėkite mane „LinkedIn“ir užsiprenumeruokite mano „YouTube“kanalą, kad gautumėte pranešimą apie įdomesnius projektus, susijusius su mašininiu mokymusi ir robotika.

Rekomenduojamas: