3. 用户界面

本章介绍用户的使用界面。

基本操作过程是用 model_transform.py 将模型转成mlir文件,然后用 model_deploy.py 将mlir转成对应的model。如果需要转INT8模型,则 需要进行calibration。大致过程如下:

_images/ui_0.png

图 3.1 用户界面1

另外支持一下复杂的情况,支持图片输入带预处理,支持多输入情景,如下:

_images/ui_1.png

图 3.2 用户界面2

3.1. model_transform.py

用于将各种神经网络模型转换成MLIR文件,支持的参数如下:

表 3.1 model_transform 参数功能

参数名

必选?

说明

model_name

指定模型名称

model_def

指定输入文件用于验证,可以是图片或npy或npz;可以不指定,则不会正确性验证

input_shapes

指定输入的shape,例如[[1,3,640,640]];二维数组,可以支持多输入情况

resize_dims

原始图片需要resize之后的尺寸;如果不指定,则resize成模型的输入尺寸

keep_aspect_ratio

在Resize时是否保持长宽比,默认为false;设置时会对不足部分补0

mean

图像每个通道的均值,默认为0.0,0.0,0.0

scale

图片每个通道的比值,默认为1.0,1.0,1.0

pixel_format

图片类型,可以是rgb、bgr、gray、rgbd四种情况

output_names

指定输出的名称,如果不指定,则用模型的输出;指定后用该指定名称做输出

test_input

指定输入文件用于验证,可以是图片或npy或npz;可以不指定,则不会正确性验证

test_result

指定验证后的输出文件

excepts

指定需要排除验证的网络层的名称,多个用,隔开

mlir

指定输出的mlir文件名称和路径

转成mlir文件后,会生成一个 ${model_name}_in_f32.npz 文件,该文件是后续模型的输入文件。

3.2. run_calibration.py

用少量的样本做calibration,得到网络的量化表,即每一层op的threshold/min/max。

支持的参数如下:

表 3.2 run_calibration 参数功能

参数名

必选?

说明

指定mlir文件

dataset

指定输入样本的目录,该路径放对应的图片,或npz,或npy

data_list

指定样本列表,与dataset必须二选一

input_num

指定校准数量,如果为0,则使用全部样本

tune_num

指定微调样本数量,默认为10

histogram_bin_num

直方图bin数量,默认2048

o

输出calibration table文件

3.3. model_deploy.py

将mlir文件转换成相应的model,参数说明如下:

表 3.3 model_deploy 参数功能

参数名

必选?

说明

mlir

指定mlir文件

quantize

指定默认量化类型,支持F32/F16/BF16/INT8

chip

指定模型将要用到的平台,支持bm1684x(目前只支持这一种,后续会支持多款TPU 平台)

calibration_table

指定量化表路径,当存在INT8量化的时候需要量化表

tolerance

表示 MLIR 量化后的结果与 MLIR fp32推理结果相似度的误差容忍度

correctness

表示仿真器运行的结果与MLIR量化后的结果相似度的误差容忍度,默认0.99,0.90

test_input

指定输入文件用于验证,可以是图片或npy或npz;可以不指定,则不会正确性验证

test_reference

用于验证模型正确性的参考数据(使用npz格式)。其为各算子的计算结果

excepts

指定需要排除验证的网络层的名称,多个用,隔开

model

指定输出的model文件名称和路径

3.4. 其他工具

3.4.1. model_runner.py

对模型进行推理,支持bmodel/mlir/onnx/tflite。

执行参考如下:

$ model_runner.py \
   --input sample_in_f32.npz \
   --model sample.bmodel \
   --output sample_output.npz

支持的参数如下:

表 3.4 model_runner 参数功能

参数名

必选?

说明

input

指定模型输入,npz文件

model

指定模型文件,支持bmodel/mlir/onnx/tflite

dump_all_tensors

开启后对导出所有的结果,包括中间tensor的结果

3.4.2. npz_tool.py

npz在TPU-MLIR工程中会大量用到,包括输入输出的结果等等。npz_tool.py用于处理npz文件。

执行参考如下:

# 查看sample_out.npz中output的数据
$ npz_tool.py dump sample_out.npz output

支持的功能如下:

表 3.5 npz_tool 功能

功能

描述

dump

得到npz的所有tensor信息

compare

比较2个npz文件的差异

to_dat

将npz导出为dat文件,连续的二进制存储