7.16. Yhteenveto¶
Tässä luvussa käytiin läpi ne ml-moduulin osat, joita OpenMV-sovellus hyödyntää, kun päättelyvaihe on osa putkea:
Käsitteet – mitä neuroverkko on aritmeettisesti (pino koulutettavia operaattoreita, jotka kuvaavat tensorin tensoriksi), mitä koneoppiminen muutti klassiseen kuvankäsittelyyn verrattuna (ihmisen kirjoittama yhteenvetoalgoritmi on poissa ja korvattu luokitellusta aineistosta opituilla painoilla) sekä hello-demo, joka ajoi kasvojentunnistimen muutamalla rivillä Pythonia.
ml-moduuli –
ml.Model-olio ja sen ominaisuudet syöte- ja tulostensorien tarkasteluun, sen hyväksymät mallitiedostojen polut ja se, missä nämä tiedostot sijaitsevat: vain luku -tilainen ROMFS-osio suoraan flash-muistista suorittamiseen tai mikä tahansa muu MicroPython-tiedostojärjestelmä, kun malli voidaan kopioida RAM-muistiin lataushetkellä.Päättelyputki – kolme vaihetta, jotka
predict()suorittaa peräkkäin (esikäsittely, moottorin lähetys, jälkikäsittely),Normalization-kahva ensimmäisessä vaiheessa, jälkikäsittelijän kahva kolmannessa vaiheessa sekä kvantisointiaritmetiikka, joka sitoo kameran ajamat kokonaislukutensorit takaisin niihin reaalilukuihin, joita vasten verkko koulutettiin.Päättelymoottorit – TFLM (operaattoritulkki, jota useimmat kamerat ajavat), CMSIS-NN (sen alla Cortex-M:llä toimiva SIMD-ydinkirjasto) ja NPU:t (Armin Ethos-U55 AE3:ssa yhdistettynä Vela-offline-kääntäjään, ST:n Neural-ART N6:ssa yhdistettynä STAI:hin ja STEdgeAI:hin). Moottori on kameran määräämä; skripti ei valitse sitä.
Tulosteen dekoodaus – jälkikäsittelijät, jotka muuntavat raa’at tulostensorit laatikoiksi, avainpisteiksi tai luokkakohtaisiksi listoiksi,
NMS-luokka, joka tiivistää päällekkäiset ehdokkaat, YOLOv8-läpikäynti, joka näyttää miten dekoodaus pidetään nopeana kynnystämällä ennen kvantisoinnin purkua, sekä protokolla mukautetun dekooderin kirjoittamiseen, kun luettelo ei kata mallia.
7.16.1. Mikä on nyt ulottuvilla¶
Kolme asiaa, joihin tämä luku valmistaa:
Koulutetun mallin lataaminen ja ajaminen. Mikä tahansa hakemistossa
/rom/toimii ilman lisävalmisteluja; mikä tahansa ulkoisesti toimitettu yhteensopiva.tflitetoimii sen jälkeen, kun kohdekameran offline-työkalu (Vela AE3:lle, STEdgeAI N6:lle) on tuottanut oikean asettelun.Minkä tahansa tulostensorin dekoodaus. Kun arkkitehtuuri on luettelossa, oikea jälkikäsittelijä on mekaaninen valinta:
YoloV8YOLOv8-mallille,BlazeFaceBlazeFacelle ja niin edelleen. Kun se ei ole, writing-your-own -protokolla kattaa sopimuksen ja YOLOv8-läpikäynti on selkein viite, josta kopioida.Suorituskyvyn päättely. Malli, joka ajaa 30 FPS:llä NPU:lla, saattaa ajaa 3 FPS:llä Cortex-M7:llä; suhde riippuu siitä, kuinka suuren osan verkosta kamera pystyy nostamaan CPU:lta pois. Kvantisointi, ROMFS-sijoittelu, NPU-käännös ja kohdemoottorin operaattorikattavuus ovat ne neljä vipua, ja luku käsitteli jokaisen niistä.
7.16.2. ML yhdistyy muuhun kameraan¶
Päättely ajetaan harvoin eristyksissä. image-moduuli ottaa ja esikäsittelee kehyksen, ml-moduuli ajaa verkon, ja ulab.numpy hoitaa minkä tahansa numeerisen työn, johon kummallakaan puolella ei ole sisäänrakennettua keinoa. Tyypillinen tunnistusskripti yhdistää kaikki kolme: ota kuva moduulilla csi, säädä kehystä valinnaisesti moduulilla image, aja predict(), jälkikäsittele tulos oikealla moduulilla joukosta ml.postprocessing ja turvaudu moduuliin ulab.numpy mihin tahansa mukautettuun matematiikkaan, jonka sovellus haluaa jälkikäsittelijän palauttamien laatikoiden päälle. Kolme moduulia jakavat saman muistimallin; niiden väliset rajat ovat nollakopioisia aina kun mahdollista.