7.4. Mallin lataaminen¶
ml.Model lukee mallitiedoston flash-muistista, jäsentää sen, varaa keskusmuistin, jonka neuroverkko tarvitsee päättelyn aikana, ja palauttaa olion, joka sisältää kaiken, mitä skriptin loppuosan tarvitsee tietää ladatusta verkosta.
7.4.1. Konstruktori¶
Konstruktori ottaa polun ja valinnaisen jälkikäsittelijän:
model = ml.Model("/rom/blazeface_front_128.tflite",
postprocess=BlazeFace())
Mallit, jotka sijaitsevat polussa /rom/ (flash-muistissa pysyvä tiedostojärjestelmä), luetaan paikallaan: verkon painot pysyvät flash-muistissa, ja ladattu malli vie keskusmuistia vain tensorialueen verran. Mallit polussa /sdcard/ kopioidaan keskusmuistiin latausvaiheessa, joten kokonaiskustannus on mallitiedoston koko plus tensorialue. Kumpikin polku toimii; kompromissi koskee keskusmuistia.
Jos samalla perusnimellä oleva sisarustiedosto .txt on olemassa, sen sisältö ladataan automaattisesti ominaisuuteen labels. Avainsana postprocess= rekisteröi kutsuttavan olion, jonka predict() suorittaa jokaisen päättelyn jälkeen.
7.4.2. Vain luettavat ominaisuudet¶
Ladattu malli tarjoaa pienen joukon vain luettavia ominaisuuksia, jotka kuvaavat verkkoa ilman, että sitä tarvitsee suorittaa.
Tiedosto ja muisti.
len– mallitiedoston koko levyllä tavuina.ram– tensorialueen koko, jonka verkko tarvitsee välivaiheen aktivaatioilleen päättelyn aikana, tavuina.
Syötetensorit.
input_shape– lista monikoita, yksi kutakin syötetensoria kohden, joka kertoo verkon odottaman muodon. Konenäköverkoilla on yksi syöte muodossa(1, H, W, C).input_dtype– lista yksimerkkisiä dtype-koodeja ('b'int8,'B'uint8,'h'int16,'H'uint16,'f'float32), yksi kutakin syötettä kohden.input_scalejainput_zero_point– kvantisointiparametrit, jotka muuntavat verkon koulutuksessa käytetyn reaaliarvoisen syötteen ja kameran käyttämän kokonaislukuesityksen välillä.
Tulostensorit. Syötejoukon peilikuva: output_shape, output_dtype, output_scale, output_zero_point. Tunnistusverkot tuottavat kaksi tai kolme tulostensoria (rajauslaatikot, luottamuspisteet, joskus luokkien todennäköisyydet); luokitteluverkot tuottavat yhden.
Lisätietoja. labels on luokkanimien lista, joka ladataan sisarustiedostosta .txt, tai None. postprocess on rekisteröity jälkikäsittelijä tai None.
7.4.3. BlazeFacen tarkastelu¶
Mukana toimitettavan BlazeFace-mallin lataaminen ja kunkin ominaisuuden tulostaminen antaa todelliset luvut:
import ml
from ml.postprocessing.mediapipe import BlazeFace
model = ml.Model("/rom/blazeface_front_128.tflite",
postprocess=BlazeFace())
print("file size: ", model.len, "bytes")
print("tensor arena: ", model.ram, "bytes")
print("input shape: ", model.input_shape)
print("input dtype: ", model.input_dtype)
print("input scale: ", model.input_scale)
print("input zp: ", model.input_zero_point)
print("output shape: ", model.output_shape)
print("output dtype: ", model.output_dtype)
print("output scale: ", model.output_scale)
print("output zp: ", model.output_zero_point)
Luvut yksilöivät verkon rajapinnan konkreettisesti: yksittäinen (1, 128, 128, 3) int8 -syötetensori ja kaksi int8 -tulostetta – yksi laatikkoregression kertoimille, yksi ankkurikohtaisille luottamuspisteille. Kvantisointiparametrit kuvaavat, kuinka nämä int8-arvot vastaavat verkon koulutuksessa käytettyjä reaaliarvoisia liukulukuja; jälkikäsittelijä käyttää niitä kvantisoinnin peruuttamiseen ennen laatikoiden purkamista.
Jokainen ominaisuus on ainoa totuuden lähde sille, mitä se kuvaa. Skriptit lukevat input_shape tietääkseen, missä muodossa kuva kaapataan, lukevat output_scale ja output_zero_point purkaakseen tensorit käsin, ja lukevat labels ihmisluettavia luokkanimiä varten – ei koskaan kovakoodattuna, ei koskaan oletettuna.