7.4. Bir modelin yüklenmesi¶
ml.Model, flash bellekten bir model dosyası okur, onu ayrıştırır, ağın çıkarım sırasında ihtiyaç duyduğu RAM’i ayırır ve betiğin geri kalanının yüklenen ağ hakkında bilmesi gereken her şeyi taşıyan bir nesne döndürür.
7.4.1. Yapıcı (constructor)¶
Yapıcı bir yol ve isteğe bağlı bir son işlemci alır:
model = ml.Model("/rom/blazeface_front_128.tflite",
postprocess=BlazeFace())
/rom/ üzerindeki modeller (flash bellekte bulunan dosya sistemi) yerinde okunur: ağın ağırlıkları flash bellekte kalır ve yüklenen model yalnızca tensör arenası kadar RAM harcar. /sdcard/ üzerindeki modeller yükleme sırasında RAM’e kopyalanır, dolayısıyla toplam maliyet model dosyası boyutu artı tensör arenasıdır. Her iki yol da çalışır; ödünleşim RAM’dir.
Aynı temel ada sahip kardeş bir .txt dosyası varsa, içeriği otomatik olarak labels içine yüklenir. postprocess= anahtar sözcüğü, predict() metodunun her çıkarımdan sonra çalıştırdığı çağrılabilir bir nesneyi kaydeder.
7.4.2. Salt okunur özellikler¶
Yüklenen bir model, kimse onu çalıştırmadan ağı tanımlayan küçük bir salt okunur özellikler kümesini açığa çıkarır.
Dosya ve bellek.
len– diskteki model dosyası boyutu, bayt cinsinden.ram– ağın çıkarım sırasında ara aktivasyonları için ihtiyaç duyduğu tensör arenasının boyutu, bayt cinsinden.
Giriş tensörleri.
input_shape– her giriş tensörü için bir tane olmak üzere, ağın beklediği şekli veren tuple’ların listesi. Görü ağlarının(1, H, W, C)şekline sahip tek bir girişi vardır.input_dtype– tek karakterli dtype kodlarının listesi ('b'int8,'B'uint8,'h'int16,'H'uint16,'f'float32), her giriş için bir tane.input_scaleveinput_zero_point– ağın üzerinde eğitildiği gerçek değerli giriş ile kameranın çalıştığı tamsayı gösterimi arasında dönüşüm yapan kuantizasyon parametreleri.
Çıkış tensörleri. Giriş kümesinin aynası: output_shape, output_dtype, output_scale, output_zero_point. Tespit ağları iki veya üç çıkış tensörü üretir (kutular, güven skorları, bazen sınıf olasılıkları); sınıflandırma ağları bir tane üretir.
Ekstralar. labels, kardeş .txt dosyasından yüklenen sınıf adı listesidir ya da None. postprocess, kaydedilen son işlemcidir ya da None.
7.4.3. BlazeFace’in incelenmesi¶
Birlikte gelen BlazeFace modelini yükleyip her özelliği yazdırmak gerçek sayıları verir:
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)
Sayılar ağın arayüzünü somut olarak tanımlar: tek bir (1, 128, 128, 3) int8 giriş tensörü ve iki int8 çıkış – biri kutu regresyon katsayıları, biri çapa başına güven skorları için. Kuantizasyon parametreleri, bu int8 değerlerinin ağın üzerinde eğitildiği gerçek float’lara nasıl eşlendiğini açıklar; son işlemci, kutuları çözmeden önce kuantizasyonu geri almak için bunları kullanır.
Her özellik, tanımladığı şey için tek doğruluk kaynağıdır. Betikler, neyi yakalayacaklarını bilmek için input_shape özelliğini okur, tensörleri elle çözmek için output_scale ve output_zero_point özelliklerini okur ve insan tarafından okunabilir sınıf adları için labels özelliğini okur – asla sabit kodlanmaz, asla varsayılmaz.