论文泛读 YOLO v1:统一实时的目标检测框架
Posted 风信子的猫Redamancy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了论文泛读 YOLO v1:统一实时的目标检测框架相关的知识,希望对你有一定的参考价值。
【论文泛读】 YOLO v1:统一、实时的目标检测框架
论文链接: You Only Look Once: Unified, Real-Time Object Detection
这次来讲解一下YOLO v1算法(CVPR2016的文章)。YOLO是目前比较流行的object detection算法,速度快且结构简单,其他的object detection算法如faster RCNN(之前已经解读了一下)。YOLO模型指标准化、实时的目标检测。有了YOLO,不需要一张图像看一千次,来产生检测结果,你只需要看一次,这就是我们为什么把它叫"YOLO"物体探测方法(You only look once)。
摘要 Abstract
作者提出了YOLO,一种新的目标检测方法。以前的目标检测工作重新利用分类器来执行检测。相反,我们将目标检测框架看作回归问题从空间上分割边界框和相关的类别概率。单个神经网络在一次评估中直接从完整图像上预测边界框和类别概率。由于整个检测流水线是单一网络,因此可以直接对检测性能进行end-to-end(端到端)的优化。
我们的统一架构非常快。我们的基础YOLO模型以45帧/秒的速度实时处理图像。网络的一个较小版本,快速YOLO,每秒能处理惊人的155帧,同时实现其它实时检测器两倍的mAP。相较于其他的state-of-the-art (先进的物体检测系统),YOLO在物体定位时更容易出错,但是在背景上预测出不存在的物体(false positives)的情况会少一些。而且,YOLO比DPM、R-CNN等物体检测系统能够学到更加抽象的物体的特征,这使得YOLO可以从真实图像领域迁移到其他领域,如艺术。
介绍 Introduction
这里就简单介绍一下,在传统的目标检测中,一般是传统两阶段的目标检测模型two-stage,而YOLO是一个单阶段的模型one-stage。
在之前介绍了DOM和Faster RCNN都是传统两阶段目标检测模型,一般包含两个阶段
- 提取潜在的候选框(Region Proposal)
- 用分类器足以筛选候选框
所以说这需要两个阶段,常常就会花更多的时间,从而导致不能达到实时检测的结果,并且这些复杂的流程很慢,很难优化,因为每个单独的组件都必须单独进行训练。
论文中提出的YOLO就很简单,我们可以将其看作一个单一的回归问题,直接从图像像素到边界框坐标和类概率。只需要在图像上看一次(YOLO),就可以预测出现的目标和位置。并且YOLO利用了卷积神经网络,用单个卷积网络同时预测这些盒子的多个边界框和类概率
YOLO算法有较为明显的优点:
1、YOLO的速度非常快。在Titan X GPU上的速度是45 fps(frames per second),加速版的YOLO差不多是150fps。
2、YOLO是基于图像的全局信息进行预测的。这一点和基于sliding window以及region proposal等检测算法不一样。与Fast R-CNN相比,YOLO在误检测(将背景检测为物体)方面的错误率能降低一半多。
3、YOLO可以学到物体的generalizable representations。可以理解为泛化能力强。
4、准确率高,有实验证明。
统一的目标检测框架
算法首先把输入图像划分成S*S的格子,然后对每个格子都预测B个bounding boxes,每个bounding box都包含5个预测值:x,y,w,h和confidence。x,y就是bounding box的中心坐标,与grid cell对齐(即相对于当前grid cell的偏移值),使得范围变成0到1;w和h进行归一化(分别除以图像的w和h,这样最后的w和h就在0到1范围)。
另外每个格子都预测C个假定类别的概率。在本文中作者取S=7,B=2,C=20(因为PASCAL VOC有20个类别),所以最后有7*7*30个tensor。如下图所示
除此之外,每个bounding box都对应一个confidence score,如果grid cell里面没有object,confidence就是0,如果有,则confidence score等于预测的box和ground truth的IOU值。
c
o
n
f
i
d
e
n
c
e
=
P
r
(
O
b
j
e
c
t
)
∗
I
O
U
p
r
e
d
t
r
u
t
h
confidence = Pr(Object)*IOU_{pred}^{truth}
confidence=Pr(Object)∗IOUpredtruth
我们还需要判断一个grid cell中是否包含object如果一个object的ground truth的中心点坐标在一个grid cell中,那么这个grid cell就是包含这个object,也就是说这个object的预测就由该grid cell负责。
除此之外每个grid cell都预测C个类别概率,表示一个grid cell在包含object的条件下属于某个类别的概率 P r ( C l a s s i ∣ O b j e c t ) Pr(Class_i|Object) Pr(Classi∣Object)
在测试时,我们乘以条件类概率和单个盒子的置信度预测,
Pr
(
Class
i
∣
Object
)
∗
Pr
(
Object
)
∗
IOU
pred
truth
=
Pr
(
Class
i
)
∗
IOU
pred
truth
\\Pr(\\textrm{Class}_i | \\textrm{Object}) * \\Pr(\\textrm{Object}) * \\textrm{IOU}_{\\textrm{pred}}^{\\textrm{truth}} = \\Pr(\\textrm{Class}_i)*\\textrm{IOU}_{\\textrm{pred}}^{\\textrm{truth}}
Pr(Classi∣Object)∗Pr(Object)∗IOUpredtruth=Pr(Classi)∗IOUpredtruth
它为我们提供了每个框特定类别的置信度分数。这些分数编码了该类出现在框中的概率以及预测框拟合目标的程度。
为了在Pascal VOC上评估YOLO,我们使用 S = 7 S=7 S=7, B = 2 B=2 B=2。Pascal VOC有20个标注类,所以 C = 20 C=20 C=20。我们最终的预测是 7 × 7 × 30 7\\times 7 \\times 30 7×7×30的张量。
YOLO v1网络架构
YOLO1的网络架构受到GoogLeNet图像分类模型的启发。我们的网络有24个卷积层,后面是2个全连接层。我们只使用 1 × 1 1 \\times 1 1×1降维层,后面是 3 × 3 3 \\times 3 3×3卷积层,而不是GoogLeNet使用的Inception模块,具体如下图所示
我们网络的最终输出是 7 × 7 × 30 7 \\times 7 \\times 30 7×7×30的预测张量。
损失函数的设计
我觉得很重要的一个点就是这个损失函数,对于这个网络来说本质上是一个回归问题,所以我们可以用平方和误差来进行优化我们的模型,但是这会出现一个问题,我们可能会对分类误差和定位误差都一视同仁,对大框和小框都一视同仁,这样就有可能会导致一些问题,特别是如果碰见数据集比较单一的时候,很有可能导致不稳定,最后模型发散,
为了补偿改进,我们增加了边界框坐标预测损失,并减少了不包含目标边界框的置信度预测损失。我们使用两个参数 λ coord \\lambda_\\textrm{coord} λcoord和 λ noobj \\lambda_\\textrm{noobj} λnoobj来完成这个工作。我们设置 λ coord = 5 \\lambda_\\textrm{coord} = 5 λcoord=5和 λ noobj = . 5 \\lambda_\\textrm{noobj} = .5 λnoobj=.5。
平方和误差也可以在大框和小框中同样加权误差。我们的错误指标应该反映出,大框小偏差的重要性不如小框小偏差的重要性。为了部分解决这个问题,我们直接预测边界框宽度和高度的平方根,而不是宽度和高度。
YOLO每个网格单元预测多个边界框。在训练时,每个目标我们只需要一个边界框预测器来负责。我们指定一个预测器“负责”根据哪个预测与真实值之间具有当前最高的IOU来预测目标。这导致边界框预测器之间的专业化。每个预测器可以更好地预测特定大小,方向角,或目标的类别,从而改善整体召回率。
在训练期间,我们优化以下多部分损失函数:
我在图中标了一下各个损失函数意义,希望对你有帮助。
最后提一下作者在论文中说,对Pascal VOC 2007和2012的训练和验证数据集进行了大约135个迭代周期的网络训练。在Pascal VOC 2012上进行测试时,我们的训练包含了Pascal VOC 2007的测试数据。在整个训练过程中,我们使用了 64 64 64的批大小, 0.9 0.9 0.9的动量和 0.0005 0.0005 0.0005的衰减。
我们的学习率方案如下:对于第一个迭代周期,我们慢慢地将学习率从 1 0 − 3 10^{-3} 10−3提高到 1 0 − 2 10^{-2} 10−2。如果我们从高学习率开始,我们的模型往往会由于不稳定的梯度而发散。我们继续以 10 − 2 10{-2} 10−2的学习率训练75个迭代周期,然后用 1 0 − 3 10^{-3} 10−3的学习率训练30个迭代周期,最后用 1 0 − 4 10^{-4} 10−4的学习率训练30个迭代周期。
为了避免过度拟合,我们使用丢弃和大量的数据增强。在第一个连接层之后,丢弃层使用 = . 5 =.5 =.5的比例,防止层之间的互相适应。对于数据增强,我们引入高达原始图像 20 20% 20大小的随机缩放和转换。我们还在HSV色彩空间中使用高达 1.5 1.5 1.5的因子来随机调整图像的曝光和饱和度。
YOLO的缺陷
YOLO对边界框预测强加空间约束,因为每个网格单元只预测两个盒子,只能有一个类别。这个空间约束限制了我们的模型可以预测的邻近目标的数量。
1、位置精确性差,对于小目标物体以及物体比较密集的也检测不好,比如一群小鸟。
2、YOLO虽然可以降低将背景检测为物体的概率,但同时导致召回率较低。
从图中也可以看奥,对于小的物体,YOLO的准确率较低
比较性能
最后论文中对YOLO与各个目标检测模型进行比较,最后发现Fast RCNN + YOLO模型会有一个比较大的提高。虽然YOLO的准确率没有Fast RCNN准,但是它比Fast RCNN快,他可以说是又快又准,可以达到实时的预测,从而对我们的生活也造成了一些影响,比如我们可以通过此进行一个追踪的功能,视频的目标检测,并且现在的技术也已经很成熟了。当连接到网络摄像头时,其功能类似于跟踪系统,可在目标移动和外观变化时检测目标。
总结
作者介绍了YOLO,一种统一的目标检测模型。我们的模型构建简单,可以直接在整张图像上进行训练。与基于分类器的方法不同,YOLO直接在对应检测性能的损失函数上训练,并且整个模型联合训练。
快速YOLO是文献中最快的通用目的的目标检测器,YOLO推动了实时目标检测的最新技术。YOLO还很好地泛化到新领域,使其成为依赖快速,强大的目标检测应用的理想选择。
现在的YOLO也已经出现了YOLO v5,之后也会对其论文进行研究,并且实现其代码,还请持续关注。
以上是关于论文泛读 YOLO v1:统一实时的目标检测框架的主要内容,如果未能解决你的问题,请参考以下文章