7.4. Učitavanje modela¶
ml.Model čita datoteku modela iz flash memorije, raščlanjuje je, dodjeljuje RAM koji je mreži potreban tijekom zaključivanja i vraća objekt koji nosi sve što ostatak skripte treba znati o učitanoj mreži.
7.4.1. Konstruktor¶
Konstruktor prima putanju i opcionalni post-procesor:
model = ml.Model("/rom/blazeface_front_128.tflite",
postprocess=BlazeFace())
Modeli na /rom/ (datotečni sustav koji boravi u flash memoriji) čitaju se na licu mjesta: težine mreže ostaju u flash memoriji, a učitani model troši samo RAM u veličini tensor arene. Modeli na /sdcard/ kopiraju se u RAM pri učitavanju, pa je ukupni trošak veličina datoteke modela plus tensor arena. Obje putanje rade; kompromis je RAM.
Ako postoji susjedna .txt datoteka s istim osnovnim imenom, njezin se sadržaj automatski učitava u labels. Ključna riječ postprocess= registrira pozivnu funkciju koju predict() izvodi nakon svakog zaključivanja.
7.4.2. Svojstva samo za čitanje¶
Učitani model izlaže mali skup svojstava samo za čitanje koja opisuju mrežu, a da je nitko ne pokreće.
Datoteka i memorija.
len– veličina datoteke modela na disku, u bajtovima.ram– veličina tensor arene koja je mreži potrebna za njezine međuaktivacije tijekom zaključivanja, u bajtovima.
Ulazni tenzori.
input_shape– popis n-torki, jedna po ulaznom tenzoru, koje daju oblik koji mreža očekuje. Mreže za strojni vid imaju jedan ulaz oblika(1, H, W, C).input_dtype– popis jednoznakovnih kodova dtype ('b'int8,'B'uint8,'h'int16,'H'uint16,'f'float32), jedan po ulazu.input_scaleiinput_zero_point– parametri kvantizacije koji pretvaraju između stvarnih ulaznih vrijednosti na kojima je mreža trenirana i cjelobrojnog prikaza nad kojim kamera radi.
Izlazni tenzori. Zrcalna slika ulaznog skupa: output_shape, output_dtype, output_scale, output_zero_point. Mreže za detekciju proizvode dva ili tri izlazna tenzora (okviri, ocjene pouzdanosti, ponekad vjerojatnosti klasa); mreže za klasifikaciju proizvode jedan.
Dodaci. labels je popis imena klasa učitan iz susjedne .txt datoteke, ili None. postprocess je registrirani post-procesor, ili None.
7.4.3. Pregled BlazeFace modela¶
Učitavanje isporučenog BlazeFace modela i ispis svakog svojstva daje stvarne brojeve:
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)
Brojevi konkretno identificiraju sučelje mreže: jedan ulazni tenzor (1, 128, 128, 3) tipa int8 i dva int8 izlaza – jedan za koeficijente regresije okvira, jedan za ocjene pouzdanosti po sidru. Parametri kvantizacije opisuju kako se te int8 vrijednosti preslikavaju u stvarne float vrijednosti na kojima je mreža trenirana; post-procesor ih koristi za poništavanje kvantizacije prije dekodiranja okvira.
Svako svojstvo je jedini izvor istine za ono što opisuje. Skripte čitaju input_shape kako bi znale na čemu snimati, čitaju output_scale i output_zero_point kako bi ručno dekodirale tenzore, te čitaju labels za čovjeku čitljiva imena klasa – nikad čvrsto kodirana, nikad pretpostavljena.