ml --- 機器學習

ml 模組包含在 OpenMV Cam 上載入並執行 TensorFlow Lite 模型的功能。此模組對外公開單一面向使用者的類別 ml.Model,它封裝底層的 C Model 類別並提供額外的 Python 端便利功能(自動載入標籤以及自動將影像轉換為張量)。

子模組

class Model -- 模型容器

class ml.Model(path: str, *, postprocess: object = None) Model

path 將 TensorFlow Lite 模型載入記憶體並為推論做好準備。path 可以是檔案系統上的檔案,或是內建於韌體映像中的模型名稱。

postprocess 是一個選用的後處理可呼叫物件,由 Model.predict 在推論後叫用。它接收 (model, inputs, outputs) 並可回傳任意值(例如邊界框清單)。提供時,為了效能,後處理器接收的是原始的模型輸出張量(未經反量化)。

建構時,此封裝器還會嘗試載入與 path 同基礎名稱的 .txt 檔案;若找到,則每一行都會載入 Model.labels。否則 Model.labelsNone

predict(inputs: list, *, callback: object = None) list

在模型上執行推論並回傳輸出張量。

inputs 是一個清單,每個模型輸入張量對應一個項目。每個項目可以是:

  • 形狀與 Model.input_shape 中對應項目相符的 ndarray。值會使用輸入張量的縮放係數與零點進行量化(float32 輸入則原樣傳遞)。

  • 一個 image.Image 物件。封裝器會自動將其包裝在 ml.preprocessing.Normalization 物件中,以轉換為預期的張量。

  • 一個可呼叫物件。它會以 (bytearray, shape, dtype) 被叫用,並預期將輸入張量資料填入該 bytearray。

callback 是一個選用的單次呼叫後處理可呼叫物件。提供時,它僅針對本次呼叫覆寫建構函式上設定的 postprocess。此回呼接收 (model, inputs, outputs),且其回傳值會由 predict 回傳。

回傳一個 ndarray 輸出清單,每個模型輸出張量對應一個。若未啟用任何後處理器,輸出會反量化為 float32;若啟用了後處理器,則改為將原始輸出張量(使用各張量的原生 dtype)傳遞給它。

len: int

已載入模型的大小,以位元組為單位。

ram: int

模型的張量競技場(tensor arena)所使用的 RAM 量,以位元組為單位。

input_shape: list[tuple[int, ...]]

一個元組清單,給出每個輸入張量的形狀。

input_dtype: list[str]

一個單字元字串清單,給出每個輸入張量的 dtype:'b'(int8)、'B'(uint8)、'h'(int16)、'H'(uint16)、'f'(float32)。

input_scale: list[float]

一個浮點數清單,給出每個輸入張量的量化縮放係數。

input_zero_point: list[int]

一個整數清單,給出每個輸入張量的量化零點。

output_shape: list[tuple[int, ...]]

一個元組清單,給出每個輸出張量的形狀。

output_dtype: list[str]

一個單字元字串清單,給出每個輸出張量的 dtype:'b'(int8)、'B'(uint8)、'h'(int16)、'H'(uint16)、'f'(float32)。

output_scale: list[float]

一個浮點數清單,給出每個輸出張量的量化縮放係數。

output_zero_point: list[int]

一個整數清單,給出每個輸出張量的量化零點。

postprocess: object

提供給建構函式的後處理可呼叫物件,或 None

labels: list[str]

從模型旁的 .txt 檔案載入的標籤字串清單,若無此檔案則為 None