YOLO

过去的目标检测都是用分类器去实现检测,本文构造的检测器,将目标检测作为一种回归空间分离的边界框和相关类概率的问题。一次预测中,一个神经网络(single network)直接从整幅图像中预测出边界框和类别概率,是一种端到端的实现。

Introduction

当前的检测系统是把检测作为分类问题。系统使用目标分类器,并且在图像中不同位置和尺度上进行判断。如R-CNN先提出候选框,然后对每个候选框使用分类器,分类之后精修边界框并且去除重复的框。这种方式速度慢并且很难优化,因为每一个独立的部分都必须单独训练。

本文将目标检测重新设计为一种单一的回归问题,直接从图像像素得到边界框坐标和类别概率。在图像中只需要看一次(You Only Look Once)就知道目标是否存在,存在于哪里。

YOLO的大致流程如下图:一个单卷积网络同时预测多个bounding box和相应的类别概率。首先对输入图像缩放到448×448,然后对其运行单卷积网络,最后使用非极大值抑制消除重复框。

Unified Detection

  • YOLO中,输入图像被划分为S×S的网格,如果一个目标的中心落在某一个网格中,则该网格负责检测这个目标。
  • 每一个网格预测出Bbounding box以及这些box对应的置信度分数,这些分数反映了模型有多大的把握认为这个box包含一个目标并且预测的bounding box有多精确。Bounding box信息包含5个数据值,分别是x,y,w,h,和confidence。其中x,y是指当前格子预测的物体的bounding box中心位置的坐标。w,hbounding box的宽度和高度。confidence = Pr(Object)*IoU,如果该网格没有目标,则Pr(Object)0,否则为1。所以当网格里有目标时,condifence应该与预测值和ground truthIoU相等。
  • 每一个网格也预测C个类别条件概率$Pr(Class_i|Obeject)$,表示在该网格包含目标的前提下,目标是某种类别的概率。不管一个网格预测多少个bounding box,总之对这个网格预测出C个类别条件概率。confidence是针对每个bounding box的,而类别条件概率是针对每个网格的

上面中,组合每个网格预测的检测框和类条件概率,不仅得到了每个候选框的位置还得到了对应的类别概率。最后使用NMS消除重叠的框。

总结一下SSD的思想:将输入图像划分为SxS的网格,对每一个网格,预测Bbounding box,每个bounding box包含4个位置信息和1bounding box置信度分数;同时对每一个网格还预测了C个类别条件概率。那么对一幅图,就会得到SxS(Bx5+C)tensor

作者在VOC数据上使用的是S=7B=2C=20,也就是最终得到一个7x7x30tensor

Network Design

检测网络一共有24个卷积层和2个全连接层。其中可以看到1×1的降维层和3×3的卷积层的组合使用。

Training

YOLO模型训练分为两步:

  • 预训练。使用ImageNet1000类数据训练YOLO网络的前20个卷积层 + 1average池化层 + 1个全连接层。训练图像分辨率resize224x224
  • 回到前面的网络图,加入4个卷积层和2个全连接层,构成YOLO网络。用上一步骤得到的前20个卷积层网络参数来初始化YOLO模型前20个卷积层的网络参数,然后用VOC20类标注数据进行YOLO模型训练。检测要求细粒度的视觉信息,在训练检测模型时,将输入图像分辨率resize448x448

训练时,每个目标被匹配到对应的某个网格,训练过程中调整这个网格的类别概率,使真实目标类别的概率最高,其它的尽可能小,在每个网格预测的bounding box中找到最好的那个,并且调整它的位置,提高置信度,同时降低其它候选框的置信度。对于没有匹配任何目标的网格,降低这些网格中候选框的置信度,不用调整候选框位置和类别概率。


## Loss
YOLO使用平方和误差作为loss函数来优化模型参数。
- 位置误差(坐标、IoU)与分类误差对网络loss的贡献值是不同的,因此YOLO在计算loss时,使用权重为5的因子来修正位置误差。
- 在计算IoU误差时,包含物体的格子与不包含物体的格子,二者的IOU误差对网络loss的贡献是不同的。若采用相同的权值,那么不包含物体的格子的confidence值近似为0,变相放大了包含物体的格子的confidence误差在计算网络参数梯度时的影响。为解决这个问题,YOLO 使用权重为0.5的因子修正IoU误差。(注此处的“包含”是指存在一个物体,它的中心坐标落入到格子内)。
- 对于相等的误差值,大物体误差对检测的影响应小于小物体误差对检测的影响。这是因为,计算位置偏差时,大的bounding box上的误差和小的bounding box上的误差对各自的检测精确度影响是不一样的(小误差对应于大检测框,影响很小,而对于小检测框影响较大)。YOLO将物体大小的信息项(wh)进行求平方根来改进这个问题。(注:这个方法并不能完全解决这个问题)。

综上,YOLO在训练过程中Loss计算如下式所示:

Limitations of YOLO

YOLO的局限性:

  • Bounding box预测上的空间限制,因为每一个网格只预测2box,并且最终只得到这个网格的目标类别,因为当目标的中心落入网格时,这个网格专门负责这一个目标。这种空间局限性限制了模型预测出那些挨得近的目标的数量(例如一个网格里可能会有多个小目标),YOLO对小目标检测性能并不好
  • 使用相对粗糙的特征去预测,影响了检测效果。因为网络中对输入图像进行了多次下采样。
  • loss方程对小bounding box和大bounding box上误差的处理是相同的。一般大边界框里的小误差是良性的,而小边界框里的小误差在IoU上有着更大的影响。虽然采用求平方根方式,但没有根本解决问题,从而降低了物体检测的定位准确性。

Comparison to Other Detection Systems

R-CNN:生成proposal然后卷积网络提取特征,再做分类并且调整bounding box,这种复杂的流程中每一阶段都需要独立且精细地调整,因此速度慢。
YOLO:把空间限制放在网格的proposal上,这帮助缓解了同一个目标的重复检测。YOLO提取的bounding box更少(98,而选择性搜索2000)。
FastFaster R-CNN:致力于通过共享计算以及使用神经网络代替选择性搜索去提取proposal从而加速R-CNN,但是也只是在R-CNN基础上有一定的精度和速度的提升,仍然达不到实时。

YOLO模型相对于之前的物体检测方法有多个优点:

  • YOLO检测物体非常快。因为没有复杂的检测流程,YOLO可以非常快的完成物体检测任务。标准版本的YOLOTitan XGPU上能达到45 FPS。更快的Fast YOLO检测速度可以达到155 FPS。而且,YOLOmAP是之前其他实时物体检测系统的两倍以上。
  • YOLO可以很好的避免背景错误,避免产生false positives。 不像其他物体检测系统使用了滑窗或region proposal,分类器只能得到图像的局部信息。YOLO在训练和测试时都能够看到一整张图像的信息,因此YOLO在检测物体时能很好的利用上下文信息,从而不容易在背景上预测出错误的物体信息。和Fast R-CNN相比,YOLO的将背景错误判断为目标的比例不到Fast R-CNN的一半。
  • YOLO可以学到物体的泛化特征。当YOLO在自然图像上做训练,在艺术作品上做测试时,YOLO表现的性能比DPMR-CNN等之前的物体检测系统要好很多。因为YOLO可以学习到高度泛化的特征,从而迁移到其他领域。

尽管YOLO有这些优点,它也有一些缺点

  • YOLO的物体检测精度低于其他state-of-the-art的物体检测系统。
  • YOLO容易产生物体的定位错误。
  • YOLO对小物体的检测效果不好(尤其是密集的小物体,因为一个栅格只能负责1个目标)。

Reference

  1. 论文原文
  2. YOLO详解
  3. YOLOv1论文理解

0%