7.16. Összegzés¶
Ez a fejezet végigvette a ml azon részeit, amelyekhez egy OpenMV alkalmazás nyúl, amikor egy következtetési lépés is része a folyamatnak:
Fogalmak – mi egy neurális hálózat aritmetikai értelemben (betanítható operátorok halmaza, amely egy tenzort egy tenzorra képez le), mit változtatott meg a gépi tanulás a klasszikus képfeldolgozáshoz képest (az ember által írt összegző algoritmus eltűnt, helyét a címkézett adatokból tanult súlyok vették át), valamint a hello demó, amely néhány sornyi Python kóddal futtatott egy arcészlelőt.
Az ml modul – az
ml.Modelobjektum és a bemeneti és kimeneti tenzorok vizsgálatára szolgáló tulajdonságai, az általa elfogadott modellfájl-útvonalak, és hogy hol találhatók ezek a fájlok: vagy egy csak olvasható ROMFS partíción a flash memóriából való közvetlen futtatáshoz, vagy bármely más MicroPython fájlrendszeren, amikor a modell betöltéskor a RAM-ba másolható.A következtetési folyamat – a három szakasz, amelyet a
predict()egymás után futtat (előfeldolgozás, motor diszpécselés, utófeldolgozás), az első szakaszhoz tartozóNormalizationkezelő, a harmadik szakaszhoz tartozó utófeldolgozó kezelő, valamint a kvantálási aritmetika, amely a kamera által futtatott egész számú tenzorokat összeköti azokkal a valós értékű számokkal, amelyekre a hálózatot betanították.Következtetési motorok – TFLM (az operátor-értelmező, amelyet a legtöbb kamera futtat), CMSIS-NN (az alatta lévő SIMD kernelkönyvtár Cortex-M-en), és az NPU-k (az Arm Ethos-U55 az AE3-on a Vela offline fordítóval párosítva, az ST Neural-ART az N6-on az STAI és az STEdgeAI mellett). A motort a kamera rögzíti; a szkript nem választhatja ki.
A kimenet dekódolása – az utófeldolgozók, amelyek a nyers kimeneti tenzorokat dobozokká, kulcspontokká vagy osztályonkénti listákká alakítják, az
NMSosztály, amely összevonja az átfedő jelölteket, a YOLOv8 áttekintés, amely megmutatja, hogyan tartható gyorsan a dekódolás azzal, hogy a küszöbölést a dekvantálás előtt végezzük el, valamint az egyéni dekódoló írásának protokollja, amikor a katalógus nem fed le egy modellt.
7.16.1. Mi érhető el mostantól¶
Három dolog, amelyre a fejezet felkészít:
Egy betanított modell betöltése és futtatása. Bármi, ami a
/rom/mappában van, további előkészítés nélkül működik; bármi, ami külsőleg kompatibilis.tfliteformátumban van megadva, azután működik, hogy a célkamerához tartozó offline eszköz (Vela az AE3-hoz, STEdgeAI az N6-hoz) létrehozta a megfelelő elrendezést.Bármely kimeneti tenzor dekódolása. Ha az architektúra szerepel a katalógusban, a megfelelő utófeldolgozó kiválasztása mechanikus:
YoloV8egy YOLOv8 modellhez,BlazeFacea BlazeFace-hez, és így tovább. Ha nincs benne, a writing-your-own protokoll lefedi a szerződést, a YOLOv8 áttekintés pedig a legtisztább referencia, amelyből másolni lehet.Teljesítménnyel kapcsolatos érvelés. Egy modell, amely 30 FPS-sel fut egy NPU-n, 3 FPS-sel futhat egy Cortex-M7-en; az arány attól függ, mekkora részét tudja a kamera levenni a hálózatnak a CPU-ról. A kvantálás, a ROMFS-be helyezés, az NPU-fordítás és a célmotor operátor-lefedettsége a négy kar, és a fejezet mindegyiket lefedte.
7.16.2. Az ML a kamera többi részével együtt működik¶
Egy következtetés ritkán fut elszigetelten. Az image modul rögzíti és előfeldolgozza a képkockát, az ml modul futtatja a hálózatot, az ulab.numpy pedig elvégzi azt a numerikus munkát, amelyhez egyik oldalnak sincs beépített eszköze. Egy tipikus észlelési szkript mindhármat kombinálja: rögzítés a csi segítségével, opcionálisan a képkocka módosítása az image modullal, a predict() futtatása, az eredmény utófeldolgozása a megfelelő modullal az ml.postprocessing közül, és az ulab.numpy használata bármilyen egyéni matematikához, amelyet az alkalmazás az utófeldolgozó által visszaadott dobozok tetejére szeretne. A három modul ugyanazt a memóriamodellt használja; a köztük lévő határok ahol csak lehetséges, másolásmentesek.