前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习实战教程(1)--手机跑目标检测(YOLO,从DarkNet到Caffe再到NCNN完整打通)

深度学习实战教程(1)--手机跑目标检测(YOLO,从DarkNet到Caffe再到NCNN完整打通)

作者头像
对角巷法师
发布2022-05-07 14:23:11
1.1K0
发布2022-05-07 14:23:11
举报
文章被收录于专栏:对角巷

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://cloud.tencent.com/developer/article/1384508

一些实现细节,源码,脚本等我都准备好了,按帖子里直接下载用就行,我自己也重新下载试了一遍,没问题,有问题的话评论区喊我。

接下来要把训练好的yolo_tiny的目标检测模型跑到手机上的话,可以有两种实现方式:

  1. 在Android Studio上调用OpenCV库,编译生成APK,然后装到手机上。这里是通过OpenCV的DNN模块来加载的我们训练好的yolo_tiny模型。
  2. 在Android Studio上调用编译出来的NCNN库,然后编译生成APK,装到手机上,也就是在手机上直接跑NCNN了。

2、模型通过OpenCV跑到手机上

稍等啊,近期会补充0.0


3、模型通过NCNN跑到手机上

在1中,我们训练得到了DarkNet框架下的.cfg模型结构文件.weights模型权重文件,然后转换为了Caffe框架下的.prototxt模型结构文件.caffemodel模型权重文件

(1)安装编译ncnn(Ubuntu16.04)

下载ncnn:

代码语言:javascript
复制
git clone https://github.com/Tencent/ncnn

进入ncnn根目录,执行命令:

代码语言:javascript
复制
mkdir -p build
cd build
cmake ..
代码语言:javascript
复制
make -j8

(2)将caffemodel和prototxt转换为param和bin

NCNN框架中网络定义文件为.param文件,权值文件为.bin文件,可以通过NCNN中自带的工具进行转换。

1)将1阶段得到的yolov2_tiny_3.prototxtyolov2_tiny_3.caffemodel两个文件放到ncnn-master/build/tools/caffe目录下。

2)需要修改一下yolov2_tiny_3.prototxt文件

将最后一层

代码语言:javascript
复制
layer {
  name: "region1"
  type: "Region"
  bottom: "layer15-conv"
  top: "region1"
  region_param {
    classes: 3
    coords: 4
    boxes_of_each_grid: 5
    softmax: true
  }
}

修改为:

代码语言:javascript
复制
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
  }
}

终端进入该目录执行命令:

代码语言:javascript
复制
./caffe2ncnn yolov2_tiny_3.prototxt yolov2_tiny_3.caffemodel yolov2_tiny_3.param yolov2_tiny_3.bin

转换得到的两个文件我放到网盘了,需要自取:

链接: https://pan.baidu.com/s/1A9dQzpbf08-VFxHZ0rRQUg 提取码: 5bur

(3)NCNN进行检测

https://github.com/lwplw/ncnn_test

修改NCNN根目录下CMakeLists.txt 文件

取消注释add_subdirectory(examples)

NCNN根目录下执行命令重新编译:

(以后修改NCNN源码后,都需要重新编译)

代码语言:javascript
复制
 cd build
 cmake ..
 make -j8

将之前生成的yolov2_tiny_3.paramyolov2_tiny_3.bin放到build/examples目录下。

终端进入该目录执行命令:

代码语言:javascript
复制
./yolov2 111.jpg 

(4)将NCNN跑到手机上

其实也可以选择在手机上跑OpenCV,然后使用OpenCV的dnn模块调用DarkNet,这样连Caffe都不需要经过,可是…太慢了…

后面的我休息下再写!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • https://github.com/lwplw
  • 下面开工:
  • 1、训练得到一个目标检测模型
  • 2、模型通过OpenCV跑到手机上
  • 3、模型通过NCNN跑到手机上
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档