本文接https://blog.youkuaiyun.com/justidle/article/details/102864794这个文章。
获取MobileNet-YOLO
上文提到缺少mobilenet_yolo.param和mobilenet_yolo.bin这两个文件,这两个文件来自MobileNet-YOLO这个开源项目。项目对应的GitHub地址为https://github.com/eric612/MobileNet-YOLO。其实仔细阅读yolov2.cpp代码,在detect_yolov2()函数中有说明。开始由于本人对NCNN不够熟悉,第一时间没有反应过来。
// original pretrained model from https://github.com/eric612/MobileNet-YOLO
// https://github.com/eric612/MobileNet-YOLO/blob/master/models/yolov2/mobilenet_yolo_deploy.prototxt
// https://github.com/eric612/MobileNet-YOLO/blob/master/models/yolov2/mobilenet_yolo_deploy_iter_80000.caffemodel
好了,下载好MobileNet-YOLO源码。
将CAFFE模型转换为NCNN模型
将models/yolov2下对应的mobilenet_yolo_deploy.prototxt和mobilenet_yolo_deploy_iter_80000.caffemodel拷贝到D:\zhouyi\work\ncnn\build-vs2017\tools\caffe。然后利用NCNN的转换工具caffe2ncnn.exe,将Caffe模型转换为NCNN模型。
caffe2ncnn.exe mobilenet_yolo_deploy.prototxt mobilenet_yolo_deploy_iter_80000.caffemodel mobilenet_yolo.param mobilenet_yolo.bin
这样,我们就得到了mobilenet_yolo.param和mobilenet_yolo.bin,再将这两个文件拷贝到例程目录,D:\zhouyi\work\ncnn\examples\yolov2\x64\Debug。
拷贝被识别图片
同时拷贝一张图片,来自darknet的person.jpg。
识别
运行编译出的yolov2.exe。
D:\zhouyi\work\ncnn\examples\yolov2\x64\Debug>yolov2 person.jpg
find_blob_index_by_name data failed
12 = 0.98016 at 68.74 263.96 133.91 x 84.17
15 = 0.92400 at 189.25 88.86 78.89 x 296.65
17 = 0.69918 at 415.31 134.46 178.85 x 205.66
即可获得如下图片。
P.S.
有个很奇怪的现象,修改源码,直接在vs2017下运行,cv::imread()出错,无法读取图片。我在编译NCNN的时候,NCNN_OPENCV这个宏没有使能啊。源码再查一下。