C++推理BUG

问题排查了两个月,终于定位到具体位置了,麻烦各位大佬帮忙看一下。-
同一个BIN文件,C++无法推理出正确结果,Py可以推理出正确结果。目前能够保证C++的输入和Py的输入是一样的。

  1. 系统软件版本:

  2. 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)

  3. 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)

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

  5. 我已经将推理前的数据保存为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)

C部署问题_20230422233057.zip

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

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

昨晚跑了个fcos,推理没啥问题.-
用官方demo模板,重写了下有问题的这个推理模型,还是输出错误的结果。

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

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

没测你的附件 0.0

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