专栏算法工具链J5板端部署检测模型得到推理结果不正常

J5板端部署检测模型得到推理结果不正常

已解决
默认096322024-07-15
183
7

1. 芯片型号:J5

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

3. 问题定位:板端部署

4. 问题具体描述:我们有一个YOLOV5s的模型,经过地平线转换后得到.bin文件,根据OE包示例代码修改了我们自己的代码生成arm可执行文件部署在J5板端,理想结果应该是:模型的输入为640*640的rgb格式,经过推理后得到的结果是一个框的中心坐标,一个置信度,两个检测类别。

现在遇到的问题是,对于不同的图片,打印推理前的输入数据,看着是正常的。但是经过推理后,从输出张量中打印出来的结果明显不正常,数值不正确并且数值具有重复性。现在找不到原因,麻烦指导一下,代码放在附件中了。


附件:
算法工具链
征程5技术深度解析
评论2
0/1000
  • Huanghui
    Lv.5

    你好,针对你的问题先查看是否quantized.onnx模型也存在你描述的问题吧,bin是quantized.onnx模型编译后的结果,如果quantized.onnx可以正常完成推理并输出结果,那应该是系统版本没有对齐或者是后处理代码存在问题。

    另外,如果方便分享一下你的onnx模型和yaml文件吧,这样会比较方便排查问题!

    注意:尽量使用新版本的工具链进行测试,因为不排除历史版本确实存在问题但是问题在新版本中已经被修复的情况。

    2024-07-15
    1
    5
    • 默认09632回复Huanghui:

      onnx格式的模型不是无法在板端使用吗,我们现在训练好的模型就是onnx格式的,但是需要按照OE包的教程转换为.bin格式。意思是要将转换后生成的quantized.onnx模型在我们的代码上跑一遍看看推理结果嘛?图是版本号信息,onnx模型和yaml文件已经上传到附件中,麻烦帮忙排查下。

      2024-07-16
      0
    • 默认09632回复Huanghui:

      由于我们代码需要将onnx模型转为engine,但是地平线转换后的量化模型里应该是算子和TensorRT不兼容,所以无法转换成功,因此没有办法验证量化模型是否有一样的问题。请问您那边有结果了吗

      2024-07-17
      0
    • Huanghui回复默认09632:

      不是的,quantized.onnx模型在docker中是可以推理的,你可以先在开发机中对量化后的模型进行验证,验证OK了再去板端部署。

      quantized.onnx的验证可以参考OE包中的ddk\samples\ai_toolchain\horizon_model_convert_sample\04_detection\03_yolov5x\mapper\04_inference.sh

      2024-07-17
      0
    • 默认09632回复Huanghui:

      你好,根据yolov5x的示例代码进行修改,将其中的参数与转换后的 quantized.onnx 模型对齐,现在跑通后得到的推理结果依然不正确,检测人脸和车牌不准,并且错误检测的置信度依然很高。在前处理代码部分,我注意到有个infer_transformer函数,在调用的时候是将输出的图片进行缩放-》bgr-》rgb-》nv12-》yuv444,但是我们自己的模型源代码中进行推理是输入rgb类型,修改infer_transformer会报错。这个前处理输入数据格式与模型的不匹配应该是会影响推理结果的 请问有没有办法解决呢 麻烦提供一些修改建议。

      2024-07-24
      0
    • Huanghui回复默认09632:

      几个信息你要注意要:

      1. 仔细阅读yaml配置章节部分,确保yaml配置中input_type_train、input_layout_train以及norm_type、mean_val、mean_value与你的原始训练模型的输入一直。
      2. 如果input_type_rt配置是nv12,在推理quantized.onnx 是是需要提供yuv444_128 的(输入yuv444,offset128),同时编译出的模型是板端是需要提供NV12数据的。rgb-》nv12的变换属于有损转换,但影响与模型对数据的敏感度有感,一般影响不大。在确定配置和流程都正确的情况下,如果依然存在精度问题,大部分是量化误差带来的,你需要参考精度调优部分进行进度调优。
      3. 如果想验证排除-》bgr-》rgb-》nv12-》yuv444带来的影响,也可一input_type_train和input_layout_train均使用featuremap的配置,这样无论是格式装换还是数据归一化都需要你推理前通过代码完成,可以保证quantized.onnx和hbm模型的输入都是一样的。
      4. 如果原始模型的结果与量化后模型的结果不一致,对最终结果产生影响的不仅仅是模型量化精度损失,前处理和后处理逻辑同样会带来问题。

      综上,建议的方案是确保yaml配置正确性的情况下编译模型,通过余弦相识度初步判断量化损失并调整,如果精度损失不大,先验证quantized.onnx 的推理结果是否和原始模型差别不大,最后通过hb_verifer验证双端环境一致性后再板端部署。

      2024-08-07
      0
  • Huanghui
    Lv.5

    客户您好,鉴于长时间未收到你的答复,我们暂将该问题做关闭处理,如您仍有相同问题,请在新的帖子中重新发起提问,祝您工作愉快!

    2024-08-15
    0
    0