深度学习实战(1)--手机上跑目标检测网络(YOLO,从DarkNet到Caffe再到NCNN完整打通)
2018-10-11 17:44
1786 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lwplwf/article/details/83016219
2)需要修改一下
将最后一层
取消注释
NCNN根目录下执行命令重新编译:
(以后修改NCNN源码后,都需要重新编译)
终端进入该目录执行命令:
https://github.com/lwplw
这篇算是关键技术贴,YOLO是什么、DarkNet是什么、Caffe是什么、NCNN又是什么…等等这一系列科普这里就完全不说了,牵扯实在太多,通过其他帖子有一定的积累后,看这篇就相对容易了。
本文核心:把一个目标检测模型跑到手机上
整个工作分以下几个阶段:
1、训练得到一个目标检测模型
目前可以做目标检测的模型有很多,比如R-CNN、Fast R-CNN、Faster R-CNN、SSD、MobileNet-SSD、Mask R-CNN、YOLOv1、YOLOv2、YOLOv3等等。
本文选择的是YOLOv2_tiny,原因有YOLO快,简单比较好用,而且DarkNet的源码去看看还是比较有意思的,这里使用的是YOLOv2的tiny版本,网络更小一些,毕竟我们最终是要跑在手机上,嵌入式终端设别就那么点硬件资源。
具体怎么做,看我这篇帖子:Caffe–实现YOLOv2目标检测 https://blog.csdn.net/lwplwf/article/details/83011667
一些实现细节,源码,脚本等我都准备好了,按帖子里直接下载用就行,我自己也重新下载试了一遍,没问题,有问题的话评论区喊我。
2、模型在NCNN下跑起来
在1阶段中,训练得到了DarkNet下的
.cfg模型结构文件和
.weights模型权重文件,然后转换为Caffe下的
.prototxt模型结构文件和
.caffemodel模型权重文件。
(1)安装编译ncnn(Ubuntu16.04)
下载ncnn:
git clone https://github.com/Tencent/ncnn
进入ncnn根目录,执行命令:
mkdir -p build cd build cmake ..
make -j8
(2)将caffemodel和prototxt转换为param和bin
NCNN框架中网络定义文件为
.param文件,权值文件为
.bin文件,可以通过NCNN中自带的工具进行转换。
1)将1阶段得到的
yolov2_tiny_3.prototxt和
yolov2_tiny_3.caffemodel两个文件放到
ncnn-master/build/tools/caffe目录下。
2)需要修改一下
yolov2_tiny_3.prototxt文件
将最后一层
layer { name: "region1" type: "Region" bottom: "layer15-conv" top: "region1" region_param { classes: 3 coords: 4 boxes_of_each_grid: 5 softmax: true } }
修改为:
layer { name: "detection_out" type: "YoloDetectionOutput" bottom: "layer15-conv" top: "detection_out" include { phase: TEST } yolo_detection_output_param { num_classes: 3 coords: 4 confidence_threshold: 0.3 nms_threshold: 0.45 biases: 1.08 biases: 1.19 biases: 3.42 biases: 4.41 biases: 6.63 biases: 11.38 biases: 9.42 biases: 5.11 biases: 16.62 biases: 10.52 } }
终端进入该目录执行命令:
./caffe2ncnn yolov2_tiny_3.prototxt yolov2_tiny_3.caffemodel yolov2_tiny_3.param yolov2_tiny_3.bin
(3)NCNN进行检测
修改NCNN根目录下
CMakeLists.txt文件
取消注释
add_subdirectory(examples)
NCNN根目录下执行命令重新编译:
(以后修改NCNN源码后,都需要重新编译)
cd build cmake .. make -j8
将之前生成的
yolov2_tiny_3.param和
yolov2_tiny_3.bin放到
build/examples目录下。
终端进入该目录执行命令:
./yolov2 111.jpg
3、将NCNN跑到手机上
其实也可以选择在手机上跑OpenCV,然后使用OpenCV的dnn模块调用DarkNet,这样连Caffe都不需要经过,可是…太慢了…
后面的我休息下再写!!!
阅读更多
相关文章推荐
- 使用Caffe完成图像目标检测 和 caffe 全卷积网络
- 实战小项目之基于深度学习的在线目标检测系统
- 实战小项目之基于yolo的目标检测web api实现
- 目标检测:YOLOv2的cfg转换成caffe的prototxt
- 基于深度学习的目标检测算法:YOLO
- 使用caffe训练的深度学习做目标检测(车辆检测)
- caffe框架下目标检测——faster-rcnn实战篇问题集锦
- 修改caffe输出multilabel,并自己训练完成了一个神经网络,初步达到目标检测的效果
- caffe框架下目标检测——faster-rcnn实战篇问题集锦
- 记录实战小项目之基于yolo的目标检测web api实现
- 【caffe-matlab】目标检测R-FCN算法于Windows下配置
- 基于深度学习的目标检测方法综述
- 【目标检测大集合】R-FCN、SSD、YOLO2、faster-rcnn和labelImg实验笔记
- Core ML简介及实时目标检测及Caffe TensorFlow coremltools模型转换
- Caffe使用step by step:faster-rcnn目标检测matlab代码
- Caffe实战系列:实现自己Caffe网络层
- python+opencv+caffe+摄像头做目标检测的实例代码
- 基于深度学习的目标检测研究进展
- 基于深度学习的目标检测算法:SSD
- 目标检测之二(传统算法和深度学习的源码学习)