专栏算法工具链cpp复现hbm读图时不一致的问题

cpp复现hbm读图时不一致的问题

默认412482026-04-10
122
7
我在cpp上用hbm文件复现infer_hbir.py的时候,通过截取模型的process_input获得的 bins,到了cpp里再做对应模型的量化,结果得到的和hbm是一致的,在对比了前处理和.bin文件获取前处理的结果基本一致之后,发现图片是不一致的,就用image.bin (一个std::vector<float> img_data(6 3 480 * 800);) 拆分成6组 y uv数据,配合cpp实现的前处理一起用hbDNNInferV2 运行,得到的结果也是和infer_hbir.py一致的,我在尝试复现python里面对六张图片的操作的时候发现 使用torchvision的resize和pad,再转成yuv,这些操作在cpp里复现不了得到的结果就不一样,我想知道有什么方式可以对齐image.bin吗
算法工具链
技术深度解析征程6
评论1
0/600
  • YCJ
    Lv.4

    cpp里是用的opencv?结果不一致影响板端的实际应用吗?

    2026-04-13
    0
    6
    • 默认41248回复YCJ:
      是的,cpp用的opencv来处理resize->pad->cvt(BRG2YUV), 得到的结果会存在差异
      左边图的结果是使用python 内存的bin再用cpp读取后运行hbm得到,右边是使用cpp的opencv完成图片处理,再到yuv,再用hbm的结果,直接看结果的话差异还是挺大,不过box也确实都在物体上
      2026-04-13
      0
    • YCJ回复默认41248:
      如果不影响应用就不用纠结这个问题了。如果影响较大,你可以去查torchvision的resize和pad的源码,在cpp里按照相同的pad和resize方式去复现python端的前处理
      2026-04-13
      1
    • 默认41248回复YCJ:

      这个情况在大家的部署过程也是这样子的吗,还是说可以在compile这个hbm的时候,选择把前处理也compile到hbm里面就不使用cpp做图片方面的复现呢,如果这样子做需要怎么弄呢

      2026-04-13
      0
    • YCJ回复默认41248:
      resize是compile不到模型内部的,模型内部是用于做颜色空间转换、归一化等等操作的。大家在部署的过程中基本上都是自己写resize和pad的逻辑,也可以使用板端的金字塔硬件去做,但这也不能保证和python端一致。
      2026-04-13
      0
    • 默认41248回复YCJ:

      好的呀,还有一个问题是,关于复现horizon.nn.functional.bgr_to_yuv444(orig_img["img"], True),这个转化也找不到具体的实现,那么这个和cpp里使用opencv的cvt BGR2YUV 有什么区别吗,还有这里reserve_channel=True的话,是不是说明就算前面resize和pad之前把BGR2RGB了 这里处理的也是bgr对吗

      2026-04-13
      0
    • YCJ回复默认41248:

      .bgr_to_yuv444这个看不到源码,要想知道和opencv的是否一致得测一下

      2026-04-13
      0