https://github.com/lwplw/caffe_yolov2

DarkNet转Caffe中有很多潜在的问题,在YOLOv1、v2、v3几个网络中有一些特殊的层。要在Caffe中跑YOLO,就得在Caffe中源码实现这些层。这些层的Caffe源码实现可以在网上找到很多。

YOLO特殊层的Caffe框架实现
YOLOv1 detection层 源码实现
YOLOv2 route层 用concat层替换
reorg层 源码实现
region层 源码实现
YOLOv3 shortcut层 用eltwise层实现
route层 用concat层实现
yolo层 源码实现

在Caffe平台实现YOLO系列,可以分成以下两种方式:
(1)DarkNet平台训练完成YOLO模型,然后将.cfg文件.weights文件通过脚本转换为Caffe框架下的.prototxt文件.caffemodel文件,最后在Caffe下使用转换好的.prototxt文件.caffemodel文件进行目标检测任务。
(2)手动写好.prototxt模型结构文件,直接在Caffe下进行训练,训练完成后进行目标检测任务。

以上两种方式,都是以当前Caffe已经源码实现上面那几个特殊层为前提。

具体按哪种方式看自己实际需求,比如,我现在是已经有在DarkNet下训练好可用YOLOv2_tiny模型,所以我选择将训练好的模型转换到Caffe再使用,而不是从头训练。个人感觉YOLO在原生框架DarkNet下训练起来更方便一些,更重要的是,在Caffe实现YOLO后可以将中间参数以及输出结果拿出来,再和DarkNet下的YOLO做对比分析,这点还是很关键的,相同的模型结构和权重参数,经过对比可以很清楚的知道转换是否正确、Caffe新加层实现是否正确。

1、YOLOv1

YOLOv1主要是需要实现detection层,再就是YOLO系列中使用的激活函数是Leaky,可以选择单独实现,也可以用ReLU实现(配置参数)。

Leaky层源码实现资源:https://download.csdn.net/download/lwplwf/10712919
detection层源码实现资源:https://download.csdn.net/download/lwplwf/10712961

Leaky层的添加和detection层是一致的,具体实现参考:
(1)YOLOv1的Detection层实现:https://blog.csdn.net/lwplwf/article/details/82788376
(2)实现YOLOv1目标检测:https://blog.csdn.net/lwplwf/article/details/82685347
注:该detection的实现不支持GPU模式,通过这里初步了解Caffe下源码实现添加新层也还是可以的。

2、YOLOv2

重点说YOLOv2的实现,YOLOv2的Caffe实现就已经很多了,网上可以找到很多个版本,都挺好的,但也都存在的不同的问题。

还不错的几个实现
(1)https://github.com/gklz1982/caffe-yolov2
(2)Caffe源码:https://github.com/hustzxd/z0
相关转换工具:https://github.com/hustzxd/z1
(3)https://github.com/marvis/pytorch-caffe-darknet-convert

上面几个都有很大的参考价值,综合以上和其他一些实现,踩了很多坑,总算是把这条路走下来了。

结合前人成果,整理得到目前可用的Caffe源码:https://github.com/lwplw/caffe_yolov2,(已经包含了YOLO一些层的实现)

具体步骤如下(以YOLOv2_tiny为例):

(1)训练YOLOv2_tiny,在DarkNet下完成,参考官网,https://pjreddie.com/darknet/yolo/

这里有个问题需要注意!!!

下图中,对于YOLOv2_tiny,416*416的输入,经过最后一个max pool(size=2,stride=1),可以看到特征图13*13处理后还是13*13
这就有点问题了,测试发现,Caffe中经过这一层特征图由13*13变成了12*12,会导致在Caffe下检测结果的box有偏差。

解决方案:对这层max pool使用pad,由于Caffe和DarkNet对pool的处理逻辑有些差异,需要指定DarkNet中该层padding=2,Caffe种该层pad=1

去看DarkNet源码maxpool_layer.c发现:

简单说一下,在DarkNet中有pad和padding两个东西,是不一样的,重点体现在卷积层中,而对于池化层就没那么复杂了,用padding指定参数就行。

处理之后,经该max pool层处理特征图会由13*13变为14*14,DarkNet和Caffe两个框架下达成统一。

(2)训练完成后得到.weights模型权重文件
可以先在DarkNet下进行测试:
测试脚本下载:https://download.csdn.net/download/lwplwf/10723849

(3)模型转换
使用脚本将.cfg文件和.weights文件转换为.prototxt文件和.caffemodel文件
模型转换参考:https://github.com/lwplw/darknet2caffe

(4)在Caffe框架下进行测试
1)下载caffe_yolov2源码:https://github.com/lwplw/caffe_yolov2
2)解压得到文件夹caffe_yolov2-master
3)编译安装

make all -j8
sudo make pycaffe -j8

具体参考:https://blog.csdn.net/lwplwf/article/details/82415620
编译过程中有warning,但不影响。

4)测试
进入caffe_yolov2-master/examples/yolov2目录下,执行命令:python detect.py
注:具体测试时使用的数据集,以及测多少张等,自行在脚本detect.py中进行修改。

Caffe(12)--实现YOLOv2目标检测相关推荐

  1. 【目标检测】(6) YOLOV2 目标检测在V1基础上的改进

    各位同学好,今天和大家分享一下 YOLOV2 目标检测算法的原理,建议大家先学习一下 YOLOV1,可以看我的上一篇文章:https://blog.csdn.net/dgvv4/article/det ...

  2. OpenJS宣布第一个孵化项目; PostgreSQL 12 正式发布;目标检测新突破

    行 业 要 闻 Industry   News ▲▲▲ 0 1 OpenJS 基金会宣布第一个孵化项目:Node Version Manager OpenJS Foundation宣布,Node Ve ...

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

    https://github.com/lwplw 这篇打算就直入主题了,YOLO是什么.DarkNet是什么.Caffe是什么.NCNN又是什么-等等这一系列的基础科普这里就完全不说了,牵扯实在太多, ...

  4. keras faster物体检测_全网 | 深度学习目标检测算法(精选12篇)

    太多的公众号每天的文章是否让你眼花缭乱?刷了好多文章,发现大都是转来转去?今天我在全网公众号里为大家精选主题为深度学习目标检测算法的文章12篇,其中包括综述,R-CNN,SPP-Net,Fast R- ...

  5. 目标检测--SSD: Single Shot MultiBox Detector

    SSD: Single Shot MultiBox Detector ECCV2016 https://github.com/weiliu89/caffe/tree/ssd 针对目标检测问题,本文取消 ...

  6. 目标检测算法——SSD详解

    目录 一. 背景(基本介绍) 二. 网络结构 三. 具体过程 1. default box 匹配 2. 损失函数 3. 数据增广 4. Atrous Algothrim 5.  NMS(非极大值抑制) ...

  7. 重温目标检测--SSD

    SSD: Single Shot MultiBox Detector ECCV2016 https://github.com/weiliu89/caffe/tree/ssd 针对目标检测问题,本文侧重 ...

  8. YOLOv3目标检测算法——通俗易懂的解析

    目录 YOLOv3目标检测算法 前沿 一.YOLOv3 二.损失函数 YOLOv3目标检测算法 前沿 前两篇文章我们讲了下关于YOLOv1和YOLOv2的原理,有不懂的小伙伴可以回到前面再看看: YO ...

  9. 【目标检测算法】SSD学习笔记

    由于在经过多层的前向卷积运算之后,输出的特征图将变得比较小,则特征图上的一个像素点便对应着原图中较大的区域,这样的结构就很难检测较小物体.因此SSD就将中间过程输出的特征图也用来做回归和分类,可以看成 ...

  10. 【目标检测】yolo系列:从yolov1到yolov5之YOLOv2详解及复现

    YOLO v2 Yolov2论文链接:YOLO9000: Better, Faster, Stronger yolov2的改进 从Yolov2论文的标题可以直观看到就是Better.Faster.St ...

最新文章

  1. 九齐NY8B072A单片机使用笔记(一)TIMER0定时器
  2. 锐捷多网卡解决方案 与当前环境冲突(Code 2)
  3. spark视频-Spark on Yarn
  4. C 语言结构体引用,引用 C 语言结构体学习
  5. 重定向telnet方法
  6. linux关闭urlhelper服务,ASP.NET MVC UrlHelper.GenerateUrl异常:“无法使用导航..退出顶部目录”...
  7. 台式计算机大全,电脑品牌大全..3MT产品库
  8. xxx(telnet, netstat): command not found
  9. 从0到1构建计算机(4/12)--时序逻辑芯片:时序门、寄存器、RAM、计数器
  10. 汽车电子技术——软考中级之系统集成项目管理工程师 高分(63+69)通过备考经验分享
  11. Nat.Mach.Intell.|如何改进错义突变致病性预测?使用图注意神经网络试试
  12. WebRTC之服务器搭建
  13. 仇【吐槽】生活和工作都一根筋的工友真心桑不起!真心快憋出内伤了!
  14. 计算机基础知识赏花主观题,计算机学院学生制作校园赏花地图
  15. 不同浏览器下word-wrap和word-break强制换行
  16. 误删回收站文件怎么恢复?小技巧来啦!
  17. 我已经是糖尿病患者将近9年了。
  18. (Java毕业设计)旧车交易撮合管理平台(java+mysql+b/s架构)附源码
  19. 希尔伯特(Hilbert)空间的理解【量子力学基础知识学习笔记_4】
  20. 页面弹出层组件layer的用法

热门文章

  1. 各类免费的的机器人仿真软件优缺点汇总
  2. 华为鸿蒙状态栏,华为手机状态栏图标都代表什么
  3. python自动保存图片_python抓取豆瓣图片并自动保存示例学习
  4. python 皮尔森相关系数(Pearson)
  5. 软件系统设计基本原则
  6. 迅为-iMX6ULL开发板原创嵌入式开发文档系统化学习
  7. 概率论-随机变量的数字特征思维导图
  8. 【软技能】完全写作指南
  9. ”win7开机提示由于系统注册表文件丢失或损坏因此无法加载”+制作U盘启动盘+笔记本设置U盘启动
  10. 北理珠计算机专业在广东排第几,重磅!省内同类院校第一 北理珠2019广东投档线公布!...