使用RGB/BGR进行QAT训练后,插入yuv2rgb/bgr 时的一些疑惑

1.芯片型号:J5-
2.天工开物开发包OpenExplorer版本:J5_OE_1.1.29-
3.问题定位:QAT训练-
4.问题具体描述:QAT训练时,使用RGB/BGR而非YUV数据来训练。根据PTQ&QAT方案板端验证注意事项中的2.2.1章可以手动添加预处理OP。其中有几个问题比较疑惑:

  1. 第四步“推理一次quantized模型”的目的是什么?只是验证精度吗?
  2. 要得到插入这个op的hbm,只需要compile_perf.py调用到了插入了这个OP的模型forward代码就行了是吗?

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

您好,推理一次quantized模型的目的是为了跑一遍模型,让预处理op被正确插入,并且也是建议插入后验证一下模型推理结果是否正确。-
想要确认节点是否被插入,可以使用可视化工具export_quantized_onnx查看:4.2.4.5. Bug 检查 — Material for Sphinx (hobot.cc)

您好,那我要编译出hbm,是否只要编译这个带着预处理op的模型forward即可?

您好,是的

您好,我这里还有几个问题。

  1. 官方的推荐YUV444训练的均值和方差均为128,即将像素值归一化至-1,1。我理解这时编译出的hbm应该是带有预处理的OP,这个OP会将输入的像素值归一化至-1,1?
  2. 那假设我不想使用-1,1的归一化方式,比如归一化到0,1。那模型配置的那个PY需要怎么配置?因为compile_config中也没有这样的配置项目,是说已经写死了-1,1?还是说我只要把data_loader中的"Normalize"配置改掉,编译时自然就会知道当前模型的归一化方式?

您好,plugin原生只支持 yuv444 & 均值和方差均为128,编译时通过compile_model( ··· , input_source=“pyramid”,···)来指定板端数据来源为PYM。-
如果模型使用的是rgb或者bgr训练,则使用centered_yuv2rgb / centered_yuv2bgr 算子,将归一化参数配置到这个算子里,训练的时候使用plugin提供的quantstub,并且不要指定scale(即动态统计);编译阶段把统计出来的scale配置到算子的qscale参数里,并且把quantstub的scale设置成1,就可以了。-
如果模型使用yuv444训练,但是均值方差不为128,目前暂不支持。

好的,感谢答疑解惑。