Tencent / ncnn

ncnn is a high-performance neural network inference framework optimized for the mobile platform
Other
20.15k stars 4.14k forks source link

人脸检测点位的模型无法在60pro上推理正确,在之前安卓上是正常的 #5577

Open lshgw14 opened 2 months ago

lshgw14 commented 2 months ago

error log | 日志或报错信息 | ログ

context | 编译/运行环境 | バックグラウンド

1、在mate60pro上对比验证推理正确 2、目前通过两种方式进行排查: a.ncnn基础库在鸿蒙化后本身存在在鸿蒙内核个别测试用例不通过的情况,会显示具体的错误信息,根据错误日志定位到layer层(计算模块,其中包含ncnn的各类算法),但对于ncnn源码不是很了解,需要求助。 b.通过demo打印日志排查出安卓和matepro对比获取值的不同,定位到使用底层ncnn库的具体接口,以及对应的layer层,需求助;

how to reproduce | 复现步骤 | 再現方法

1. 2. 3.

more | 其他 | その他

nihui commented 2 months ago

cpu.cpp get_thread_siblings 返回错误

leizh007 commented 2 months ago

我本地测试,在mate60 pro鸿蒙next系统上,编译的时候需要关闭优化

export CXXFLAGS="-O0"
export CFLAGS="-O0"

并且开启使用vulkan,关闭fp16和bf16

net.opt.use_fp16_arithmetic = false;
net.opt.use_packing_layout = false;
net.opt.use_bf16_storage = false;
net.opt.use_vulkan_compute = true;

可以出来大体正确的结果,其他情况下,结果不对,而且耗时会特别高。

MadHawkEye commented 1 month ago

请问是怎么在鸿蒙next上实现ncnn的?可以分享一下教程或者工程源码吗?谢谢!

leizh007 commented 1 month ago

请问是怎么在鸿蒙next上实现ncnn的?可以分享一下教程或者工程源码吗?谢谢!

你看readme里有编译鸿蒙上用的so啊,直接编译出来放到鸿蒙中用就好了

MadHawkEye commented 1 month ago

请问是怎么在鸿蒙next上实现ncnn的?可以分享一下教程或者工程源码吗?谢谢!

你看readme里有编译鸿蒙上用的so啊,直接编译出来放到鸿蒙中用就好了

我是按照这个方法做的交叉编译,-DOHOS_STL=c++_static 、-DOHOS_STL=c++_shared 都试了,但是编译出来的是.a静态库文件,不是.sc动态库文件,请问你是怎么编译的?请帮忙po个链接,谢谢!另外问一下你是在linux还是Windows下编译的呢? image

leizh007 commented 1 month ago

请问是怎么在鸿蒙next上实现ncnn的?可以分享一下教程或者工程源码吗?谢谢!

你看readme里有编译鸿蒙上用的so啊,直接编译出来放到鸿蒙中用就好了

我是按照这个方法做的交叉编译,-DOHOS_STL=c++_static 、-DOHOS_STL=c++_shared 都试了,但是编译出来的是.a静态库文件,不是.sc动态库文件,请问你是怎么编译的?请帮忙po个链接,谢谢!另外问一下你是在linux还是Windows下编译的呢? image

额。。。老铁,-DOHOS_STL=c++_static 、-DOHOS_STL=c++_shared你这个链接的是C++的静态库还是C++的动态库啊。。。

我在本地起了个docker,跑的ubuntu20的,用下面这个脚步跑的,路径改成你自己本地的路径

mkdir build && cd build

export CMAKE_FILE_PATH=/home/leizh007/ohos-sdk-windows_linux-public/ohos-sdk/linux/native/build-tools/cmake/bin/cmake
export CMAKE_TOOLCHAIN_FILE_PATH=/home/leizh007/ohos-sdk-windows_linux-public/ohos-sdk/linux/native/build/cmake/ohos.toolchain.cmake

export CXXFLAGS="-O0"
export CFLAGS="-O0"

${CMAKE_FILE_PATH} -DBUILD_SHARED_LIBS=ON \
    -DOHOS_STL=c++_shared \
    -DOHOS_ARCH=arm64-v8a \
    -DOHOS_PLATFORM=OHOS \
    -DNCNN_SHARED_LIB=ON \
    -DCMAKE_BUILD_TYPE=Release \
    -DNCNN_VULKAN=ON \
    -DNCNN_SIMPLEOMP=ON \
    -DNCNN_OPENMP=ON \
    -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE_PATH} .. && make

DEST_DIR=/home/leizh007/ncnn_install
if [ -d ${DEST_DIR} ]; then
    rm -rf ${DEST_DIR}
fi

make install DESTDIR=${DEST_DIR}
lexuszhi1990 commented 1 month ago

@leizh007 老铁,我这边把ncnn模型集成进去以后,在最新的IDE DevEco Studio NEXT Developer Beta3/5.0.3.600 上,debug模式下正常跑通了,然后切换到release模式下 image ,模型推理失败了,表现为耗时几乎为0,不返回结果。

模式 耗时
debug 9.760 ms
release 0.029 ms

关掉代码混淆以后也是这样子,大佬有遇到这种情况吗?

leizh007 commented 1 month ago

@leizh007 老铁,我这边把ncnn模型集成进去以后,在最新的IDE DevEco Studio NEXT Developer Beta3/5.0.3.600 上,debug模式下正常跑通了,然后切换到release模式下 image ,模型推理失败了,表现为耗时几乎为0,不返回结果。

模式 耗时 debug 9.760 ms release 0.029 ms 关掉代码混淆以后也是这样子,大佬有遇到这种情况吗?

是这样的。。。我这也是这种现象。。。

lexuszhi1990 commented 1 month ago

@leizh007 老铁,我这边把ncnn模型集成进去以后,在最新的IDE DevEco Studio NEXT Developer Beta3/5.0.3.600 上,debug模式下正常跑通了,然后切换到release模式下 image ,模型推理失败了,表现为耗时几乎为0,不返回结果。 模式 耗时 debug 9.760 ms release 0.029 ms 关掉代码混淆以后也是这样子,大佬有遇到这种情况吗?

是这样的。。。我这也是这种现象。。。

那这可就尴尬了,老铁。。本来已经在写交付文档了...

我在想,debug模式, ncnn_opt.use_fp16_arithmetic = false; 如果这个设置的话,我这边就会直接崩溃掉的。 那release模式下,是不是再去配置一些ncnn的参数,就有可能能规避这个问题.....