单阶经典检测器: YOLO V1 (一)


  Faster RCNN算法利用了两阶结构, 先实现感兴趣区域的生成, 再进行精细的分类与回归, 虽出色地完成了物体检测任务, 但也限制了其速度, 在更追求速度的实际应用场景下, 应用起来仍存在差距。

  在此背景下, YOLO v1算法利用回归的思想, 使用一阶网络直接完成了分类与位置定位两个任务, 速度极快。 随后出现的YOLO v2v3检测精度与速度上有了进一步的提升, 加速了物体检测在工业界的应用, 开辟了物体检测算法的另一片天地。
1. 无锚框预测: YOLO v1
  相比起Faster RCNN的两阶结构, 2015年诞生的YOLO v1创造性地使用一阶结构完成了物体检测任务, 直接预测物体的类别与位置, 没有RPN网络, 也没有类似于Anchor的预选框, 因此速度很快。 本节将详细介绍YOLO v1的网络结构与算法思想。

1.1 网络结构

  与其他物体检测算法一样, YOLO v1首先利用卷积神经网络进行了特征提取, 具体结构如图6.1所示, 该结构与GoogLeNet模型有些类似。在该结构中, 输入图像的尺寸固定为448×448, 经过24个卷积层与两个全连接层后, 最后输出的特征图大小为7×7×30
  关于YOLO v1的网络结构, 有以下3个细节:
    ·3×3的卷积后通常会接一个通道数更低的1×1卷积, 这种方式既降低了计算量, 同时也提升了模型的非线性能力。
    ·除了最后一层使用了线性激活函数外, 其余层的激活函数为Leaky ReLU
    ·在训练中使用了Dropout与数据增强的方法来防止过拟合。

 1.2 特征图的意义

  YOLO v1的网络结构并无太多创新之处, 其精髓主要在最后7×7×30大小的特征图中。 如图6.2所示, YOLO v1将输入图像划分成7×7的区域, 每一个区域对应于最后特征图上的一个点, 该点的通道数为30, 代表了预测的30个特征。
  YOLO v1在每一个区域内预测两个边框, 如图6.2中的预测框AB, 这样整个图上一共预测7×7×2=98个框, 这些边框大小与位置各不相同, 基本可以覆盖整个图上可能出现的物体。

   如果一个物体的中心点落在了某个区域内, 则该区域就负责检测该物体。 图6.2中真实物体框的中心点在当前区域内, 该区域就负责检测该物体, 具体是将该区域的两个框与真实物体框进行匹配, IoU更大的框负责回归该真实物体框, 在此A框更接近真实物体。
  最终的预测特征由类别概率、 边框的置信度及边框的位置组成, 如图6.3所示。 这三者的含义如下:

    ·类别概率: 由于PASCAL VOC数据集一共有20个物体类别, 因此这里预测的是边框属于哪一个类别。
    ·置信度: 表示该区域内是否包含物体的概率, 类似于Faster RCNN中是前景还是背景。 由于有两个边框, 因此会存在两个置信度预测值。
    ·边框位置: 对每一个边框需要预测其中心坐标及宽、 高这4个量,两个边框共计8个预测值。

   这里有以下3点值得注意的细节:
    ·YOLO v1并没有先验框, 而是直接在每个区域预测框的大小与位置, 是一个回归问题。 这样做能够成功检测的原因在于, 区域本身就包含了一定的位置信息, 另外被检测物体的尺度在一个可以回归的范围内。
    ·从图6.3中可以看出, 一个区域内的两个边框共用一个类别预测,在训练时会选取与物体IoU更大的一个边框, 在测试时会选取置信度更高的一个边框, 另一个会被舍弃, 因此整张图最多检测出49个物体。
    ·YOLO v1采用了物体类别与置信度分开的预测方法, 这点与Faster RCNN不同。 Faster RCNN将背景也当做了一个类别, 共计21种, 在类别预测中包含了置信度的预测。

 1.3 损失计算

  通过卷积网络得到每个边框的预测值后, 为了进一步计算网络训练的损失, 还需要确定每一个边框是对应着真实物体还是背景框, 即区分开正、 负样本。 YOLO v1在确定正负样本时, 有以下两个原则:
    ·当一个真实物体的中心点落在了某个区域内时, 该区域就负责检测该物体。 具体做法是将与该真实物体有最大IoU的边框设为正样本,这个区域的类别真值为该真实物体的类别, 该边框的置信度真值为1
    ·除了上述被赋予正样本的边框, 其余边框都为负样本。 负样本没有类别损失与边框位置损失, 只有置信度损失, 其真值为0
  YOLO v1的损失一共由5部分组成, 均使用了均方差损失, 如式(6-1) 所示。 

  公式中i代表第几个区域, 一共有S2个区域, 在此为49j代表某个区域的第几个预测边框, 一共有B个预测框, 在此为2obj代表该框对应了真实物体; noobj代表该框没有对应真实物体。 这5项损失的意义如下:

     ·第一项为正样本中心点坐标的损失。 λcoord的目的是为了调节位置损失的权重, YOLO v1设置λcoord5, 调高了位置损失的权重。
    ·第二项为正样本宽高的损失。 由于宽高差值受物体尺度的影响,因此这里先对宽高进行了平方根处理, 在一定程度上降低对尺度的敏感, 强化了小物体的损失权重。
    ·第三、 四项分别为正样本与负样本的置信度损失, 正样本置信度真值为1, 负样本置信度为0λnoobj默认为0.5, 目的是调低负样本置信度损失的权重。
    ·最后一项为正样本的类别损失。

  总体上, YOLO v1利用了回归的思想, 使用轻量化的一阶网络同时完成了物体的定位与分类, 处理速度极快, 可以达到45 FPS, 当使用更轻量的网络时甚至可以达到155 FPS。 得益于其出色的处理速度, YOLO v1被广泛应用在实际的工业场景中, 尤其是追求实时处理的场景。 当然, YOLO v1也有一些不足之处, 主要有如下3点:

    ·由于每一个区域默认只有两个边框做预测, 并且只有一个类别,因此YOLO v1有着天然的检测限制。 这种限制会导致模型对于小物体,以及靠得特别近的物体检测效果不好。
    ·由于没有类似于Anchor的先验框, 模型对于新的或者不常见宽高比例的物体检测效果不好。 另外, 由于下采样率较大, 边框的检测精度不高。
    ·在损失函数中, 大物体的位置损失权重与小物体的位置损失权重是一样的, 这会导致同等比例的位置误差, 大物体的损失会比小物体 大, 小物体的损失在总损失中占比较小, 会带来物体定位的不准确。