Tartalomjegyzék:

Objektumfelismerés Sipeed MaiX táblákkal (Kendryte K210): 6 lépés
Objektumfelismerés Sipeed MaiX táblákkal (Kendryte K210): 6 lépés

Videó: Objektumfelismerés Sipeed MaiX táblákkal (Kendryte K210): 6 lépés

Videó: Objektumfelismerés Sipeed MaiX táblákkal (Kendryte K210): 6 lépés
Videó: Тодд Уайт - Молясь за сатанистов (Бразилия 2019) 2024, Július
Anonim
Image
Image

A Sipeed MaiX Boards segítségével végzett képfelismerésről szóló korábbi cikkem folytatásaként úgy döntöttem, hogy írok egy másik oktatóanyagot, amely az objektumok észlelésére összpontosít. Érdekes hardver bukkant fel a közelmúltban a Kendryte K210 lapkával, beleértve a Seeed AI Hat for Edge Computing, az M5 stack M5StickV és a DFRobot HuskyLens (bár ez egy saját firmware -t tartalmaz, és inkább a kezdők számára készült). Olcsó ára miatt a Kendryte K210 vonzó volt az emberekhez, és számítógépes látást akart hozzáadni projektjeihez. De a kínai hardvertermékekhez hasonlóan a technikai támogatás hiányzik, és ezt igyekszem javítani a cikkeimmel és videóimmal. De ne feledje, hogy nem vagyok a Kendryte vagy a Sipeed fejlesztői csapat tagja, és nem tudok válaszolni a termékükkel kapcsolatos összes kérdésre.

Ennek tudatában kezdjük el! Kezdjük egy rövid (és egyszerűsített) áttekintéssel arról, hogyan működnek az objektumfelismerő CNN modellek.

2020. MÁJUSI FRISSÍTÉS: Látva, hogy a K210 táblákkal történő tárgyfelismerésről szóló cikkem és videóm továbbra is nagyon népszerű, és a YouTube és a Google legjobb eredményei között döntöttem úgy, hogy frissítem a cikket, hogy tartalmazza az aXeleRate, Keras-alapú AI keretrendszerről szóló információkat. Él I fejlődik. Az aXeleRate lényegében a szkriptek gyűjteményén alapul, amelyeket képfelismerő/objektum -felismerő modellek oktatására használtam - egyetlen keretbe egyesítve és a Google Colab munkafolyamatára optimalizálva. Kényelmesebb használni és naprakész.

A cikk régi verziójában továbbra is megtekintheti a steemit.com webhelyen.

1. lépés: Az objektumészlelési modell architektúrájának magyarázata

Objektumészlelési modell architektúra magyarázata
Objektumészlelési modell architektúra magyarázata
Objektumészlelési modell architektúra magyarázata
Objektumészlelési modell architektúra magyarázata

A képfelismerő (vagy képosztályozási) modellek a teljes képet használják bemenetként, és megjelenítik a valószínűségek listáját minden egyes osztály számára, amelyet felismerni próbálunk. Nagyon hasznos, ha a minket érdeklő objektum a kép nagy részét elfoglalja, és nem sokat törődünk a helyével. De mi van akkor, ha a projektünk (mondjuk az arckövető kamera) megköveteli tőlünk, hogy ne csak a képen látható objektum típusáról, hanem annak koordinátáiról is tudjunk. És mi van azzal a projekttel, amely több objektum észlelését igényli (például számláláshoz)?

Ilyenkor jól jönnek az objektumfelismerő modellek. Ebben a cikkben a YOLO (csak egyszer néz) architektúrát fogjuk használni, és a magyarázatot az adott architektúra belső mechanikájára összpontosítjuk.

Megpróbáljuk meghatározni, hogy milyen objektumok vannak jelen a képen, és melyek azok koordinátái. Mivel a gépi tanulás nem varázslat és nem "gondolkodó gép", hanem csak egy algoritmus, amely statisztikákat használ a funkció (neurális hálózat) optimalizálására egy adott probléma jobb megoldása érdekében. Ezt a problémát át kell fogalmaznunk, hogy "optimalizálhatóbb" legyen. Naiv megközelítés lenne, ha az algoritmus minimalizálná a veszteséget (különbséget) az előrejelzése és az objektum helyes koordinátái között. Ez elég jól működne, ha csak egy objektum van a képen. Több objektum esetében más megközelítést alkalmazunk - hozzáadjuk a rácsot, és a hálózatunk megjósolja az objektum (ok) jelenlétét (vagy hiányát) minden rácsban. Remekül hangzik, de mégis túl sok bizonytalanságot hagy a hálózat számára - hogyan adjuk ki az előrejelzést, és mit tegyünk, ha egy rácscellán belül több objektum van a középpontban? Hozzá kell adnunk még egy korlátozást - az úgynevezett horgonyokat. A horgonyok kezdeti méretek (szélesség, magasság), amelyek közül néhány (az objektum méretéhez legközelebb eső) átméreteződik az objektumméretre - a neurális hálózat egyes kimeneteinek felhasználásával (végleges jellemző térkép).

Tehát itt van egy felső szintű nézet arról, hogy mi történik, amikor a YOLO architektúra neurális hálózata objektumérzékelést végez a képen. A funkciókivonó hálózat által észlelt jellemzők szerint minden rácscellához előrejelzések készülnek, amelyek tartalmazzák a horgonyok eltolását, a horgony valószínűségét és a horgonyosztályt. Akkor kis valószínűséggel elvetjük a jóslatokat, és íme!

2. lépés: A környezet előkészítése

Készítse elő a környezetet
Készítse elő a környezetet

Az aXeleRate a penny4860, SVHN yolo-v2 számjegyű detektor csodálatos projektjén alapul. Az aXeleRate egy új szintre emeli a YOLO detektor Kerasban való megvalósítását, és kényelmes konfigurációs rendszerét használja a képfelismerő/objektumfelismerő és képszegmentáló hálózatok képzésére és átalakítására különböző háttérprogramokkal.

Az aXeleRate kétféleképpen használható: helyben futás Ubuntu gépen vagy a Google Colabban. A Google Colabban való futtatáshoz nézze meg ezt a példát:

PASCAL-VOC Object Detection Colab Notebook

A modell helyi oktatása és hardveres gyorsítással történő exportálása szintén sokkal egyszerűbb. Erősen ajánlom, hogy telepítse az összes szükséges függőséget Anaconda környezetben, hogy a projekt elkülönüljön a többiektől, és elkerülje a konfliktusokat.

Töltse le a telepítőt itt.

A telepítés befejezése után hozzon létre egy új környezetet:

conda create -n yolo python = 3.7

Aktiváljuk az új környezetet

conda aktiválja a yolo -t

A bash shell előtt egy előtag jelenik meg a környezet nevével, ami azt jelzi, hogy jelenleg a környezetben dolgozik.

Telepítse az aXeleRate -t a helyi számítógépre a

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

Ezután futtassa ezt a szkriptek letöltéséhez, amelyekre szüksége lesz az oktatáshoz és a következtetéshez:

git klón

Gyors teszteket futtathat az aXeleRate mappában található tests_training.py paranccsal. Képzést és következtetést fog futtatni minden modelltípushoz, menteni és átalakítani a betanított modelleket. Mivel ez csak 5 korszak képzése, és az adathalmaz nagyon kicsi, nem fog tudni hasznos modelleket beszerezni, de ez a szkript csak a hibák hiányának ellenőrzésére szolgál.

3. lépés: Tanítson objektumfelismerő modellt Keras segítségével

Tanítson objektumfelismerő modellt Keras segítségével
Tanítson objektumfelismerő modellt Keras segítségével

Most futtathatunk egy képzési szkriptet a konfigurációs fájllal. Mivel a YOLO objektumérzékelő Keras megvalósítása meglehetősen bonyolult, ahelyett, hogy minden releváns kódrészletet elmagyaráznék, elmagyarázom, hogyan kell konfigurálni az oktatást, és leírom a releváns modulokat is, ha saját maga szeretne változtatni rajtuk.

Kezdjük egy játékpéldával, és tanítsunk egy mosómedve -érzékelőt. A /config mappában van egy konfigurációs fájl, a raccoon_detector.json. A MobileNet7_5 architektúrát választjuk (ahol a 7_5 az eredeti Mobilenet implementáció alfa paramétere, szabályozza a hálózat szélességét), és a 224x224 bemeneti méretet. Nézzük a konfiguráció legfontosabb paramétereit:

A típus a modell kezelőfelülete - osztályozó, detektor vagy segnet

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

A horgonyokkal kapcsolatos további információkért kérjük, olvassa el itt:

A címkék az adathalmazban található címkék. FONTOS: Kérjük, sorolja fel az adatkészletben található összes címkét.

Az objektum_skála határozza meg, hogy mennyit büntessen az objektum -előrejelzők bizalom rossz előrejelzésével

A no_object_scale határozza meg, hogy mennyit kell büntetni a nem objektív prediktorok rossz bizalmi előrejelzésével

A coord_scale határozza meg, hogy mennyit kell büntetni a rossz pozíció- és méretjóslatokért (x, y, w, h)

class_scale határozza meg, hogy mennyit kell büntetni a rossz osztály előrejelzésért

augumentáció - képfelnagyítás, átméretezés, eltolás és elmosódás a képen, hogy megakadályozzuk a túltöltést és nagyobb legyen az adatkészlet.

vonat_idők, érvényesítési idők - hányszor ismételje meg az adathalmazt. Hasznos, ha van augmentáció

engedélyezve

first_trainable_layer - lehetővé teszi bizonyos rétegek lefagyasztását, ha előre betanított szolgáltatáshálózatot használ

Most le kell töltenünk azt az adatkészletet, amelyet megosztottam a Google Drive -on (eredeti adatkészlet), amely egy mosómedve -észlelési adatkészlet, és 150 jegyzetelt képet tartalmaz.

Győződjön meg róla, hogy ennek megfelelően módosítja a konfigurációs fájl sorait (vonat_kép_mappa, vonat_annot_folder), majd indítsa el az edzést a következő paranccsal:

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

A train.py beolvassa a konfigurációt a.json fájlból, és betanítja a modellt az axelerate/network/yolo/yolo_frontend.py parancsfájllal. A yolo/backend/loss.py az egyéni veszteség funkciót valósítja meg, a yolo/backend/network.py pedig a modell létrehozásának helyét (a bemenet, a szolgáltatáskivonó és az észlelési rétegek együtt). Az axelerate/network/common_utils/fit.py egy olyan szkript, amely megvalósítja az oktatási folyamatot, és az axelerate/network/common_utils/feature.py tartalmazza a szolgáltatáskivonókat. Ha képzett modellt kíván használni K210 chip és Micropython firmware segítségével, a memória korlátozása miatt választhat a MobileNet (2_5, 5_0 és 7_5) és a TinyYolo között, de azt tapasztaltam, hogy a MobileNet jobb észlelési pontosságot biztosít.

Mivel ez egy játékpélda, és csak 150 mosómedve képét tartalmazza, az edzési folyamatnak meglehetősen gyorsnak kell lennie, még GPU nélkül is, bár a pontosság messze nem lesz csillagos. A munkával kapcsolatos projekthez közlekedési táblaérzékelőt és számérzékelőt képeztem ki, mindkét adatkészlet több mint néhány ezer példát tartalmaz.

4. lépés: Konvertálja.kmodel formátumba

Konvertálja.kmodel formátumba
Konvertálja.kmodel formátumba

Az aXeleRate segítségével a modell konverziója automatikusan történik - valószínűleg ez a legnagyobb különbség az oktatási szkriptek régi verziójától! Ezenkívül a modellfájlokat és a képzési grafikont szépen elmenti a projektmappába. Azt is tapasztaltam, hogy a rendelkezésre állási pontosság néha nem ad becslést a modell valós teljesítményéről az objektumok észlelésére, és ezért adtam hozzá az mAP -ot az objektum -észlelési modellek érvényesítési mérőszámaként. A mAP -ról itt olvashat bővebben.

Ha a mAP, az átlagos átlagos pontosság (érvényesítési mutatónk) nem javul 20 korszakra, a képzés idő előtt leáll. Minden alkalommal, amikor a mAP javul, a modell a projekt mappába kerül. Az edzés befejezése után az aXeleRate automatikusan átalakítja a legjobb modellt meghatározott formátumokká - mostantól választhat a "tflite", a "k210" vagy az "edgetpu" közül.

Most az utolsó lépéshez, valójában a modellünket Sipeed hardveren futtatva!

5. lépés: Futtassa a Micropython firmware -t

Futtassa a Micropython firmware -t
Futtassa a Micropython firmware -t

Lehetőség van következtetéseket futtatni a C kódú objektum -észlelési modellünkkel, de a kényelem kedvéért a Micropython firmware -t és a MaixPy IDE -t fogjuk használni.

Töltse le a MaixPy IDE -t innen, a micropython firmware -t pedig innen. A kflash.py python szkript segítségével írhatja le a firmware -t, vagy töltsön le külön GUI flash eszközt.

Másolja a model.kmodel fájlt az SD -kártya gyökerébe, és helyezze be az SD -kártyát a Sipeed Maix Bit -be (vagy más K210 -eszközbe). Alternatív megoldásként.kmodel -t írhat az eszköz flash memóriájába. A példaszkriptem flash memóriából a.kmodel szöveget olvassa. Ha SD -kártyát használ, módosítsa ezt a sort

feladat = kpu.load (0x200000)

nak nek

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

Nyissa meg a MaixPy IDE -t, és nyomja meg a csatlakozás gombot. Nyissa meg a raccoon_detector.py szkriptet az example_scripts/k210/detector mappából, és nyomja meg a Start gombot. Látnia kell egy élő közvetítést a kamerából, körülötte határoló dobozokkal … nos, mosómedvék. Növelheti a modell pontosságát több oktatási példával, de ne feledje, hogy ez egy tündéri kis modell (1,9 M), és problémákat okoz a kis tárgyak észlelésében (az alacsony felbontás miatt).

Az egyik kérdés, amelyet a képfelismerésről szóló korábbi cikkemhez fűzött megjegyzésekben kaptam, hogyan küldje el az észlelési eredményeket UART/I2C -n keresztül a Sipeed fejlesztőlapokhoz csatlakoztatott másik eszközre. A github tárolómban találhat egy másik példa szkriptet, a raccoon_detector_uart.py -t, amely (sejtette) észleli a mosómedvéket, és elküldi a határoló dobozok koordinátáit az UART felett. Ne feledje, hogy az UART kommunikációhoz használt csapok különböző táblákonként eltérőek, ezt ellenőriznie kell a dokumentációban.

6. lépés: Összefoglalás

A Kendryte K210 szilárd chip a számítógépes látáshoz, rugalmas, bár korlátozott memóriával rendelkezik. Eddig oktatóanyagaimban tárgyaltunk arról, hogy egyéni objektumok felismerésére, egyedi objektumok észlelésére és néhány OpenMV alapú számítógépes látási feladat futtatására használjuk. Pontosan tudom, hogy az arcfelismerésre is alkalmas, és némi barkácsolással lehetővé kell tenni a pózfelismerést és a képek szegmentálását (az aXeleRate segítségével szemantikai szegmentációs modellt is betaníthat, de a következtetést még nem valósítottam meg a K210 segítségével). Nyugodtan tekintse meg az aXeleRate adattár problémáit, és készítsen PR -t, ha úgy gondolja, hogy van néhány fejlesztés, amellyel hozzájárulhat!

Íme néhány cikk, amelyeket az oktatóanyag megírásakor használtam, nézze meg, ha többet szeretne megtudni a neurális hálózatokkal történő objektumfelismerésről:

Határoló doboz objektumérzékelők: megértve a YOLO -t, csak egyszer nézel ki

A YOLO megértése (több matematika)

Gyengéd útmutató arról, hogyan működik a YOLO objektum -lokalizáció a Kerasszal (2. rész)

Valós idejű objektumfelismerés YOLO, YOLOv2 és most YOLOv3 segítségével

Reméljük, hogy a mostani ismereteit felhasználva félelmetes projekteket építhet gépi látással! Itt vásárolhat Sipeed táblákat, ezek a legolcsóbb opciók közé tartoznak az ML beágyazott rendszereken.

Ha bármilyen kérdése van, vegyen fel engem a LinkedIn -en, és iratkozzon fel YouTube -csatornámra, hogy értesítést kapjak a gépi tanulást és a robotikát érintő érdekesebb projektekről.

Ajánlott: