机器学习:YOLO for Object Detection (二)
之前介绍了 YOLO-v1 单纯的利用一个卷积网络完成了目标检测,不过 YOLO-v1 虽然速度很快,但是比起其他的网络比如 Fast R-CNN 检测的准确率还是差不少,所以作者又提出了改良版的 YOLO-v2, 作者也明确说了,YOLO-v2 也是借鉴了其他网络的一些经验,针对 YOLO-v1 进行了改良。从论文来看,作者都没有给出新的网络结构图,大概网络的基本结构还是没有太多的变化,不过就是对网络以及图像的处理变得更加复杂了吧。
下面,我们来逐个介绍 YOLO-v2 到底做了哪些变化:
Batch Normalization: 这是一个比较常用的抑制 over fitting 的方法,作者在论文中介绍说对每个卷积层的输出加入 Batch Normalization 可以提升 2% 的准确率。
High Resolution Classifier: 作者也提到说,如果输入图的尺寸增大,读网络的性能也有好处。YOLO-v1 在训练 ImageNet 的时候是在小尺寸 224×224 的图像上做的,只是在后面训练检测的时候才变成了大尺寸的图,YOLO-v2 的时候,作者在训练 ImageNet 的时候,也用大尺寸的图像训练了 10 个周期,让网络再过渡到检测之前,就已经具备一定的适应大尺寸图像的能力,通过这个改变,可以提升网络 4% 的 mpA。
Convolutional With Anchor Boxes:这里作者借用了 Faster R-CNN
的方法,利用 Anchor Boxes 去预测 bounding boxes,作者把网络的输入从 448×448 变成了 416×416, 这里利用了一个先验知识,物体一般会占据图像中央位置,所以作者为 feature map 的 location 设置了一个奇数,以确保中间位置会有一个 location,我觉得这里和 YOLO-v1 的一个区别就是 YOLO-v1 之前的 grid cell 是固定尺寸的,一旦输入确定,grid cell 的个数确定了,grid cell 的大小和形状也就确定了,之前在 YOLO-v1 的时候,作者也提到了这点,grid cell 的形状和大小固定,其实不够灵活,所以为了解决这个问题,YOLO-v2 这里引入了 Anchor Boxes,Anchor Boxes 的一个好处就是可以有不同的形状,不同的尺寸,不过带来的问题就是要处理的 bounding boxes 的个数也就随之增加了。所以论文中也提到这点,bounding boxes 从 98 个增加到将近 1000 个,这个策略让网络的 mpA 稍微有点下降,不过 recall 却有大幅提升。说明网络的 TP 还是很高的,能把大部分该检测的目标都检测到。Dimension Clusters: 论文中提到了,为了决定 Anchor Boxes 的个数,作者用 k-means 的方法做了一些比较,最后决定采用 5 个。
Direct location prediction: 对检测位置的预测,作者又用回了原来 YOLO-v1 的方案,不是预测偏移量,而是直接预测检测框与grid cell 的相对位置,这样可以保证预测值是在 0-1之间的一个数,作者提到每个 grid cell 是预测 5 个 bounding boxes,每个 bounding box 输出 5 个预测值:(tx,ty,tw,th,to) 根据每个 cell 相对于图像左上角的顶点的偏移,可以计算出每个 box 在图像的位置,宽高,以及预测的类别:
利用这个策略,YOLO-v2 的 mpA 提升了 5% 左右。
Fine-Grained Features, 作者也提到,YOLO-v1 最后一层的 feature map 的 size 是 13×13 , 对于大的目标物来说,这个 size 可能是合适的,但是对于太小的目标物,可能就遗漏了,所以为了弥补这个问题,YOLO-v2 把前一层的 feature map 也提取出来,用来一起做检测,前一层的 feature map size 是 26×26,为了把这两层的 feature map 叠在一起,作者对前一层的feature map做了一下变形。
Multi-Scale Training, 最后一个就是多尺度训练的问题了,YOLO-v2 在训练的过程中,每隔一定的训练周期,就随机切换一个不太的输入尺寸进行训练,论文中也提到,每换一次输入尺寸,都需要调整网络的结构,虽然参数可以继续用,不过网络的结构可能会有些变化,所以还是不太灵活。不过这样的好处就是让 YOLO-v2 对不同尺寸的图像有更好的检测能力。
Darknet-19: 为了让网络的运行速度更快,YOLO-v2 用了另外一种网络结构,而不是常用的 VGG 网络。这个称为 Darknet-19 的网络有 19 个卷积层,5 个 pooling 层。
最后就是训练和检测了,训练还是先在 ImageNet 上做,相当于让网络先预热一下,让网络具有一定的学习能力,然后再用特定的数据库训练网络的检测能力。
Word Tree : 最后要特别介绍一下 YOLO-v2 在训练时候的一个不同之处,就是把用来做分类的数据和用来做检测的数据混合起来训练,作者也提到,当训练数据是检测样本的时候,输出的是整个预测值的集合,包括检测以及分类的结果,如果数据是分类样本的时候,意味着输出只要是目标分类的概率即可。这个方案有个问题就是用来做分类的数据集 ImageNet 和用来做检测的数据集 COCO 的类别属性不同,COCO 基本只有恨模糊的大类,但是 ImageNet 含有很多细分的小类,一个典型的例子就是狗,COCO 所有的狗都是属于狗这个标签,而ImageNet 里面会把狗分成不同的品种,还有汽车也是。为了解决这个问题,论文里面设计了一种层级的分类,所以作者设计了一个 WordTree, 将 ImageNet 里的标签不再是平级的了,而是有层次的了,所以分类的时候,从树的根部开始,搜寻最短路径
参考文献:
Joseph Redmon, Ali Farhadi,“YOLO9000: Better, Faster, Stronger”, CVPR 2016
机器学习:YOLO for Object Detection (二)的更多相关文章
- 机器学习:YOLO for Object Detection (一)
最近看了基于CNN的目标检测另外两篇文章,YOLO v1 和 YOLO v2,与之前的 R-CNN, Fast R-CNN 和 Faster R-CNN 不同,YOLO 将目标检测这个问题重新回到了基 ...
- [Localization] YOLO: Real-Time Object Detection
Ref: https://pjreddie.com/darknet/yolo/ 关注点在于,为何变得更快? 论文笔记:You Only Look Once: Unified, Real-Time Ob ...
- YOLO: Real-Time Object Detection
YOLO detection darknet框架使用 YOLO 训练自己的数据步骤,宁广涵详细步骤说明
- YOLO: Real-Time Object Detection 安装和测试
1.下载darknet git clone https://github.com/pjreddie/darknet.git 2.修改make GPU= CUDNN= OPENCV= DEBUG= 3. ...
- YOLO object detection with OpenCV
Click here to download the source code to this post. In this tutorial, you’ll learn how to use the Y ...
- [YOLO]《You Only Look Once: Unified, Real-Time Object Detection》笔记
一.简单介绍 目标检测(Objection Detection)算是计算机视觉任务中比较常见的一个任务,该任务主要是对图像中特定的目标进行定位,通常是由一个矩形框来框出目标. 在深度学习CNN之前,传 ...
- 读论文系列:Object Detection CVPR2016 YOLO
CVPR2016: You Only Look Once:Unified, Real-Time Object Detection 转载请注明作者:梦里茶 YOLO,You Only Look Once ...
- Tensorflow object detection API 搭建物体识别模型(二)
二.数据准备 1)下载图片 图片来源于ImageNet中的鲤鱼分类,下载地址:https://pan.baidu.com/s/1Ry0ywIXVInGxeHi3uu608g 提取码: wib3 在桌面 ...
- Object Detection(RCNN, SPPNet, Fast RCNN, Faster RCNN, YOLO v1)
RCNN -> SPPNet -> Fast-RCNN -> Faster-RCNN -> FPN YOLO v1-v3 Reference RCNN: Rich featur ...
随机推荐
- sed Demo
@1:sed basic usage: 和AWK一样, sed也是逐行对文本进行处理. sed的主要功能如下: @1:对每行中的匹配项进行处理(修改/删除) @2:格式化文本的处理 @3:(行的增删改 ...
- C/C++ 数据类型的使用方法详解
cppreference.com -> C/C++ 数据类型 C/C++ 数据类型 C语言包含5个基本数据类型: void, integer, float, double, 和 char. 类型 ...
- Python基础(9)_生成器(yield表达式形式)、面向过程编程
一.yield表达式形式 1 #装饰器,初始化含yield表达式的生成器 def init(func): def wrapper(*args,**kwargs): g=func(*args,**kwa ...
- storage
localStorage(本地存储),可以长期存储数据,没有时间限制,一天,一年,两年甚至更长,数据都可以使用. sessionStorage(会话存储),只有在浏览器被关闭之前使用,创建另一个页面时 ...
- $Android启动界面(Splash)的两种实现方法
(一)用2个Activity实现 用Handler对象的postDelayed方法来实现延迟跳转的目的. 补充:Handler的常用方法: // 立即执行Runnable对象 public final ...
- CentOS7在VMWare12中安装后不能上网解决办法
首先要保证你的VMWare Workstation12 在安装号CentOS7后没改动什么关于网络相关的. 1.我的电脑一开始用的是VMWare WorkStations10,发现VMnet8根本不通 ...
- requestAnimationFrame 的实验性实践
记得当 requestAnimationFrame 出现时我立马就石更了,就跟初次玩耍 transition 时一样,欣喜若狂... 然后,然后特么的就懵逼了,这明明就是口挖不通的深井呀(如果是我傻, ...
- WKWebview的基本使用
在开发过程中,iOS 中实现加载 web 页面主要有两种控件,UIWebView 和 WKWebview,两种控件对应具体的实现方法不同.WKWebView是苹果公司在iOS8系统推出的,这里主要概述 ...
- KVC和KVO的理解(底层实现原理)
1.KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性.而不是通过调用Setter.Getter方法访问.KVO 就是基于 KVC 实现的 ...
- INSPIRED启示录 读书笔记 - 第18章 重新定义产品说明文档
理想的产品说明文档 1.产品说明文档应该完整地描述用户体验——不只是用户需求,还包括交互设计和视觉设计.用户需求和用户体验是密不可分的 2.产品说明文档必须准确地描述软件的行为 3.产品说明文档必须以 ...