7.1. Co je to neuronová síť¶
Neuronová síť je algoritmus, jehož chování je naučeno z příkladů, místo aby bylo ručně naprogramováno. Stejná architektura sítě se po předložení milionu obrázků obličejů naučí detekovat obličeje. Stejná architektura se po předložení milionu obrázků rukou naučí detekovat ruce. Stejná architektura se po předložení označené sady pokrývající mnoho kategorií objektů naučí detekovat všechny najednou. Mezi jednotlivými cíli se mění pouze váhy a ty jsou produkovány trénovacím procesem mimo zařízení, který porovnává předpovědi sítě s označenými příklady a upravuje váhy, dokud se neshodují.
7.1.1. Mechanismus¶
Neuronová síť je zásobník vrstev. Každá vrstva vynásobí výstup předchozí vrstvy maticí vah, přidá vektor posunutí (bias) a na výsledek aplikuje nelineární funkci. Výstup jedné vrstvy je vstupem té následující. Zachycený obraz vstupuje na vrcholu zásobníku, protéká dolů přes desítky nebo stovky vrstev a vystupuje na dně jako tenzor, jehož prvky popisují, co bylo v obraze.
To, co váhy jednotlivých vrstev dělají, závisí na tom, na čem byla síť trénována. Matice vah rané vrstvy v síti pro vidění může reagovat na krátkou vodorovnou hranu; o něco hlubší může reagovat na roh; ještě hlubší může reagovat na kruhový tvar oka; nejhlubší vrstvy mohou reagovat na uspořádání celého obličeje. Nic z toho nebylo napsáno ručně. Trénovací proces iteroval přes miliony označených příkladů, posouval váhy po ztrátové funkci dolů a hierarchie hrana-poté-roh-poté-oko-poté-obličej vznikla z dat.
Malá klasifikační síť jako zásobník vrstev. Vstupní tenzor vstupuje nahoře s tvarem zachyceného obrazu a protéká dolů přes vrstvy, přičemž každá z nich transformuje rozměry tenzoru. Výstupní tenzor na dně má jeden prvek na každou třídu. Detekční sítě a sítě pro klíčové body sdílejí stejnou podobu zásobníku vrstev; mění se pouze interpretace výstupního tenzoru.¶
Architektura sítě – jak jsou vrstvy uspořádány, které operace je propojují – určuje, co síť umí dělat. Váhy jsou to, co se síť naučila. Úkolem kamery je v tomto procesu načíst soubor s váhami vyprodukovaný trénováním a provést stejnou aritmetiku, jakou prováděl trenér, ale na zachyceném snímku místo na trénovací sadě.
7.1.2. Co se přivádí na vstup a co vychází na výstup¶
Oba konce sítě jsou tenzory – vícerozměrná pole čísel, stejný druh objektu, jaký právě představila kapitola o numpy. Vstupní tenzor pro síť pro vidění je zachycený obraz přeuspořádaný do rozložení, které síť očekává: typicky 4-tice tvaru (B, H, W, C), kde B je rozměr dávky (na kameře vždy 1, protože se zpracovává jeden snímek najednou), H a W jsou očekávaná výška a šířka sítě v pixelech a C je počet kanálů (3 pro síť RGB, 1 pro stupně šedi).
Výstupní tenzor závisí na tom, k čemu síť slouží:
Klasifikační síť produkuje 1-rozměrný tenzor skóre spolehlivosti, jedno na každou třídu. Index největšího skóre je predikovaná třída. Detektor osob odvozený z MobileNet, který se dodává na většině kamer, má tuto podobu: dvě skóre, jedno pro „osoba“, jedno pro „není osoba“.
Detekční síť produkuje 2-rozměrný tenzor, jehož prvky popisují seznam ohraničujících rámečků plus pravděpodobnosti tříd. YOLOv8 má tuto podobu: tenzor
(84, N), kde 4 z 84 řádků jsou hodnoty regrese rámečku a zbývajících 80 jsou pravděpodobnosti jednotlivých tříd, opakované přesNpozic kotev.Síť pro klíčové body produkuje tenzor, jehož prvky jsou pixelové pozice pojmenovaných orientačních bodů. Model obličejových orientačních bodů MediaPipe má tuto podobu: 468 klíčových bodů na každý detekovaný obličej.
Segmentační síť produkuje 2-rozměrný tenzor, jehož prvky jsou štítky tříd pro jednotlivé pixely – stejné rozměry jako vstup, s indexem kategorie na každé pozici.
Regresní síť produkuje jediné číslo nebo krátký vektor čísel – odhad hloubky, úhel, teplotu.
Každá podoba má na kameře vlastní post-procesor, který převádí surový výstupní tenzor zpět do podoby výsledku, kterou používá zbytek aplikace – ohraničující rámečky, seznamy klíčových bodů, štítky tříd, číselné odhady. Post-procesor je kód na straně aplikace, který zná rozložení výstupu sítě; samotná síť je jen aritmetika, která tenzor produkuje.
7.1.3. Proč to funguje na kameře¶
Dvě části aritmetiky činí toto proveditelným na součástce třídy mikrokontroléru. První je kvantizace. Trénování probíhá ve 32bitové aritmetice s plovoucí desetinnou čárkou; inference může u většiny sítí běžet v 8bitové celočíselné aritmetice téměř bez ztráty přesnosti. Osmibitové váhy zabírají čtvrtinu úložiště a běží několikanásobně rychleji než 32bitová čísla s plovoucí desetinnou čárkou. Každý model, se kterým se kamera dodává, již byl kvantizován mimo zařízení.
Druhou je hardwarová akcelerace. Stejnou aritmetiku, kterou se CPU mikrokontroléru prokousává po jedné instrukci, provádí akcelerátor neuronových sítí ve stovkách operací najednou. Novější kamery (AE3 a N6) nesou specializovanou neural processing unit (NPU) – tenzorový akcelerátor na SoC – který z modelu, jehož běh by na CPU trval sekundu, udělá model běžící v desítkách milisekund. Kapitola o inferenčních enginech popisuje, jak v tomto vypadá úloha kamery.
7.1.4. Co kapitola pokrývá¶
Trénování není úkolem kamery. Natrénovaný model přichází na kameru jako soubor .tflite; kamera jej načte, prožene jím každý zachycený snímek a výsledný tenzor dekóduje na výsledek, na který může aplikace reagovat. Vše, co následuje, se týká každého z těchto kroků:
načítání a kontrola modelu;
flash partition, kde modelové soubory žijí;
čtyři fáze inferenčního volání;
enginy, které aritmetiku skutečně provádějí;
a post-procesory, které převádějí výstupní tenzor zpět na seznam rámečků, klíčových bodů nebo tříd.
Detektory v kapitole o obraze byly každý zaměřen na konkrétní cíl. Ty, které pokrývá zbytek této kapitoly, jsou místo toho trénovány z dat, přičemž stejný engine spouští jakýkoli model, který skript načte. Změna pracovního postupu, kterou s sebou přinesly – algoritmus specifický pro cíl nahrazený souborem vah specifickým pro cíl – je to další, co je třeba rozvést.