ubuntu18.04+OpenCV4.2+Darknet2NCNN將yolov3模型轉換爲ncnn模型
opencv版本3.x可能更好一些,3到4有些參數變化
一、下載darknet2ncnn
可以直接去官網下載,如果配置了gitee,也可以用命令
git clone https://github.com/xiangweizeng/darknet2ncnn.git
二、編譯電腦端模型並測試
1.根據官網教程來,初始化,我未配置git所以跳過了:
cd darknet2ncnn
git submodule init
git submodule update
2.darknet2ncnn解壓後,根目錄下有darknet、ncnn兩個文件夾,裏面是空的,需要自己下載darknet和ncnn放進去
3.構建 darknet
cd darknet2
make -j8
rm libdarknet.so
4.構建 ncnn
# workspace darknet2ncnn
cd ncnn
mkdir build
cd build
cmake ..
make -j8
make install
cd ../../
5.構建 darknet2ncnn , convert_verify and libdarknet2ncnn.a
# workspace darknet2ncnn
make -j8
6.yolov3-tiny模型轉換及驗證
make yolov3-tiny.net
轉換結果,ncnn模型需要的網絡和權重文件的格式:
./darknet2ncnn data/yolov3-tiny.cfg data/yolov3-tiny.weights example/zoo/yolov3-tiny.param example/zoo/yolov3-tiny.bin
7.構建 example
#workspace darknet2ncnn
cd example
make -j4
注意,可能會報錯:
A:因爲CV_LOAD_IMAGE_COLOR在OpenCV4版本命名爲:IMREAD_COLOR
修改方法:將錯誤參數替換爲:cv::IMREAD_COLOR
B:CV_FILLED,這個參數可以控制輸出圖片識別結果標識的邊框,未找到應該替換成什麼枚舉值,所以我直接改成參數:1 了
8.運行yolov3-tiny
#workspace example
make yolov3-tiny.coco
9.最終結果如下:
三、編譯Android端NCNN庫文件,前提條件:已經配置了Android的SDK
1.進入NCNN執行:mkdir -p build-android-arm64-v8a
根據你自己調試用的手機去選擇編譯的版本:‘arm64-v8a’,‘armeabi-v7a’,‘x86’,‘x86_64’
2.進入你新建的目錄:cd build-android-arm64-v8a
3.編譯:
cmake -DCMAKE_TOOLCHAIN_FILE=/home/zhx/Android/Sdk/ndk/21.0.6113669/build/cmake/android.toolchain.cmake \ -DANDROID_ABI="arm64-v8a" \ -DANDROID_ARM_NEON=ON ..
4.編譯:
make -j4
make install
在build-android-arm64-v8a文件夾下生成了install文件夾,它就是移植到Android端需要的庫文件