天天看點

【ncnn】MobileNetSSD通過ncnn推理實作目标檢測ubuntu16.04測試一、訓練caffemodel二、編譯ncnn三、轉換模型四、測試

環境:

Ubuntu16.04

一、訓練caffemodel

具體方法請參考連結:【Caffe】用Caffe訓練MobileNetSSD。

二、編譯ncnn

具體方法請參考連結:【ncnn】Ubuntu16.04+OpenCV3.4.0 ncnn環境搭建。

完成之後确認build/tools下有ncnn2mem可執行檔案,build/tools/caffe下有caffe2ncnn可執行檔案。

三、轉換模型

這裡要用到caffe/build/tools下面的兩個工具,這裡轉換的是合并bn層的model

cd caffe/build/tools
./upgrade_net_proto_text no_bn.prototxt MobileNetSSD_deploy_new.prototxt
./upgrade_net_proto_binary no_bn.caffemodel MobileNetSSD_deploy_new.caffemodel
           
【ncnn】MobileNetSSD通過ncnn推理實作目标檢測ubuntu16.04測試一、訓練caffemodel二、編譯ncnn三、轉換模型四、測試

轉換前,no_bn.prototxt的輸入是data,

【ncnn】MobileNetSSD通過ncnn推理實作目标檢測ubuntu16.04測試一、訓練caffemodel二、編譯ncnn三、轉換模型四、測試

而轉換之後的MobileNetSSD_deploy_new.prototxt的輸入是input,

【ncnn】MobileNetSSD通過ncnn推理實作目标檢測ubuntu16.04測試一、訓練caffemodel二、編譯ncnn三、轉換模型四、測試

下面用ncnn/build/tools/caffe下的caffe2ncnn工具轉換模型。

./caffe2ncnn MobileNetSSD_deploy_new.prototxt MobileNetSSD_deploy_new.caffemodel MobileNetSSD_deploy.param MobileNetSSD_deploy.bin
           
【ncnn】MobileNetSSD通過ncnn推理實作目标檢測ubuntu16.04測試一、訓練caffemodel二、編譯ncnn三、轉換模型四、測試

下面是加密(可選),用的工具是ncnn/build/tools下的ncnn2mem,

./ncnn2mem MobileNetSSD.param MobileNetSSD.bin MobileNetSSD.id.h MobileNetSSD.mem.h
           
【ncnn】MobileNetSSD通過ncnn推理實作目标檢測ubuntu16.04測試一、訓練caffemodel二、編譯ncnn三、轉換模型四、測試

四、測試

在ncnn/examples目錄下有一個mobilenetssd.cpp,把這個檔案稍微修改一下作為我的測試代碼。

mobilenet.load_param("mobilenet_ssd_voc_ncnn.param");
    mobilenet.load_model("mobilenet_ssd_voc_ncnn.bin");
           

修改為我自己的model檔案。

mobilenet.load_param("MobileNetSSD_deploy.param");
    mobilenet.load_model("MobileNetSSD_deploy.bin");
           

如果使用加密的模型,

mobilenet.load_param("MobileNetSSD_deploy.param.bin");
    mobilenet.load_model("MobileNetSSD_deploy.bin");
           

 将

static const char* class_names[] = {"background",
        "aeroplane", "bicycle", "bird", "boat",
        "bottle", "bus", "car", "cat", "chair",
        "cow", "diningtable", "dog", "horse",
        "motorbike", "person", "pottedplant",
        "sheep", "sofa", "train", "tvmonitor"};
           

修改為自己的類别名字。

把修改後的cpp檔案重命名為MobileNetSSD.cpp。

打開ncnn/examples/CMakeLists.txt,在末尾添加

add_executable(MobileNetSSD MobileNetSSD.cpp)
target_link_libraries(MobileNetSSD ${NCNN_EXAMPLE_LINK_LIBRARIES})
           

進入ncnn/build,執行

make
           

下面已經多了MobileNetSSD這個可執行檔案,

【ncnn】MobileNetSSD通過ncnn推理實作目标檢測ubuntu16.04測試一、訓練caffemodel二、編譯ncnn三、轉換模型四、測試

将MobileNetSSD_deploy.param和MobileNetSSD_deploy.bin這兩個檔案也拷貝到這個目錄下,執行

./MobileNetSSD test.jpg
           

終端會列印出結果,

【ncnn】MobileNetSSD通過ncnn推理實作目标檢測ubuntu16.04測試一、訓練caffemodel二、編譯ncnn三、轉換模型四、測試

也會彈出視窗顯示boundingbox。

效果和【Caffe】用Caffe訓練MobileNetSSD測試的是一緻的,效果差,但是至少證明整個流程已經走對了。

繼續閱讀