YOLOv1精读笔记

YOLO精读笔记

论文题目:You Only Look Once: Unified, Real-Time Object Detection

我的总结

文中实现的是先将图像划分成7*7的网格,每个网格生成2个预测边界框,每个边界框又包括中心点位置坐标和宽高以及是不是一个物体的置信度;同时网格又会得到一个概率,即假设它已经包含物体的情况下它属于某一个类别的概率。

最终该网络输出的是一个7*7*30的张量,其中7*7对应图像的网格划分,30中的1-5表示第一个边界框的中心位置和长宽,对应的6-10表示第二个边界框的中心位置和长宽,11-30则表示这个网格属于某个类别的概率(论文中测试的数据集有20个类别)。

最终某个网格的条件概率乘以这个网格对应的边界框的置信度(即有物品的概率)就可以得到这个边界框中有某个类别的概率(得到20个概率值)。

Introduction

作者简略的总结了一下前人的工作,并且指出之前的目标检测的算法复杂、慢而且难以调整。

作者将目标检测问题重新描述为一个回归问题,直接从图像得到边界框和分类类别,即使用这种方法只需要看一次图像(You Only Look Once)就能得到对象的类别和位置。

论文中提出的模型时只使用一个单独的卷积神经网络可以同时得出多个边界框和这些边界框中目标的类别,这种方法有几个特点:

  • YOLO非常快,甚至可以直接在视频上进行操作,延迟不超过25ms
  • 精度高,达到了其他实时检测系统精度的两倍以上
  • 可以结合整个图像的信息进行分类,减少了对背景的错误判断
  • 可以学习到总体特征,在应用于新输入时故障的发生会减少
  • 在准确度方面仍不够最先进的目标检测系统高,特别是对于一些小的物体

Unified Detection

这个算法将输入图像分割为 S × S S\times S S×S的格子,如果某个物体的中心落在一个格子中,那么这个格子就要对这个物体负责。

每个格子预测B个边界框并且得到对于这些边界框的置信度,置信度用于表示模型有多大把握认为边界框里有物品和模型对于这个边界框准确性的判断。置信度定义为 P r ( O b j e c t ) ∗ I o U p r e d t r u t h , Pr(Object)*IoU_{pred}^{truth}, Pr(Object)IoUpredtruth,如果没有物品在某个边界框内,那么这个边界框的置信度应该为0;如果有物品,则希望置信度等于预测边界框和真实边界框的IoU值。

每个边界框包括五个信息: x , y , w , h x,y,w,h x,y,w,h和置信度,其中 ( x , y ) (x,y) (x,y)表示边界框相对于网格划分的中心,高和宽则是相对于整个图像而言的,置信度表示预测边界框和任意真实边界框的IoU值。

每个网格预测了C类的条件概率,即 P r ( C l a s s i ∣ O b j e c t ) Pr(Class_i|Object) Pr(ClassiObject),这代表了有物品的网格内有某个类别物品的概率,将其与每个边界框的置信度相乘可以得到 P r ( C l a s s i ∣ O b j e c t ) ∗ P r ( O b j e c t ) ∗ I o U p r e d t r u t h = P r ( C l a s s i ) ∗ I o U p r e d t r u t h , Pr(Class_i|Object)*Pr(Object)*IoU_{pred}^{truth}=Pr(Class_i)*IoU_{pred}^{truth}, Pr(ClassiObject)Pr(Object)IoUpredtruth=Pr(Classi)IoUpredtruth,这个就是每个格子内特定类别的置信度分数,这个分数代表了某个累呗出现在格子里和模型预测的良好程度。

Network Design

卷积层部分提取图像的特征,全连接层输出类别概率和边界框坐标。

Training

在ImageNet上进行卷积层的预训练,同时论文“S. Ren, K. He, R. B. Girshick, X. Zhang, and J. Sun. Object detection networks on convolutional feature maps. CoRR, abs/1504.06066, 2015.”指出在预训练的网络上增加卷积层和全连接层可以提高模型的表现,所以这篇论文上也用了这个方法。

同时,使用图像的高和宽初始化边界框的高和宽,使其落到0到1内;将边界框的中心坐标设置为对特定网格党员的偏移量,使其也落入0到1内。

除了最后一层,别的层均使用Leaky ReLu激活函数。

损失函数

使用平方和误差作为损失函数时,无法适应对于达到最高平均误差精度的目标,而且将定位误差视作与分类误差有同等的重要性,这有可能会导致置信度得分趋向于0并且导致模型在训练的初期就出现偏差。

为了解决这个问题,作者提高了边界框坐标预测的损失,降低了不包含物品的边界框的置信度预测值的损失,并对着两个损失值使用不同的权重以实现这个想法。

平方和误差对待大边界框和小边界框的误差也是一视同仁的,但是对比大边界框的小误差和小边界框的小误差而言,损失函数应该更重视小边界框的小误差,为了解决这个问题,论文中预测的是边界框高和宽的平方根,而不是直接预测边界框的高和宽。

YOLO在每个网格中预测多个边界框,而在训练时我们希望对于每个物品只由一个预测边界框来负责,YOLO为真实边界框指定拥有最高IoU值的预测边界框。

YOLOv1精读笔记_第1张图片
其中 1 i o b j 1_{i}^{obj} 1iobj表示物品是否出现在网格 i i i中, 1 i j o b j 1_{ij}^{obj} 1ijobj表示网格 i i i中的第 j j j个预测边界框对这个网格的预测负责。

值得注意的是,损失函数仅在网格中存在物品的时候才计算分类损失;也仅在预测边界框对某个真实边界框负责的时候才计算该预测边界框的定位损失。

在训练的过程中,作者使用了dropout和momentum,并且对数据集采用了随机缩放、平移或饱和度调整的数据增强方法。

Limitations

每个网格中预测边界框的数量设置限制了对多物品的检测,并且在识别鸟群等小目标时比较吃力。

你可能感兴趣的:(目标检测论文精读,计算机视觉,深度学习,人工智能)