7.4. Memuat Model

ml.Model membaca file model dari flash, menguraikannya, mengalokasikan RAM yang dibutuhkan jaringan selama inferensi, dan mengembalikan objek yang membawa semua informasi yang dibutuhkan skrip tentang jaringan yang dimuat.

7.4.1. Konstruktor

Konstruktor mengambil sebuah path dan post-processor opsional:

model = ml.Model("/rom/blazeface_front_128.tflite",
                 postprocess=BlazeFace())

Model pada /rom/ (filesystem yang berada di flash) dibaca langsung di tempat: bobot jaringan tetap berada di flash dan model yang dimuat hanya menggunakan RAM sebesar tensor arena. Model pada /sdcard/ disalin ke dalam RAM saat dimuat, sehingga total biayanya adalah ukuran file model ditambah tensor arena. Kedua path berfungsi; pertimbangannya adalah RAM.

Jika file .txt saudara dengan basename yang sama ada, isinya dimuat ke dalam labels secara otomatis. Kata kunci postprocess= mendaftarkan callable yang dijalankan oleh predict() setelah setiap inferensi.

7.4.2. Properti Hanya-Baca

Model yang dimuat mengekspos sekumpulan kecil properti hanya-baca yang mendeskripsikan jaringan tanpa perlu menjalankannya.

File dan memori.

  • len -- ukuran file model di disk, dalam byte.

  • ram -- ukuran tensor arena yang dibutuhkan jaringan untuk aktivasi intermedietnya selama inferensi, dalam byte.

Tensor input.

  • input_shape -- daftar tuple, satu per tensor input, yang memberikan bentuk yang diharapkan oleh jaringan. Jaringan visi memiliki satu input dengan bentuk (1, H, W, C).

  • input_dtype -- daftar kode dtype satu karakter ('b' int8, 'B' uint8, 'h' int16, 'H' uint16, 'f' float32), satu per input.

  • input_scale dan input_zero_point -- parameter kuantisasi yang mengkonversi antara input bernilai nyata tempat jaringan dilatih dan representasi integer yang dijalankan oleh kamera.

Tensor output. Cerminan dari set input: output_shape, output_dtype, output_scale, output_zero_point. Jaringan deteksi menghasilkan dua atau tiga tensor output (kotak, skor kepercayaan, kadang probabilitas kelas); jaringan klasifikasi menghasilkan satu.

Ekstra. labels adalah daftar nama kelas yang dimuat dari file .txt saudara, atau None. postprocess adalah post-processor yang terdaftar, atau None.

7.4.3. Memeriksa BlazeFace

Memuat model BlazeFace yang disertakan dan mencetak setiap properti memberikan angka yang sebenarnya:

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)

Angka-angka tersebut mengidentifikasi antarmuka jaringan secara konkret: satu tensor input int8 berukuran (1, 128, 128, 3) dan dua output int8 -- satu untuk koefisien regresi kotak, satu untuk skor kepercayaan per-anchor. Parameter kuantisasi mendeskripsikan bagaimana nilai int8 tersebut dipetakan ke float nyata yang dilatih jaringan; post-processor menggunakannya untuk membatalkan kuantisasi sebelum mendekode kotak-kotak.

Setiap properti adalah sumber kebenaran tunggal untuk apa yang dideskripsikannya. Skrip membaca input_shape untuk mengetahui resolusi yang harus diambil, membaca output_scale dan output_zero_point untuk mendekode tensor secara manual, dan membaca labels untuk nama kelas yang dapat dibaca manusia -- tidak pernah di-hardcode, tidak pernah diasumsikan.