QAT量化如何配置输入

1.芯片型号:J5

2.天工开物开发包OpenExplorer版本:J5_OE_1.1.40

3.问题定位:板端部署

4.问题具体描述:PTQ模型导出bin,输入输出一定要在CPU上执行吗?我的模型输入输出节点在CPU上耗时占推理50%;若QAT导出,输入输出是不是在BPU上执行?

感谢您使用地平线芯片算法工具链,最近我们在收集大家的满意度反馈,欢迎您填写问卷,详细情况可见:https://developer.horizon.ai/forumDetail/146177053698464782

QAT通过compile_model传参的方式来设置input,细节可以阅读下该文章:-
PTQ&QAT方案板端验证注意事项 (horizon.ai)

文章中2.1.1小节中说明,plugin通过开发了两个预处理算子用于实现yuv444到rgb/bgr的转换以及归一化操作的硬件加速。这两个算子分别为centered_yuv2rgb以及centered_yuv2bgr。那当input_source为pyramid时,板端输入数据类型HB_DNN_IMG_TYPE_NV12_SEPARATE是怎么转到yuv444的?

板端的输入数据是不需要转为yuv444的,板端需要准备的数据类型为nv12;PC的才需要nv12Toyuv444。

只有设置input_source为pyramid,板端输入才是HB_DNN_IMG_TYPE_NV12_SEPARATE吗?

然后编译的hbm模型实际上和PTQ一样在模型中插入了输入为NV12_SEPARATE的数据空间转换和归一化操作?

1. hbm模型是HB_DNN_IMG_TYPE_NV12_SEPARATE,.bin是HB_DNN_IMG_TYPE_NV12。-
2. 是的,如果使用了centered_yuv2rgb以及centered_yuv2bgr做转换和归一化的话会集成在模型中做加速。-

感谢,这个问题清楚了!

2.3提到模型输入输出对齐规则解析,对齐规则中NCHW:W bytes对齐 256 * {0, 1, ...} + {0, 16, 32, 64, 128},那我的输出W为60,aligned W不应该是64吗?(60+4)×4 = 256,这里怎么设置的?必须要是设置吗

如下图,input_source = pyramid时, 板端模型input_type_rt=NV12,那其他的不支持吗,此时input_type_train是bgr还是rgb,怎么设置?

还有训练时input_type_train的其他值不需要额外设置吗?还是不支持?

上图是PTQ的yaml配置的,QAT的转换是提供的centered_yuv2rgb以及centered_yuv2bgr做转换和归一化,同时编译接口是只有input_source以及input_layout参数与模型输入信息相关的。

对齐规则是用于板端去除align部分的值,用户不需要自己配置,最终模型的输出以aligned shape解析和分配空间,取值做后续计算需要跳过aligned的值,取valid值