示例:nanodet 目标检测网络
https://zhuanlan.zhihu.com/p/306530300
https://github.com/RangiLyu/nanodet/tree/325571d27f25fc8f552bc2c639693b1f89620612
1、pytorch训练得到.pth网络
2、安装onnx : pip install onnx
3、pytorch 模型转onnx:
#安装nanodet
cd nanodet
python setup.py develop
#.pth ----> .onnx
#修改 tools/export.py 里的模型路径
python tools/export.py
4、简化onnx模型
下载https://github.com/daquexian/onnx-simplifier 并安装 python setup.py develop
python -m onnxsim input_onnx_model output_onnx_model
5、下载、编译 ncnn源码
https://github.com/Tencent/ncnn
需要先提前安装好opencv、protobuf和cmake
#安装cmake
brew install cmake
#安装opencv
https://blog.csdn.net/xiao13mm/article/details/106165477
#或者直接安装,时间比较长
brew install opencv
#安装protobuf
brew install protobuf
建立编译路径
mkdir -p build
转移到编译路径
cd build
生成 Makefile
cmake -DCMAKE_CXX_STANDARD=11 -DNCNN_OPENMP=OFF -DNCNN_BENCHMARK=ON ..
编译
make -j 8
这样就开始编译,编译过程是不需要手工干预的。
安装 NCNN
make install
在 build-mac 目录下进行安装,将多出两个目录 include(NCNN提供的头文件所在)和 lib(libncnn.a)。
onnx转ncnn
./onnx2ncnn model.onnx model.param model.bin
模型加密:
./ncnn2mem age.param age.bin age.id.h age.men.h
测试:
把ncnn/examples下的squeezenet_v1.1.bin,squeezenet_v1.1.param复制到 ncnn/build/examples 下
./squeezenet /Users/duoduo/Desktop/123.jpeg
显示:
6、Run NanoDet model with C++
https://github.com/RangiLyu/nanodet/blob/main/demo_ncnn/README.md
参考链接:
https://github.com/RangiLyu/nanodet/blob/main/demo_ncnn/README.md
#Set environment variables. Run:
export ncnn_DIR=YOUR_NCNN_PATH/build/install/lib/cmake/ncnn
#编译
cd nanodet-main/demo_ncnn mkdir build cd build cmake .. make
#编译完build里面会生成nanodet_demo unix可执行文件
#复制权重文件过来
cp nanodet_m_oldversion_new.bin nanodet-main/demo_ncnn/build/ cp nanodet_m_oldversion_new.param nanodet-main/demo_ncnn/build/
#修改nanodet-main/demo_ncnn/main.cpp代码de main()函数
NanoDet detector = NanoDet("./nanodet_m_oldversion_new.param", "./nanodet_m_oldversion_new.bin", true);
#测试图片
./nanodet_demo 1 /Users/duoduo/Desktop/234.jpeg
#测试视频
./nanodet_demo 2 VIDEO_PATH
7、NanoDet NCNN Android Demo
#下载Android Studio并安装
https://github.com/Tencent/ncnn/releases
#下载 ncnn-android-vulkan.zip
ncnn-android-vulkan.zip download link
#解压ncnn-android-vulkan.zip
Unzip ncnn-android-vulkan.zip into demo_android_ncnn/app/src/main/cpp or change the ncnn_DIR path to yours in demo_android_ncnn/app/src/main/cpp/CMakeLists.txt
#复制权重文件
Copy the NanoDet ncnn model file (nanodet_m.param and nanodet_m.bin) from models folder into demo_android_ncnn/app/src/main/assets
#从Android Studio中打开demo_android_ncnn
Android Studio下载链接:https://developer.android.com/studio?hl=zh-cn
1)build
2)根据要连接的安卓手机系统版本来选择下载sdk,以及相应的SDK_build_tools.
3)手机设置(华为)
进入开发者模式:设置/关于手机/连续点击‘版本号’
设置:设置/系统和更新/开发人员选项
打开‘USB调试’和‘仅充电模式下允许ADB调试’
USB连接电脑后,选择‘仅充电’
4)连上手机后,Android Studio中会有相应手机选择;点击‘run’;手机端会提示安装软件,打开软件,看到如下界面,即可使用.
遇到的错误:
1、git不能使用,报以下错误
no developer tools were found at ‘/Applications/Xcode.app’, requesting install. Choose an option in the dialog to download the command line developer tools.
然后,会点击安装xcode,这个xcode内容有很多,将近5个g,安装不上.实际上只需要装Command_Line_Tools_macOS_10.13_for_Xcode 就可以了,大小大概189MB, 去苹果的开发者官网就可以下载了,地址 https://developer.apple.com/download/more/ 中间需要登录下,登录完成后在左边的搜索框中搜索Command Line Tools然后搜索;将适合你Mac电脑版本的那个下载下来安装好即可;
2、Run NanoDet model with C++ 中的make出现错误:
nanodet.cpp:50:26: error: no member named 'get_gpu_count' in namespace 'ncnn'
暂时改用CPU来跑:demo_ncnn/nanodet.cpp:51:45
//this->hasGPU = ncnn::get_gpu_count() > 0;
opt.use_vulkan_compute = true
3、从Android Studio中打开demo_android_ncnn build出错
goole网络问题,多试几次就可以下载了.可以去appearance/tools/tools/web_browsers里设置只选择Google浏览器.
NDK版本不对的话,去设置那里下载对应的版本