专栏算法工具链C++推理BUG

C++推理BUG

已解决
小玺玺2023-04-22
108
5
问题排查了两个月,终于定位到具体位置了,麻烦各位大佬帮忙看一下。
同一个BIN文件,C++无法推理出正确结果,Py可以推理出正确结果。目前能够保证C++的输入和Py的输入是一样的。
  1. 系统软件版本:

    1. C++使用API版本:[BPU_PLAT]BPU Platform Version(1.3.1) [HBRT] set log level as 0. version = 3.14.5 [DNN] Runtime version = 1.9.7_(3.14.5 HBRT)

    2. Py输出的版本:[EasyDNN]EasyDNN version: 0.1.1 [BPU_PLAT]BPU Platform Version(1.3.1)! [HBRT] set log level as 0. version = 3.14.5 [DNN] Runtime version = 1.9.7_(3.14.5 HBRT)

  2. 复现概率:百分百复现

    1. 我已经将推理前的数据保存为npz文件,跟py api的输入进行了对比,确保了输入是没问题的。

下图是C++代码

下图是Python代码
下面是对比差异:
相关代码我也放在附件里了,包含C++和Python代码,已经网络模型和测试图像。
编译C++相关的CMake代码块为:
set(BIN inter_unet_standalong)

add_executable(${BIN} inter_unet_standalong.cpp)

set_property(TARGET ${BIN} PROPERTY INTERPROCEDURAL_OPTIMIZATION True)

target_link_libraries(${BIN}

-lpthread -lrt -dl

-ldnn -lcnn_intf -lhbrt_bernoulli_aarch64

-lglog -lgflags

-lopencv_core -lopencv_highgui -lopencv_imgproc

-lopencv_imgcodecs cnpy)

附件:
算法工具链
评论3
0/1000
  • 小玺玺
    Lv.1

    问题已解决,感谢晟哥和富哥,问题原因是数据没对齐的原因,我输入的图像是NHWC,维度为256*256*3,所以对齐数据的尺度变为256*256*4,每个像素由之前的三个元素变为4个元素,所以直接memcpy肯定会出错。使用如下指令可以自动对齐。

    usage_tensor.properties.alignedShape = usage_tensor.properties.validShape;

    2023-04-24
    5
    0
  • tripleMu
    Lv.1

    我用 c++ api 没啥问题哇 使用几个月了 0.0

    2023-04-23
    0
    2
    • 小玺玺回复tripleMu:

      附件里提供了我测试的代码,你用这个推理没问题嘛?

      2023-04-23
      0
    • tripleMu回复小玺玺:

      没测你的附件 0.0

      感觉应该是你某个地方没搞对

      2023-04-23
      0
  • 小玺玺
    Lv.1
    昨晚跑了个fcos,推理没啥问题.
    用官方demo模板,重写了下有问题的这个推理模型,还是输出错误的结果。
    2023-04-24
    0
    0