DL02-YOLOv1实时物体检测方法

·

0 min read

Paper Reading

来自 jameslei.com

YOLO实时物体检测方法

Redmon, Joseph, et al. "You only look once: Unified, real-time object detection." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.

https://arxiv.org/abs/1506.02640

简介

目前的目标检测方法(DPM和R-CNN方法)使用了分类器来进行检测。

  • Deformable parts model (paper)

    使用了sliding window来从图像中选取区域,并且用预训练的classifier对选区进行判断。

  • R-CNN (paper)

    使用Selective Search方法提出可能的region proposal,然后使用classifier对选区进行判断。

但是以上两种方式提出选区和进行判断的两个步骤都需要分别单独训练,速度慢且难优化。

YOLO提出的方法则是end-to-end的目标检测方法,仅需使用一个神经网络即可完成detection和classification,易于训练和优化,并且速度更快。

You Only Look Once

主要思路

yolo.jpg

  1. 更改图片大小
  2. 卷积神经网络
  3. 阈值检测(Non-max suppression)

算法详细

  1. 将图片划分为 $S \times S$ 的网格

  2. 每一个网格预测出 $B$ 个bounding box,对于每一个bounding box,我们需要预测并且记录它的 $x,y,w,h$ 和 $confidence_score$ 共5个属性。

    $confidence_score = Pr(Object)\times IOU_{pred}^{truth}$ 表明了模型认为这个bounding box包含物体的可能性。

  3. 每一个网格还需要预测出 $C$ 个类别条件概率,$Pr(Class_i|Object)$

  4. 因此网络的输出为 $S\times S\times (B\times 5+C)$的张量。

yolo_output_shape.png

损失函数

yolo_loss_function.png 其中

$1_i^{obj}$的意思是网格$i$中存在对象。

$1_{ij}^{obj}$的意思是网格$i$的第$j$个bounding box中存在对象。

$1_{ij}^{noobj}$意思是网格$i$的第$j$个bounding box中不存在对象。

对损失函数各部分解析来自于X-猪的知乎

损失函数中包含三个部分:

  • 对象分类的误差(第五行)

    注意$1_i^{obj}$意味着存在对象的网格才计入误差

  • Bounding box的位置误差(第一、二行)

    • 都带有$1_{ij}^{obj}$意味着只有“负责”(IOU比较大)预测的那个bounding box的数据才会计入误差
    • 第二行宽度和高度先取了平方根,一位内如果直接取插值的话,大的对象对插值的敏感度比较低,小的对象对差值的敏感度比较高,所以取平方根可以降低这种敏感度的差异,使得较大的对象和较小的对象在尺寸误差上有相似的权重,。
    • 乘以$\lambda{coord}$调节bounding box位置误差的权重(相对分类误差和置信度误差)。YOLO设置$\lambda{coord}=5$即调高位置误差的权重。
  • Bounding box的置信度误差(第三、四行)

    • 第三行是存在对想象的bounding box的置信度误差。带有$1_{ij}^{obj}$意味着只有“负责”(IOU比较大)预测的那个bounding box的置信度才会计入误差
    • 第四行是不存在对象的bounding box的置信度误差。乘以$\lambda{noobj}$的目的是调节不存在对象的bounding box的置信度权重。YOLO设置$\lambda{noobj}=0.5$,即调低不存在对象的bounding box的置信度误差的权重。

非极大值抑制(Non-Maximun Suppression)

$Score_{ij} = P(C_i|Object)\times Confidence_j$ 代表着某个对象 $C_i$ 存在于第$j$ 个bounding box的可能性。 每种对象会有$S\times S\times B$个得分。

NMS步骤:

  1. 设置一个Score的阈值,低于该阈值的候选对象都要被排除(将Score设为0)
  2. 遍历每一个对象类别
    1. 遍历该对象的所有得分
      1. 找到score最大的那个对象及其bounding box,添加到输出列表
      2. 对于每个Score不为0的候选对象,计算其与输出对象的bounding box的IOU
      3. 根据IOU阈值,排除掉重叠度高的候选对象(将Score设置为0)
      4. 如果所有的bounding box要么在输出列表中,要么Score为0,则该对象类别的NMS完成,处理下一种对象
  3. 输出列表即为预测的对象。

目标检测问题的评判标准

  • mAP
  • Mean Average Precision
  • IOU (Intersection over union)