YOLO-V1 论文理解《You Only Look Once: Unified, Real-Time Object Detection》

Yolov1

在了解了边界框目标检测的思想,以及2014年CVPR发表的OverFeat特征提取的思想,以及对目标检测的一些入门了解后,感觉可以对yolov1的论文进行研究。

YOLO的网络结构

YOLO-V1 论文理解《You Only Look Once: Unified, Real-Time Object Detection》_第1张图片
我们的检测网络有24个卷积层,后面是两个完全连接的层。交替的1 × 1卷积层减少了前几层的特征空间。我们以一半的分辨率(224 × 224输入图像)对图像网分类任务的卷积层进行预处理,然后加倍分辨率以进行检测

Bounding box的训练

YOLO-V1 论文理解《You Only Look Once: Unified, Real-Time Object Detection》_第2张图片
译文:
我们的最后一层预测类概率和包围盒坐标。我们通过图像的宽度和高度来规范化边界框的宽度和高度,使它们介于0和1之间。我们将边界框的x和y坐标参数化为特定网格单元位置的偏移,因此它们也在0和1之间有界。

在刚开始接触BoundingBox时,我了解了思想之后对Bounding Box的训练过程一直很不解,提出了一个问题:在初始化了BoundingBox之后,网络输出了BoundingBox的坐标高宽等信息,这两者的信息有什么交互?网络是如何根据初始化的BoundingBox信息来训练,如何指导反向传播?
这个问题我问了我身边的同学,他们对我提出的问题不是很明白,可能是我表述不清的问题,在我对这个问题放开之后去研读Yolo9000的论文之后,对AnchorBox的训练有一些了解之后才返回来思考这个问题,才想明白这个问题,现作如下解释:

Yolov1对每个cell初始化2个BoundingBox,网络输出的预测框的信息是基于特定网络单元位置的偏移量和宽高,然后将BoundingBox和这些偏移量和宽高进行计算,得到真正的预测框的真实坐标,此时预测框的完整信息实际是网络输出和初始化BoundingBox的信息结合计算得出,然后再根据预测框的完整信息groundtruth计算loss,指导网络训练。

损失函数的定义

作者对 l o s s loss loss的定义作一些解释:
We optimize for sum-squared error in the output of our model. We use sum-squared error because it is easy to optimize, however it does not perfectly align with our goal of maximizing average precision. It weights localization error equally with classification error which may not be ideal. Also, in every image many grid cells do not contain any object. This pushes the “confidence” scores of those cells towards zero, often overpowering the gradient from cells that do contain objects. This can lead to model instability, causing training to diverge early on.
翻译:
我们对模型输出中的平方和误差进行了优化。我们使用平方和误差是因为它易于优化,但它并不完全符合我们的目标,即最大化平均精度。它对定位误差和分类误差进行同等加权,这可能并不理想。此外,在每个图像中,许多网格单元不包含任何对象。这将这些单元格的“置信度”分数推向零,通常会超过包含对象的单元格的梯度。这可能导致模型不稳定,导致训练在早期出现分歧。

作者提出了一种解决方法:
YOLO-V1 论文理解《You Only Look Once: Unified, Real-Time Object Detection》_第3张图片
翻译:
为了弥补这一点,我们增加了边界框坐标预测的损失,并减少了不包含对象的框的置信度预测的损失。我们使用两个参数, λ c o o r d λ_{coord} λcoord λ n o o b j λ_{noobj} λnoobj来实现这一点。我们设置 λ c o o r d = 5 λ_{coord}= 5 λcoord=5 λ n o o b j = 0.5 λ_{noobj} = 0 . 5 λnoobj=0.5
平方和误差也同样影响大盒子和小盒子中的误差。我们的误差度量应该反映出大盒子里的小偏差比小盒子里的小偏差更重要。为了部分解决这个问题,我们预测边界框宽度和高度的平方根,而不是直接预测宽度和高度。
YOLO-V1 论文理解《You Only Look Once: Unified, Real-Time Object Detection》_第4张图片

  • 第一第二项表示预测框的中心坐标损失及宽高损失,采用了 L 2 L2 L2范数作为损失函数, λ c o o r d = 5 \lambda_{coord}=5 λcoord=5提高了 o b j obj obj预测框的损失,增加了给网络的反馈,实际作用就是增加对 o b j obj obj预测框参数的调整,这里第二项 l o s s loss loss预测参数为框的宽高平方根,在我们网络中,宽高的数据基于每个 c e l l cell cell被归一化到[0,1]之间,而对于 y = x y=\sqrt{x} y=x 的图像在[0,1]区间的变化可知,大框和小框出现了相同的宽高偏差时,它们的平方根差距显示,小框的宽高平方根会大于大框的宽高平方根,通过这个小技巧可以放大小框的偏差贡献。但该方法还不够优化整个网络对大框小框偏差的影响,只能是小优化。
    YOLO-V1 论文理解《You Only Look Once: Unified, Real-Time Object Detection》_第5张图片

  • 第三项表示预测框的置信度损失,对网络中负责 o b j obj obj预测框整体调整,假设该预测框负责 g r o u n d   t r u t h ground\ truth ground truth(在该 c e l l cell cell中具有任何预测框中最高的IOU),此时该项接近0,这时 l o s s loss loss也仅惩罚边界框坐标误差

  • 第四项表示 n o o b j noobj noobj预测框的置信度损失,系数 λ n o o b j = 0.5 \lambda_{noobj}=0.5 λnoobj=0.5减少了 n o o b j noobj noobj预测框的损失,减少给网络的反馈,实际作用就是减少对 n o o b j noobj noobj预测框参数的调整。这里之所以要减少对 n o o b j noobj noobj预测框的调整,是因为该部分损失在进行梯度下降时,梯度下降会影响到 o b j obj obj预测框的参数,所以要降低 n o o b j noobj noobj损失的调整,防止网络发散,难以训练。这里 n o o b j noobj noobj的损失主要调整那些没有对象的 c e l l cell cell的置信度为0,而这里之所以会影响到 o b j obj obj c e l l cell cell,是因为这些 c e l l cell cell的信息隐含在网络的各个层中,每层都包含了 c e l l cell cell o b j obj obj n o o b j noobj noobj的信息,在根据 l o s s loss loss反向调整时, n o o b j noobj noobj的信息相对 o b j obj obj是比较多的,如果 n o o b j noobj noobj在loss的占比权重较大,需要对大量的 n o o b j noobj noobj网格信息进行调整,而我们重点关注的是 o b j obj obj网格,给了 o b j obj obj的loss一个很大的权重,尽管在对 o b j obj obj网格进行调整的时候可能会影响到 n o o b j noobj noobj网格的信息调整,这样可以把 o b j obj obj的得分拉高,我们可以设置一个阈值,把主要的 o b j obj obj信息得分高的筛选出来,排除那些得分低的预测框(包括受到影响的 n o o b j noobj noobj网格)

  • 第五项表示 o b j obj obj预测框的类别概率损失,对网络中负责 o b j obj obj预测框分类参数的调整

t r a i n train train的时候,通过训练来得到我们想要的权重,这些权重包含了每个 c e l l cell cell的B个 b o x box box的宽高和中心坐标偏移信息、 C C C个类别的信息
t e s t test test的时候,我们得到的有目标的预测框置信度是[0,1]之间的值来表示,接近0的置信度表示预测框没有目标,接近1的置信度表示预测框有目标。对输出的特定类别的预测框概率进行排序,设置阈值,筛选得到留下的 b o x e s boxes boxes再进行 N M S NMS NMS处理重叠的框,得到最终检测结果。

参考

和LOSS有关的知识:

  • 支持向量机系列-非常推荐!讲得深入浅出,逻辑严谨!也可以直接看以下3篇
  • 支持向量机: Maximum Margin Classifier-第一篇
  • 支持向量机: Support Vector-第二篇
  • 支持向量机: Kernel-第三篇

应用到目标检测算法思想:

  • DPM目标检测算法
  • 动手学计算机视觉-第九讲:传统目标检测之DPM模型
  • 动手学计算机视觉-第八讲:传统目标检测之HOG特征
  • 动手学计算机视觉-第七讲:传统目标检测之SIFT特征
  • 动手学计算机视觉-第六讲:传统目标检测之Harris角点检测
  • 动手学计算机视觉-第五讲:传统目标检测之特征工程
  • 动手学计算机视觉-第四讲:图像预处理之图像增广
  • 动手学计算机视觉-第三讲:图像预处理之图像分割
  • 动手学计算机视觉-第二讲:图像预处理之图像增强
  • 动手学计算机视觉-第一讲:图像预处理之图像去噪
  • FCOS:一阶全卷积目标检测
  • 锚框:Anchor box综述
  • Selective Search原理及实现
  • DPM 目标检测原理

平台学习资源:

  • 干货!机器学习平台优质学习资源推荐

比较好的yolo解析:

  • YOLO v1 论文笔记1
  • YOLO v1 论文笔记2
  • 图解YOLO
  • YOLO详解

你可能感兴趣的:(深度学习,目标检测,深度学习,机器学习,计算机视觉,神经网络)