7.6. predict’in anatomisi

Model.predict(inputs, *, callback=None), yüklenen model nesnesinin gerçekten iş yaptığı yerdir. Girişlerin girmesiyle sonucun çıkması arasında, sırayla üç aşama çalışır: ön işleme, motor sevkiyatı, son işleme. Üçten ikisi, betiğin doğrudan kontrol ettiği parametreleri alır; ortadaki motora ise kamera karar verir.

Soldan sağa beş bağlı kutunun yatay bir akışı. En soldaki "Görüntü girişi"dir; bir ok "Normalleştirme" alt başlıklı "Ön işleme"ye götürür; bir ok "TFLM / STAI" alt başlıklı "Motor"a götürür; bir ok "postprocess=" alt başlıklı "Son işleme"ye götürür; ve son bir ok "Sonuç"a götürür. Ortadaki üç aşama altlarında bir etiket taşır -- Ön işleme'nin altında "kullanıcı tarafından kontrol edilebilir", Motor'un altında "otomatik" ve Son işleme'nin altında "kullanıcı tarafından kontrol edilebilir".

predict() metodunun üç aşaması. Ön işleme ve son işleme, betiğin kontrol ettiği parametreleri alır; ortadaki motor kamera tarafından sabitlenir.

7.6.1. Ön işleme

Ön işleme aşaması, her girişi ağın beklediği yoğun tensöre dönüştürür. En yaygın giriş, RGB565 olarak yakalanan bir image.Image nesnesidir. Aşama, onu ağın input_shape özelliğine kırpıp yeniden boyutlandırır, RGB565’ten ağın üzerinde eğitildiği kanal biçimine (çoğu görü ağı için RGB888) dönüştürür, kanal başına ölçek ve ofset uygular ve – ağ tamsayı girişi beklediğinde – aynı geçişte modelin input_dtype türüne kuantize eder. Float girişi için eğitilmiş ağlar kuantizasyon adımını atlar ve ölçek-ofset sonucunu doğrudan alır.

Varsayılan ml.preprocessing.Normalization, modelin giriş dtype’ını okur ve doğru dönüşümü otomatik olarak çalıştırır. Elle ayarlanmış bir Normalization, özel kanal istatistiklerine karşı eğitilmiş modeller için ölçek, ortalama ve standart sapma değerlerini geçersiz kılar (ImageNet’ten türetilen ortalamalar ve standart sapmalar yaygın bir durumdur). Düz bir çağrılabilir nesne, aşamanın tamamını geçersiz kılar – giriş hiç bir görüntü olmadığında ya da uygulama yoğun tensörü zaten kendisi ürettiğinde yararlıdır.

7.6.2. Motor sevkiyatı

Motor aşaması ağı çalıştırır. Hangi motora sevk edeceği kamera tarafından sabitlenir: H7 ve RT1062, TFLM çalıştırır (TensorFlow Lite for Microcontrollers yorumlayıcısı, var oldukları yerde ARM için optimize edilmiş CMSIS-NN çekirdeklerine sevk eder); AE3, aynı TFLM yorumlayıcısını Cortex-M55 yedeğiyle ve çevrimdışı Vela derleyicisinin hızlandırıcı için etiketlediği herhangi bir operatörü işleyen Ethos-U NPU ile çalıştırır; N6, N6’nın amaca özel NPU’su için ST’nin çalışma zamanı olan STAI çalıştırır.

Betik motoru seçmez. Kamerayla birlikte gelen motor, kameranın yüklediği her modeli çalıştırır.

7.6.3. Son işleme

Son işleme aşaması, ağın ham çıkış tensörlerini kullanılabilir bir sonuca geri dönüştürür. Varsayılan davranış, her çıkış tensörünü kayan noktaya dekuantize etmek (ya da float çıkışlı ağlar için değiştirmeden geçirmek) ve onları ndarray nesnelerinin bir listesi olarak döndürmektir. Çoğu uygulama, tensörleri uygulamanın üzerinde işlem yaptığı sonuç biçimine çözmek için bir son işlemci kaydeder – ağın çıkış düzenini bilen çağrılabilir bir nesne: bir sınırlayıcı kutular listesi, bir anahtar noktalar listesi, bir sınıflar listesi.

Betik bu aşamayı iki şekilde kontrol eder. Yapıcı üzerindeki postprocess= anahtar sözcüğü, her çağrıda çalışan bir son işlemci kaydeder. predict() üzerindeki callback= anahtar sözcüğü, kaydedilen son işlemciyi yalnızca bir çağrı için geçersiz kılar – modeli yeniden yüklemeden birkaç çözücü arasında geçiş yapmak için yararlıdır. Her iki biçim de (model, inputs, outputs) alır ve uygulamanın beklediği her şeyi döndürür.

7.6.4. Betiğin neyi kontrol ettiği

Ön işleme ve son işleme, betiğin iki tutamağıdır. Varsayılan ön işlemci çoğu görü modelini ele alır; belirli bir ağ ailesi için doğru son işlemci ml.postprocessing altındaki katalogdan seçilir. Ortadaki motor yapı tarafından kararlaştırılır ve betiğin ne istediğine bakılmaksızın aynı şekilde çalışır.