从YOLOV1到YOLOV3

07 July 2018

YOLO: You Only Look Once是一个速度很快的目标检测方法

Yolo把目标检测作为一个回归问题,在一次评估中直接由一个神经网络对整副图片预测bounding box和类概率。end-to-end.

相比传统目标检测方法的优点:

  • 速度快
  • 做预测时考虑全局信息, 不像滑动窗口和region proposal
  • 学习物体的泛化表示

目前的yolo版本

  • yolo
  • yolo v2
  • yolo 9000
  • yolo v3

YOLO v1

YOLO模型把图像划成 S x S 个grid,每个grid预测B个bounding boxes以及对应的confidence,和C种类别的概率。这些预测可以表示为 S x S x (B * 5 + C) tensor.

confidence定义: $Pr(Object)*IOU_{pred}^{truth}$

如果那个grid中不存在object,confidence score应该是0;否则confidence score应该是 prediction box 和 the ground truth的IOU.

比如, 在Pascal Voc上,论文中使用了 S = 7, B = 2, C = 20, 最后的预测结果是一个 7 * 7 * 30 = 1470的tensor.

损失函数

  • 增加bounding box 坐标的损失, $\lambda_{coord} = 5$
  • 减少不包含objects的boxes的cofidence的损失, $\lambda_{noobj} = .5$
  • 大的boxes的宽和高的比小的boxes的宽和高影响更小,所以使用了宽和高的平方根

$\lambda_{coord}\Sigma_{i=0}^{S^2}\Sigma_{j=0}^{B}1_{ij}^{obj}[(x_i - \hat{x_i})^2 + (y_i - \hat{y_i})^2]$

$+ \lambda_{coord}\Sigma_{i=0}^{S^2}\Sigma_{j=0}^{B}1_{ij}^{obj}[(\sqrt{w_i} - \sqrt{\hat{w_i}})^2 + (\sqrt{h_i} - \sqrt{\hat{h_i}})^2] $

$+\Sigma_{i=0}^{S^2}\Sigma_{j=0}^{B}1_{ij}^{obj}(C_i - \hat{C_i})^2$

$+\lambda_{noobj}\Sigma_{i=0}^{S^2}\Sigma_{j=0}^{B}1_{ij}^{noobj}(C_i - \hat{C_i})^2$

$+\Sigma_{i=0}^{S^2}1i^{obj}\Sigma{c \in classes}(p_i(c) - \hat{p_i}(c))^2$

$1_i^{obj}$表示第i个grid的第j个bounding box是否对object的预测负责, $1_i^{obj}$表示在grid i里是否存在object

训练

  • 先在ImageNet 1000类的比赛数据集上进行预训练,网络架构是 Figure 3的前20个卷积层加上一个average-pooling层和一个全连接层。
  • 后面的四个卷积层和两个全连接层的权重随机初始化
  • 检测需要细粒度的视觉信息, 所以把检测网络的输入数据的分辨率从 224 x 224提高到了 448 x 448.

缺点

  • 小物体检测
  • 从数据中学习预测,它很难在推广至(generalize)新的宽高比或配置中的object
  • 很多下采样层,粗特征预测bounding box
  • 同等对待large bounding boxes和small bounding box中的误差, 小的 box 中的误差对IOU有较大的影响

YOLO v2

YOLO和当时的state-of-the-art检测系统相比,定位误差较大,召回率较小.

Better performance often hinge on training larger networks or ensembling multiple models together. However, with YOLOV2 we want a more accurate detector that is still fast. Instead of scaling up our network, we simplify the network and then make the representation easier to learn.

上面是从论文中摘抄的一段话, 由此可见yolov2的网络简单了.

Better

下表是yolov2做的一些优化的性能结果:

  • Batch Normalization

    对于每个隐层神经元,把逐渐向非线性函数映射后向取值区间极限饱和区靠拢的输入分布强制拉回到均值为0方差为1的比较标准的正态分布,使得非线性变换函数的输入值落入对输入比较敏感的区域,以此避免梯度消失问题。因为梯度一直都能保持比较大的状态,所以很明显对神经网络的参数调整效率比较高,就是变动大,就是说向损失函数最优值迈动的步子大,也就是说收敛地快。NB说到底就是这么个机制,方法很简单,道理很深刻。

  • High Resolution Classifier

    微调网络架构, 448 x 448 ImageNet

  • Convolution with anchor box(还不是太懂)

    YOLO 直接使用全连接层预测bounding boxes的坐标;

    YOLO V2移除了全连接层, 使用anchor boxes来预测 bounding boxes;

    去除了一个pooling层来使网络的输出是提高分辨率; 输入大小 448 x 448 变成 416 x 416

    dimension clusters;

    direct location prediction

  • Fine-Grained Features(具体怎么实施的不太懂)

    YOLOV2在 13 x 13的feature map上做预测, 对于定位大物体这是足够的, 但是更细的特征的对定位更小的物体更有帮助.

    Faster R-CNN and SSD run their proposal networks at various feature maps in the network to get a range of resolutions.

    We take a different approach, simply adding a passthrough layer that brings features from an earlier layer at 26 x 26 resolution

  • Multi-Scale Training

    想让YOLO V2对不同尺寸的图像鲁棒, 每10个batches我们的网络随机选择一个新的image dimension size,范围设置在{320, 352, …, 608}

    这意味着相同的网络可以预测不同分辨率的图片

Faster

  • Darknet-19

    1. 将要用作YOLOV2的一个新的分类模型:

    1. Following the work on NetWork in Network(NIN) we use global average pooling to make predictions as well as 1 x 1 filters to compress the feature between 3 x 3 convolutions.
    2. We use batch normalization to stablize training, speed up convergence, adn regularize model.
  • Training for classification

  • Training for detection

Stronger

提出了一种联合训练分类数据和检测数据的机制;

利用COCO检测数据集和ImageNet的top 9000数据集,训练YOLO 9000.

YOLO 9000

YOLO 9000是一个种可以检测9000类物体的实时框架,使用了WordTree合并了不同来源的数据,同时在ImageNet和COCO进行训练

YOLO v3

  • Bounding Box Prediction(不太懂)

  • Class Prediction

    不适用softmax,而使用了独立的逻辑分类器,在训练过程中label的loss的使用了交叉熵;

    多label

  • Predition Across Scales

    YOLOv3在3种不同尺度预测boxes, 在COCO实验中, 在每种尺度我们预测3个boxes, 所以得到的tensor是 N x N x[3 * (4 + 1 + 80)]

    上采样结合(逐像素相加)更浅层的feature map得到多尺的feature map

  • Feature Extractor

    我们使用了一种新的网络来提取特征, 我们的网络是混合了YOLO V2, Darknet-19, 和残差网络等组合的

    我们的网络使用连续的 3 x 3 和 1 x 1卷积层, 还有一些shortcut 连接, 因为具有53个卷积层, 所以称作Darknet-53.(数了一下,貌似52层?, 而且还有全连接层? softmax ? 权重参数怎么设置的(含有全连接层的和全卷积层))

  • Training

    多尺度训练, 很多数据增强, batch normalization等

下面摘抄了论文的一段话, 对大小物体的预测性能:

In the past YOLO struggled with small objects. How- ever, now we see a reversal in that trend. With the new multi-scale predictions we see YOLOv3 has relatively high APS performance. However, it has comparatively worse performance on medium and larger size objects.

参考文献:

[1]. https://blog.csdn.net/malefactor/article/details/51476961

[2]. https://www.zhihu.com/question/42205480

[3]. 论文, You Only Look Once: Unified, Real-Time Object Detection

[4]. 论文, YOLO9000: Better, Faster, Stronger

[5]. 论文, YOLOv3: An Incremental Improvement

与rcnn提出时间, map, speed比较