使用ncnn部署的模型需要满足:模型的输入及其他层的特征图要满足16字节对齐,width x height要能整除4。在搭建模型时需要注意这一点。否则会出现模型输出异常的情况,具体就是输出nan和-nan或者误差非常大,打印各层输出时会发现数组序号是乱的。
1、安装模型转换工具:https://github.com/Tencent/ncnn/wiki/how-to-build
2、编译Android端的ncnn库:参考https://github.com/moli232777144/mtcnn_ncnn中的tools/build_android.bat。下载ncnn源码 https://github.com/Tencent/ncnn, 修改build_android.bat中的文件路径,在shell中运行build_android.bat即可。
示例:
@echo off
%%修改ndk所在目录,15以上版本
set ANDROID_NDK=C:\android-sdk\ndk-bundle\ndk-bundle
cd ncnn-master
mkdir build_android
cd build_android
cmake -G "Unix Makefiles" -DANDROID_TOOLCHAIN=clang -DCMAKE_TOOLCHAIN_FILE="%ANDROID_NDK%\build\cmake\android.toolchain.cmake" ..\ -DCMAKE_MAKE_PROGRAM="%ANDROID_NDK%/prebuilt/windows-x86_64/bin/make.exe" -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI="armeabi-v7a" -DANDROID_ARM_NEON=ON -DANDROID_PLATFORM=android-16 -DANDROID_NATIVE_API_LEVEL=16 ..
cmake --build .
cmake --build . --target install
cd ..
pause
关于OPENMP:
OPENMP会导致模型推理的速度不稳定,可以修改ncnn-master/CMakeLists.txt ,关闭OPENMP
option(NCNN_OPENMP "openmp support" OFF)
3、加载模型并进行推理:https://github.com/Tencent/ncnn/wiki/how-to-use-ncnn-with-alexnet
5、注意事项:https://github.com/Tencent/ncnn/wiki/FAQ-ncnn-produce-wrong-result
尤其要注意模型的输入及其他层的特征图要满足16字节对齐,width x height要能整除4。在搭建模型时需要注意这一点。
网友评论