【深度学习YOLO系列】对YOLO v2的解读

yolo_v2论文发表在CVPR2017。v2算法在v1的基础上可以说是飞跃性提升,吸取诸子百家之优势。同时,v2的论文也是目前为止yolo系列论文里干货最多的文章。以下是直达YOLOv1和YOLOv2的通道:
YOLOv1的解读:《【深度学习YOLO系列】对YOLO v1的解读》
YOLOv3的解读:《【深度学习YOLO系列】对YOLO v3的解读》


针对YOLO准确率不高,容易漏检,对长款比不常见物体效果差等问题,结合SSD的特点,2016年提出了YOLO-v2。

YOLO v2速度的优化

为了精度和速度并重,作者在速度上也作了一些改进措施。

大多数检测网络依赖于VGG-16作为特征提取网络,VGG-16是一个强大而准确的分类网络,但是却过于复杂。224*224的图片进行一次前向传播,其卷积层就需要多达306.9亿次浮点数计算。

YOLO使用的是基于Googlenet的自定制网络,比VGG-16更快,一次前向传播仅需85.2亿次运算,不过它的精度要略低于VGG-16.

作者使用Darknet-19在标准1000类的ImageNet上训练了160周期。训练的时候仍然使用了很多常见的数据扩充方法。初始的224*224训练后把分辨率上调到了448*448,又训练了10次。高分辨率下训练的分类网络top-1准确率76.5%,top-5准确率93.3%。

【深度学习YOLO系列】对YOLO v2的解读_第1张图片

YOLO v2精确度优化

为了达到更精确的目的,YOLO v2主要做了如下改进:

1、High Resolution Classifier

YOLOv2首先修改预训练分类网络的分辨率为448*448 , 在ImageNet数据集上训练10个周期(10 epochs)。这个过程让网络有足够的时间去适应高分辨率的输入。然后再fine tune为检测网络,map获得了4%的提升。

2、Convolutional with Anchor Boxes

YOLO(v1)使用全连接层数据进行bounding box预测,这会丢失较多的空间信息,导致定位不准。YOLOv2借鉴了Faster R-CNN中的anchor思想:简单理解为卷积特征图上进行滑窗采样,每个中心预测9种不同大小和比例的anchor。总的来说就是移除全连接层(以获得更多空间信息)使用anchor boxes去预测bounding boxes。并且,YOLOv2由anchor box同时预测类别和坐标。

Convolutional with Anchor Boxes的具体做法:

1). 去掉最后的池化层确保输出的卷积特征图有更高的分辨率。

2). 缩减网络,让图片输入分辨率为416*416, 目的是让后面产生的卷积特征图宽高都为奇数,这样就可以产生一个center cell。因为作者观察到,大物体通常占据了图像的中间位置,可以只用一个中心的cell来预测这些物体的位置,否则就要用中间的4个cell来进行预测,这个技巧可稍稍提升效率。

3). 使用卷积层降采样(factor为32),使得输入卷积网络的416*416 图片最终得到13*13 的卷积特征图(416/32=13)。

4). 由anchor box同时预测类别和坐标。因为YOLO是由每个cell来负责预测类别,每个cell对应的两个bounding box负责预测坐标(回想YOLO中最后输出7*7*30 的特征,每个cell对应1*1*30,前10个主要是2个bounding box用来预测坐标,后20个表示该cell在假设包含物体的条件下属于20个类别的概率)。YOLOv2中,不再让类别的预测与每个cell(空间位置)绑定一起,而是让全部放到anchor box中。

Convolutional with Anchor Boxes优化点:

加入了anchor boxes后,我们来计算一下,假设每个cell预测9个anchor,那么总共会预测13*13*9=1521个boxes,而之前的网络仅仅预测7*7*2 = 98个boxes。具体数据为:没有anchor boxes,模型recall为81%,mAP为69.5%;加入anchor boxes,模型recall为88%,mAP为69.2%。

【深度学习YOLO系列】对YOLO v2的解读_第2张图片

3、Dimension Clusters(维度聚类)

在使用anchor时,Faster-RCNN中anchor boxes的个数和宽高维度往往是手动精选的先验框(hand-picked priors),如果能够一开始就选择了更好的、更有代表性的先验boxes维度,那么网络就应该更容易学到准确的预测位置。YOLOv2中利用K-means聚类方法,通过对数据集中的ground truth box做聚类,找到ground truth box的统计规律。以聚类个数k为anchor boxes个数,以k聚类中心box的宽和高为anchor box的宽和高。

如果按照标准k-means使用欧氏距离函数,大boxes比小boxes产生更多的error。但是,我们真正想要的是产生好的IOU得分的boxes(与box的大小无关)。因此采用了如下距离度量:
d ( b o x , c e n t r o i d ) = 1 − I O U ( b o x , c e n t r o i d ) d(box, centroid) = 1-IOU(box, centroid) d(box,centroid)=1IOU(box,centroid)
假设有两个框,一个框是35,一个框是55
欧氏距离的计算 ( 5 − 3 ) 2 + ( 5 − 5 ) 2 = 2 \sqrt{(5-3)^2 + (5-5)^2} = 2 (53)2+(55)2 =2
IOU的计算 ( 3 ∗ 5 ) / ( 5 ∗ 5 ) = 0.6 (3*5)/(5*5) = 0.6 (35)/(55)=0.6

随着k的增大,IOU也在增大(高召回率),但是复杂度也在增加。所以平衡复杂度和IOU之后,最终得到的k值为5。5聚类的中心与手动精选的boxes是完全不同的,扁长的框较少瘦高的框较多。

【深度学习YOLO系列】对YOLO v2的解读_第3张图片

作者做了对比试验,5种boxes的Avg IOU(61.0)就和Faster R-CNN的9种Avg IOU(60.9)相当。说明K-means方法的生成的boxes更具有代表性,使得检测任务更好学习。

【深度学习YOLO系列】对YOLO v2的解读_第4张图片

4、Direct location prediction(直接位置预测)

使用anchor boxes的另一个问题是模型不稳定,尤其是在早期迭代的时候。大部分的不稳定现象出现在预测box的(x, y)坐标时,YOLOv2没有用Faster-RCNN的预测方式。

YOLOv2位置预测值 t x , t y t_x, t_y tx,ty就是预测边界框中心点相对于对应cell左上角位置的相对偏移值,为了将边界框中心点约束在当前cell中,使用sigmoid函数处理偏移值,这样预测的偏移值在(0, 1)范围内(每个cell的尺度看做1)。

作者通过使用维度聚类和直接位置预测这两项Anchor Boxes改进方法,将mAP提高了5%。

网络在特征图(13*13)的每个cell上预测5个anchor,每一个anchor预测5个值: t x , t y , t w , t h , t o t_x,t_y,t_w,t_h,t_o tx,ty,tw,th,to。如果这个cell距离图像左上角的边距为(c_x,c_y),cell对应的先验框(anchor)的长和宽分别为 ( p w , p h ) (p_w, p_h) (pw,ph),那么网络预测框的为下图蓝框:

【深度学习YOLO系列】对YOLO v2的解读_第5张图片

5、Fine-Grained Features(细粒度特征)

SSD通过不同Scale的Feature Map来预测Box来实现多尺度,而YOLOv2则采用另一种思路:

添加一个passthrough layer,来获取之前的26×26×512的特征图特征,对于26×26×512的特征图,经passthrough层处理之后就变成了13×13×2048的心特征图(特征图大小降低4倍,而channels增加了4倍)(变化过程如下图所示),这样就可以与后面的13×13×1024特征图连接在一起形成13×13×3072大小的特征图,然后在此特征图基础上卷积做预测。

YOLOv2的检测器使用的就是经过拓展后的特征图,它可以使用细粒度特征,是的模型的性能获得了1%的提升。
26 × 26 × 512 − > 13 × 13 × 2048 + 13 × 13 × 1024 − > 13 × 13 × 3072 26×26×512->13×13×2048 + 13×13×1024->13×13×3072 26×26×512>13×13×2048+13×13×1024>13×13×3072

【深度学习YOLO系列】对YOLO v2的解读_第6张图片

6、Multi-Scale Training(多尺度)

原始YOLO网络使用固定的448*448的图片作为输入,加入anchor boxes后输入变成了416*416, 由于网络只用到了卷积层和池化层,就可以进行动态调整(检测任意大小图片)。为了让YOLOv2对不同尺寸图片的具有鲁棒性,在训练的时候也考虑了这一点。

不同于固定网络输入图片尺寸的方法,每经过10批训练(10 batches)就会随机选择新的图片尺寸。网络使用的降采样参数为32,于是使用32的倍数{320,352,…, 608},最小的尺寸为320*320,最大的尺寸为608*608.调整网络到相应维度然后继续进行训练。

这种机制使得网络可以更好地预测不同尺寸的图片,同一个网络可以进行不同分辨率的检测任务,在小尺寸图片上YOLOv2运行更快,在速度和精度上达到了平衡。

YOLO v2结果

【深度学习YOLO系列】对YOLO v2的解读_第7张图片

参考:

YOLO9000: Better, Faster, Stronger
Batch Normalization原理与实战
目标检测|YOLOv2原理与实现(附YOLOv3)
YOLO9000: Better, Faster, Stronger
WordNet
YOLO v1深入理解

你可能感兴趣的:(算法)