目标检测:PC端MobileNetSSD通过Ncnn前向推理框架之实现

​我的最终目标是将MobileNetSSD部署到Anroid设备端,考虑到运行效率,采用了NCNN前向推理来实现,下面将在PC端的实现过程和大家分享下,欢迎讨论。

一、前提

1、在ubuntu系统下安装caffe-ssd,这一过程不清楚的地方可以参考我之前的一篇文章,也可以参考下面链接的文章:

https://blog.csdn.net/qq_33431368/article/details/84866166

2、用自己的数据集制作图像VOC数据集,用下面链接的工具:

https://github.com/imistyrain/MRLabeler.git

下载好后,里面有详细的操作说明。

3、Caffe实现MobileNetSSD,可以参考我之前的文章

二、下载编译ncnn

用下面的命令操作

git clone https://github.com/Tencent/ncnn.git

cd ncnn

mkdir -p build

cd build

cmake ..

make -j4

完成之后,查看/home/XXX/ncnn/build/tools和/home/XXX/ncnn/build/tools/caffe分别有ncnn2mem和caffe2ncnn两个可执行文件,如下图所示。

其中

caffe2ncnn  将caffemodel转换为ncnnmodel

ncnn2mem   对模型进行加密操作

三、转换模型并加密

用自己数据集训练的直接用自己数据集的即可,没有的话可以联系我。这里画重点:

旧版caffe模型和网络文件转换成新版caffe模型和网络文件(ncnn只支持新版)

在/home/XXX/ncnn/build/tools/下新建一个ncnnmodel的文件夹便于管理,在自己的caffe文件下build/tools中有相应的转换文件,没有的话,在caffe路径下,用下面的命令生成。

mkdir -p build

cd build

cmake ..

之后的操作如下:

$~/caffe/build/tools/upgrade_net_proto_text MobileNetSSD_deploy.prototxt MobileNetSSD_deploy_new.prototxt

$~/caffe/build/tools/upgrade_net_proto_binary MobileNetSSD_deploy.caffemodel MobileNetSSD_deploy_new.caffemodel

在ncnnmodel文件夹下得到两个新的文件:

四、利用ncnn的两个可执行文件进行转换model

在home/XXX/ncnn/build/tools和/home/XXX/ncnn/build/tools/caffe有ncnn2mem可执行文件,用它转换model,如下所示:

最后得到的结果如下:

五、在PC上run

在ncnn/examples中有 mobilenetssd.cpp 我们利用这个文件进行操作

为了不丢失这个demo,我们另外复制一个文件依然在这个文件夹中重命名为mobilenetssd_my.cpp,改文件修改并做出说明。

将这两个文件MobileNetSSD_deploy_my.param、MobileNetSSD_deploy_my.bin也复制到这个文件夹中,然后打开ncnn/examples目录下的CMakeLists.txt文件,增加这两行:

add_executable(mobilenetssd_my mobilenetssd_my.cpp)

target_link_libraries(mobilenetssd_my ncnn ${OpenCV_LIBS})

打开ncnn根目录下的CMakeLists.txt文件,将编译examples语句的注释打开(默认是被注释掉的)

在ncnn/build路径下,终端运行make:

在 ncnn/build/examples文件中有:

运行./mobilenetssd_my1.jpg

欢迎大家加我微信或者加入交流群:

你可能感兴趣的:(目标检测:PC端MobileNetSSD通过Ncnn前向推理框架之实现)