YOLOv2多方面地对YOLO进行了优化,将算法的速度和精度都提高到了一个新的高度

YOLOv2沿用了YOLO的结构,并做了大量的优化


更精准 [Better]

YOLO相比于Fast R-CNN来说存在大量的定位误差,且召回率较低,因此优化主要是为了解决这两个问题

批标准化

YOLOv2用BN层代替了dropout,置于每个卷积层之后,有助于解决bp中梯度弥散和梯度爆炸的情况,mAP提升2%以上

高分辨率分类器

先在ImageNet上以$448\times 448$分辨率进行10个epoch的微调,然后根据检测结果对网络微调,这本质上是一种迁移学习,这种方法提升了将近4%的mAP

带锚框的卷积

YOLOv2移除了YOLO中的FC层,采用锚框来预测bbox,同时,将网络的输入从$448\times 448$缩小到416,这样特征图有奇数个位置,只有一个中心单元 (因为大型物体往往在图像中心),32倍下采样之后得到$13 \times 13$的特征图

同时,解耦类的预测和空间位置,区别于YOLO中为每个格子预测类别,YOLOv2为每个锚框预测类和对象

引入锚框后mAP从69.5下降到69.2,但是Recall从81%上升至88%

聚类提取锚框尺寸

若手工设计锚框的尺寸 (Faster R-CNN),就需要通过网络学习来对其进行调整,如果给定的先验框更好,网络就更容易学习到好的检测方法

基于这个想法,YOLOv2采用k-means聚类的方法来替代手工设计锚框,锚框的中心即网格的中心,采用欧式距离的话,较大的box会比较小的box产生更多的误差,因此采用如下式子表示距离

$d(box,centroid)=1-IoU(box,centroid)$

对速度和召回率之间做了一个权衡之后,确定k=5

偏移公式优化

在Faster RCNN中,偏移修正公式如下所示

$x=t_x * w_a - x_a$

$y=t_y * h_a - y_a$

$x_a$和$y_a$是锚框的中心点坐标,$w$和$h$是锚框的宽和高,t则是需要学习的参数,由于$t_x$和$t_y$是没有被约束的,所以预测框的中心会乱飘,所以训练的早期非常不稳定

因此yolov2采用了下列预测公式

$c$表示中心点所处区域左上角格子的中心点坐标,$p$代表锚框的信息,$\sigma$代表预测框中心点和左上角坐标的距离,通过$c$和$\sigma$得到预测框中心点坐标

细粒度检测

YOLOv2通过采用passthrough层来实现细粒度检测,这个东西和resnet中的shortcut类似,思想都是将高层的语义和低层的位置信息结合,无非是结合方式不同

passthrough采取的方式是把低层特征图一拆四 (如上图),然后和高层特征图直接叠加作为特征图

更快 [Faster]

YOLOv2不再使用VGGnet而是提出了Darknet-19 (19conv+5maxpooling)

Darknet-19的精度和VGG-16五五开,但是浮点运算量减少到约$\frac{1}{5}$

更强 [Stronger]

作者还构建了WordTree,一通操作之后可以识别9000种物体(YOLO9000),详见论文 ((扣树无关,我不看))