专栏算法工具链【笔记】模型转换yaml文件的配置

【笔记】模型转换yaml文件的配置

Kotei柳琦晗2024-06-03
161
0

【笔记】模型转换yaml文件的配置

在模型转换过程中,使用的yaml配置文件中的参数可分为四个模块,具体如下表中所示。

模型转化相关的参数

模型输入相关参数

模型量化相关参数

编译器相关参数

model_parameters

input_parameters

calibration_parameters

compiler_parameters

在模型转化过程中,参数的选择对模型的表现有重要影响,因此,本文旨在描述具有关键作用的参数,以及推荐选择的参数值。

1. 转化相关的参数 - model_parameters

1. 设置onnx模型的加载路径

  1. > 默认onnx文件在docker容器模型转换工具的工作路径下, 例如,检测模型在J6E容器的路径为:

    samples/ai_toolchain/horizon_model_convert_sample/04_detection/

  • 参数设置:onnx_model: 'model_name.onnx'

2. 选择BPU架构

  1. > 根据使用的板子型号决定选择什么参数配置,具体如下:

    "bernoulli2"--J3, "bayes" --J5, "nash-e"--J6e

  • 参数设置:march: "nash-e"

3. 模型转换结果存放目录

为防止覆盖历史版本,建议对历史模型进行备份,并在每次转换模型时修改输出存放目录。

以J6E,检测模型转换为例,建议参数包含日期,模型类别等信息,具体设置如下:

  • 参数设置: working_dir: 'model_output_detect_J6_dd_mm_info'

4. 用于上板执行的模型文件的名称前缀

最终输出的模型名称前缀,应和代码中规定的名称相统一。以检测模型为例,在J6E中,代码读取的模型名称为:detect_j6.hbm, 则参数设置如下:

  • 参数设置: output_model_file_prefix: 'detect_j6'

5. 设置需要删除的节点

经过实验,可以移除反量化节点,降低模型输出精度到int16,加快推理速度。

若要删除指定名称的节点可使用:remove_node_name: "OP_name"

例如,若是要在检测模型中批量移除反量化节点,参数设置如下:

  • 参数设置:remove_node_type: "Dequantize"

6. 节点精度调整

将模型中的精度敏感节点的量化精度提升为int16,并置于BPU进行计算,提升模型推理效果。

针对例如若要将Conv_0,Conv_2这两个算子进行调整,则参数设置如下:

  • 参数设置:

    node_info: {

​ Conv_0: {

​ 'InputType': 'int16',

​ 'OutputType': 'int16',

​ 'ON': 'BPU'

​ },

​ Conv_2: {

​ 'InputType': 'int16',

​ 'OutputType': 'int16',

​ 'ON': 'BPU'

​ }

2. 模型输入相关参数 - input_parameters

1. 网络实际执行时,输入给网络的数据格式

可选参数为:nv12/rgb/bgr/yuv444/gray/featuremap,例如若使用nv12格式,参数设置如下:

  • 参数设置: input_type_rt: 'nv12'

2. 模型网络的输入大小

以'x'分隔, 不填则会使用模型文件中的网络输入大小,否则会覆盖模型文件中输入大小。

例如,模型的输入尺寸为'1x3x480x480',因此参数设置如下:

  • 参数设置: input_shape: '1x3x480x480'

3. 模型量化相关参数 - calibration_parameters:

  1. #### 模型量化的参考图像的存放目录

图片格式支持Jpeg、Bmp等格式,输入的图片应该是使用的典型场景,

一般是从测试集中选择20~100张图片,另外输入的图片要覆盖典型场景,不要是罕见场景,如过曝光、饱和、模糊、纯黑、纯白等图片。若有多个输入节点, 则应使用';'进行分隔。

当模型尺寸发生变化,要及时按照新的尺寸重新制作calibration数据集。

  • 参数设置: cal_data_dir: 'path_to_calibration_data_set'

1. 校准数据二进制文件的数据存储类型

可选值为:float32, uint8, 建议选择float32

  • 参数设置:cal_data_type: 'float32'

2. 模型量化的算法类型

支持kl、max、default、load,通常采用default即可满足要求, 若为QAT导出的模型, 则应选择load,

例如,选择使用max方法,则该参数设置为:

  • 参数设置: calibration_type: 'max'

3. 指定是否针对每个channel进行校准

建议对每个channel都进行校准

  • 参数设置:per_channel: True

4. 编译器相关参数 - compiler_parameters

1. 指定编译模型时的进程数

当模型转换过慢,可以根据硬件条件增加进程数,感知服务器中转换模型,该参数可使用16

  • 参数设置:jobs: 16

2. 优化等级

可选范围为O0~O3,其中O0不做任何优化, 编译速度最快,优化程度最低,

O1-O3随着优化等级提高,预期编译后的模型的执行速度会更快,但是所需编译时间也会变长。

推荐用O2。

  • 参数设置:optimize_level: 'O2'

算法工具链
征程5征程6杂谈
评论0
0/1000