7.16. Shrnutí¶
Tato kapitola provedla čtenáře částmi modulu ml, po kterých aplikace OpenMV sahá, když je krok inference součástí zpracovatelského řetězce:
Koncepty – co je neuronová síť v aritmetickém pojetí (zásobník trénovatelných operátorů, který mapuje tenzor na tenzor), co strojové vidění změnilo oproti klasickému zpracování obrazu (zmizel člověkem napsaný shrnující algoritmus a nahradily jej váhy naučené z označkovaných dat) a hello demo, které spustilo detektor obličejů na pár řádcích jazyka Python.
Modul ml – objekt
ml.Modela jeho vlastnosti pro prozkoumání vstupních a výstupních tenzorů, cesty k souborům modelů, které přijímá, a místa, kde tyto soubory leží: oddíl ROMFS určený jen pro čtení pro spouštění přímo z flash paměti, nebo libovolný jiný souborový systém MicroPython, pokud lze model při načítání zkopírovat do paměti RAM.Inferenční řetězec – tři fáze, které metoda
predict()spouští po sobě (předzpracování, vyvolání enginu, následné zpracování), úchytNormalizationv první fázi, úchyt následného zpracování ve třetí fázi a kvantizační aritmetika, která propojuje celočíselné tenzory, jež kamera spouští, zpět s reálnými čísly, na kterých byla síť trénována.Inferenční enginy – TFLM (interpret operátorů, který spouští většina kamer), CMSIS-NN (knihovna SIMD jader, jež leží pod ním na Cortex-M) a NPU (Arm Ethos-U55 na AE3 ve dvojici s offline kompilátorem Vela, ST Neural-ART na N6 ve dvojici s STAI a STEdgeAI). Engine je dán kamerou; skript jej nevybírá.
Dekódování výstupu – následné procesory, které mění surové výstupní tenzory na rámečky, klíčové body nebo seznamy podle tříd, třída
NMS, jež slučuje překrývající se kandidáty, průchod modelem YOLOv8, který ukazuje, jak udržet dekódování rychlé prahováním před dekvantizací, a protokol pro napsání vlastního dekodéru, když katalog daný model nepokrývá.
7.16.1. Co je nyní na dosah¶
Tři věci, na které tato kapitola připravuje:
Načtení natrénovaného modelu a jeho spuštění. Cokoli v
/rom/funguje bez další přípravy; cokoli dodaného externě jako kompatibilní soubor.tflitefunguje poté, co offline nástroj pro cílovou kameru (Vela pro AE3, STEdgeAI pro N6) vytvoří správné rozložení.Dekódování libovolného výstupního tenzoru. Když je architektura v katalogu, je správný následný procesor mechanickou záležitostí:
YoloV8pro model YOLOv8,BlazeFacepro BlazeFace a tak dále. Když v katalogu není, protokol writing-your-own pokrývá smlouvu a průchod modelem YOLOv8 je nejčistší referencí, ze které lze opisovat.Uvažování o výkonu. Model, který běží na NPU rychlostí 30 FPS, může na Cortex-M7 běžet rychlostí 3 FPS; poměr závisí na tom, jak velkou část sítě dokáže kamera odlehčit z CPU. Kvantizace, umístění v ROMFS, kompilace pro NPU a pokrytí operátorů cílovým enginem jsou ony čtyři páky a kapitola se věnovala každé z nich.
7.16.2. ML se skládá se zbytkem kamery¶
Inference málokdy běží izolovaně. Modul image zachytí a předzpracuje snímek, modul ml spustí síť a ulab.numpy provede jakoukoli číselnou práci, pro kterou ani jedna strana nemá vestavěnou funkci. Typický detekční skript kombinuje všechny tři: zachycení pomocí csi, volitelně úprava snímku pomocí image, spuštění predict(), následné zpracování výsledku správným modulem z ml.postprocessing a sáhnutí po ulab.numpy pro libovolnou vlastní matematiku, kterou aplikace chce provést nad rámečky, jež následný procesor vrátil. Tyto tři moduly sdílejí stejný paměťový model; hranice mezi nimi jsou pokud možno bez kopírování (zero-copy).