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.

  • ramtensorialueen 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_scale ja input_zero_pointkvantisointiparametrit, 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.