ml --- 机器学习

ml 模块包含在 OpenMV Cam 上加载和运行 TensorFlow Lite 模型的功能。该模块对外暴露了单个面向用户的类 ml.Model,它对底层的 C Model 类进行了封装,并增加了 Python 端的便利功能(自动加载标签以及自动将图像转换为张量)。

子模块

class Model -- 模型容器

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

将 TensorFlow Lite 模型从 path 加载到内存中并准备进行推理。path 可以是文件系统上的文件,也可以是内置于固件镜像中的模型名称。

postprocess 是一个可选的后处理可调用对象,由 Model.predict 在推理后调用。它接收 (model, inputs, outputs),并可返回任意值(例如边界框列表)。提供该参数时,为了性能,后处理器接收的是原始模型输出张量(未反量化)。

在构造时,封装器还会尝试加载一个与 path 同基名的 .txt 文件;若找到,则将每一行加载到 Model.labels 中。否则 Model.labelsNone

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

在模型上运行推理并返回输出张量。

inputs 是一个列表,每个模型输入张量对应一个条目。每个条目可以是:

  • 一个 ndarray,其形状与 Model.input_shape 中对应的条目相匹配。值会使用输入张量的 scale 和 zero point 进行量化(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]

一个浮点数列表,给出每个输入张量的量化 scale。

input_zero_point: list[int]

一个整数列表,给出每个输入张量的量化 zero point。

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

一个元组列表,给出每个输出张量的形状。

output_dtype: list[str]

一个单字符字符串列表,给出每个输出张量的 dtype:'b'(int8)、'B'(uint8)、'h'(int16)、'H'(uint16)、'f'(float32)。

output_scale: list[float]

一个浮点数列表,给出每个输出张量的量化 scale。

output_zero_point: list[int]

一个整数列表,给出每个输出张量的量化 zero point。

postprocess: object

提供给构造函数的后处理可调用对象,若无则为 None

labels: list[str]

从模型旁的 .txt 文件加载的标签字符串列表,若不存在此类文件则为 None