[论文解读-目标检测-YOLO] You Only Look Once:Unified, Real-Time Object Detection

YOLO V1

目录

1.引言


YOLO,是由You Only Look Once的首字母得来,这是相对于R-CNN等基于proposal+classifier的模型来说的。R-CNN等模型的思想是先通过对图片使用候选框生成算法得到许多可能存在object的候选区域(区域之间有大量重叠),然后将所有候选区域的图片分别送入分类器进行识别,之后进行候选框的微调,并做非极大抑制得到object对应的唯一边界框,这一过程中某些像素会多次经过同一个模型。而YOLO的思想是将目标检测问题重新构造为一个回归问题,只进行一次处理即可得到所有的object类型及其位置,这是YOLO能做到实时目标检测的基础。作者在论文中提到,YOLO在Titan X上能达到45FPS的速度,而另一个更快的精简版(在论文中被称为Fast YOLO)能达到150FPS,并且它能在保持较高检测速度的情况下达到两倍于其他实时目标检测系统的mAP,但要注意YOLO的精度并没有超越Faster RCNN。

YOLO核心思想:用完整的图片作为模型的输入,在输出层回归bounding box及置信度,同时对网格(grid cell,在之后会有详细介绍)进行分类,所有像素点只会经过模型一次。

在这里插入图片描述

图1:结果展示

2.相关链接


论文链接:https://arxiv.org/pdf/1506.02640.pdf
相关源码:https://github.com/AlexeyAB/darknet

3.网络结构


在这里插入图片描述

图2:网络结构
  • 除了图上展示的结构以外,作者在第一层全连接层后也使用了一个rate=0.5的dropout层来防止过拟合。
  • 模型中除最后一层使用线性激活函数外,其余每层使用leaky relu激活函数。
  • 输入模型的张量大小为 448 × 448 × 3 448\times448\times3 448×448×3 ,也就是 448 × 448 448\times448 448×448 的RGB图片。
  • 输入图片会被看作 S × S S\times S S×S 个互不重叠且大小相等的网格如图3所示为论文中使用的 S = 7 S=7 S=7的网格,这里把它看做 S × S S\times S S×S个部分只是为了与模型输出的结果一一对应,图片上并没有做任何标记。模型会对 S × S S\times S S×S个格子给出单独的预测结果,其中包括格子所属的类型(设数据集包含有 C C C个类别)及其预测的 B B B个边界框,边界框信息包括了边界框坐标 ( x , y ) (x,y) (xy)、边界框宽高 ( w , h ) (w,h) (wh)及置信度(一个标量),所以我们可以得到输出张量大小的计算公式为 S × S × ( B ∗ 5 + C ) S\times S \times(B*5+C) S×S×(B5+C),而原论文中取 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\times7\times30 7×7×30,详细的模型输出结果的构成可参考图3。
  • 注意这里的网格并不会显式分割图片再送入模型,输入的是完整无标记的图片,对网格的区分其实是在ground truth上做的工作。

在这里插入图片描述

图3:输出的组成

在这里插入图片描述

图4:网格

4.训练过程


4.1.训练阶段1

先将图1中展示的模型前20个卷积层、一个全局平均池化层及一个全连接层顺序连接构成预训练模型,在ImageNet数据集上预训练,这一训练阶段大约持续一周的时间,最终这个模型在ImageNet2012验证集上的top-5准确率能达到88%。

4.2.训练阶段2

固化前20层卷积层的参数(这部分参数不参与权值的更新),用四层卷积与两个全连接层替换掉训练阶段1中的全局平均池化和全连接层,也就与图1中所展示的结构一致了,之后就是端到端的有监督训练。

4.3.损失函数

在这里插入图片描述

图5:损失函数
  • x x x y y y并不是边界框相对于整张图片的绝对坐标,而是相对于特定网格的偏移量,并且根据图片大小和网格数量被归一化到0到1之间。
  • w w w h h h表示边界框的宽度和高度,同样根据图片大小被归一化到0到1之间,之所以这里要对 w w w h h h取平方根是因为图中既有大的物体也有小的物体,它们之间的大小差异有可能会非常显著(例如一个较大的预测的边界框误差为5,一个较小的预测的边界框误差也为5,这两种误差显然不该等权重相加),如果直接计算SSE会对小物体的检测产生影响,论文中通过先取平方根再计算SSE的方法来减小这种影响。
  • C C C 表示对于预测的边界框的置信度,用bounding box存在object的概率(有object落入网格时取1,没有时取0)乘bounding box的IOU来得到。
  • p ( c ) p(c) p(c)表示网格属于某一类别的概率。
  • 由于边界框回归与网格的分类是完全不同的两种任务,所以将它们的误差等权重相加并不合适,所以此处引入了 λ c o o r d \lambda_coord λcoord 来控制两类误差之间的平衡。
  • 由于不包含object的网格数会多于包含object的网格数(典型的样本不均衡问题),所以此处引入了 λ n o o b j \lambda_noobj λnoobj 来控制两类网格的置信度误差之间的均衡。
  • 1 i j o b j \mathbb{1}^{obj}_{ij} 1ijobj(我实在不知道如何打出空心的 1 1 1)表示如果第 i i i个网格中有object且该网格对应的第 j j j个边界框为IOU最高的边界框,则累加中包括该项。
  • 仅当网格中有object的时候才对该网格的classification error进行惩罚(在公式中通过 1 i o b j \mathbb{1}^{obj}_{i} 1iobj项来体现)。
  • 仅当某bounding box predictor对某个ground truth box负责的时候,才会对bounding box的coordinate error进行惩罚(在公式中通过 1 i j o b j \mathbb{1}^{obj}_{ij} 1ijobj项来体现)。
  • 至于为何要用SSE,论文中提到是因为好优化。

4.4.其他训练细节

  • 第二个训练阶段是在Pascal Voc 2007与2012上训练了135个epochs,这一阶段的batch size为64,动量系数为0.9,权重衰减系数为0.0005。
  • 在第二训练阶段的第一个epoch中学习率缓慢从0.0001上升到0.001,因为从太大的学习率开始梯度很不稳定,会导致模型的训练无法收敛。之后保持0.001的学习率训练75个epoch,再用0.0001的学习率训练30个epoch,最后用0.00001的学习率训练30个epoch。
  • 在训练过程中也使用了数据扩充技术来防止过拟合,主要用了随机缩放,以及在HSV空间中调整曝光度和饱和度等方法。

5.局限性

  1. 因为每个网格只能预测两个边界框,并且只能具有一个类别,导致对成组出现的小物体识别会出现问题(如一群鸟)。
  2. 对于长宽差异较大的物体检测不准确。
  3. 用于预测边界框的特征太过于粗略(也就是说用了较为抽象的特征来预测边界框)。
  4. 对大物体和小物体预测的损失函数处理依然不够合理,依然存在小物体bounding box的IOU较低的情况。

未经授权,禁止转载。
专注于深度学习、计算机视觉、论文解读及复现,欢迎关注我的公众号。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值