论文笔记之YOLOv2、YOLOv3

1. YOLO存在的问题:

(1)定位误差大
(2)召回率低

2. YOLOv2的改进:

YOLOv2主要从以下几个方面做了改进:
论文笔记之YOLOv2、YOLOv3

2.1 Batch Normallzation

Batch Normalization可以提升模型收敛速度,而且可以起到一定正则化效果,降低模型的过拟合。在YOLOv2中,每个卷积层后面都添加了Batch Normalization层,并且不再使用dropout。使用Batch Normalization后,YOLOv2的mAP提升了2.4%。

2.2 High Resolution Classifier

目前大部分的检测模型都会在先在ImageNet分类数据集上预训练模型的主体部分(CNN特征提取器),ImageNet分类模型基本采用大小为 224×224 的图片作为输入,分辨率相对较低,不利于检测模型。所以YOLOv1在采用 224×224 分类模型预训练后,将分辨率增加至 448×448 ,并使用这个高分辨率在检测数据集上微调。但是直接切换分辨率,检测模型可能难以快速适应高分辨率。所以YOLOv2增加了在ImageNet数据集上使用448×448来微调分类网络这一中间过程(10 epochs),这可以使得模型在检测数据集上finetune之前已经适用高分辨率输入。使用高分辨率分类器后,YOLOv2的mAP提升了约4%。

2.3 Convolutionlal With Anchor Boxes

在YOLOv1中,输入图片最终被划分为7*7网格,每个单元格预测2个边界框。YOLOv1最后采用的是全连接层直接对边界框进行预测,其中边界框的宽与高是相对整张图片大小的,而由于各个图片中存在不同尺度和长宽比的物体,YOLOv1在训练过程中学习适应不同物体的形状是比较困难的,这也导致YOLOv1在精确定位方面表现较差。

YOLOv2借鉴了Faster R-CNN中RPN网络的先验框策略。RPN对CNN特征提取器得到的特征图进行卷积来预测每个位置的边界框以及置信度(是否含有物体),并且各个位置设置不同尺度和比例的先验框,所以RPN预测的是边界框相对于先验框的offsets值,采用先验框使得模型更容易学习。所以YOLOv2移除了YOLOv1中的全连接层而采用了卷积和anchor boxes来预测边界框。为了使检测所用的特征图分辨率更高,移除其中的一个pool层。

在检测模型中,YOLOv2不是采481418图片作为输入,而是采用416416大小。因为YOLOv2模型下采样的总步长为32,对于416416大小的图片,最终得到的特征图大小为1313,维度是奇数,这样特征图恰好只有一个中心位置。对于一些大物体,它们中心点往往落入图片中心位置,此时使用特征图的一个中心点去预测这些物体的边界框相对容易些。所以在YOLOv2设计中要保证最终的特征图有奇数个位置。

对于YOLOv1,每个cell都预测2个boxes,每个boxes包含5个值:(x,y,w,h,c)前4个值是边界框位置与大小,最后一个值是置信度(confidence scores,包含两部分:含有物体的概率以及预测框与ground truth的IOU)。但是每个cell只预测一套分类概率值(class predictions,其实是置信度下的条件概率值),供2个boxes共享。YOLOv2使用了anchor boxes之后,每个位置的各个anchor box都单独预测一套分类概率值,这和SSD比较类似(但SSD没有预测置信度,而是把background作为一个类别来处理)。

使用anchor boxes之后,YOLOv2的mAP有稍微下降(可能是训练方法不正确)。YOLOv1只能预测98个边界框(7×7×2),而YOLOv2使用anchor boxes之后可以预测上千个边界框(13×13×num_anchors)。所以使用anchor boxes之后,YOLOv2的召回率大大提升,由原来的81%升至88%。

2.4 Dimension Clusters

在Faster R-CNN和SSD中,先验框的维度(长和宽)都是手动设定的,带有一定的主观性。如果选取的先验框维度比较合适,那么模型更容易学习,从而做出更好的预测。

因此,YOLOv2采用k-means聚类方法对训练集中的边界框做了聚类分析。因为设置先验框的主要目的是为了使得预测框与ground truth的IOU更好,所以聚类分析时选用box与聚类中心box之间的IOU值作为距离指标:
论文笔记之YOLOv2、YOLOv3
对k的各种值运行k-means,并绘制平均IOU(各个边界框与聚类中心的IOU的平均值),见图:
论文笔记之YOLOv2、YOLOv3
最后选择k=5作为模型复杂度和高召回率之间的一个很好的折衷。聚类中心明显不同于人工选取的anchor box。少了一些又短又宽的box,多了一些又高又窄的box。使用k-means生成的默认框可以以更好的表示方式启动模型,并使任务更易于学习。

2.5 Direct location prediction

YOLOv2借鉴RPN网络使用anchor boxes来预测边界框相对先验框的offsets。而在区域建议网络中,网络预测值tx和ty以及(x,y)中心坐标的计算公式为:
论文笔记之YOLOv2、YOLOv3
此公式不受约束,预测的边界框很容易向任何方向偏移。在随机初始化的情况下,模型需要很长时间才能稳定下来,以预测合理的偏移量。

而预测相对网格单元位置的位置坐标(边界框中心点相对于对应cell左上角位置的相对偏移值)。这限制了真实值在0和1(每个cell是1)之间。使用logistic**来限制网络的预测在这个范围内。

该网络在输出特征图的每个网格单元预测5个边界框。网络为每个边界框预测5个坐标tx、ty、tw、th和to。如果单元格与图像左上角的偏移量为(cx,cy),并且prior 边界框具有宽度和高度pw,ph,则预测对应于:
论文笔记之YOLOv2、YOLOv3
因为限制了位置预测,所以参数更容易学习,使网络更加稳定。使用聚类分析和直接预测边界框中心位置比使用anchor box的版本提高了约5%。
论文笔记之YOLOv2、YOLOv3

2.6 Fine-Grained Features

YOLOv2的输入图片大小为416416,经过5次maxpooling之后得到1313大小的特征图,并以此特征图采用卷积做预测。13*13大小的特征图对检测大物体是足够了,但是对于小物体还需要更精细的特征图(Fine-Grained Features)。因此SSD使用了多尺度的特征图来分别检测不同大小的物体,前面更精细的特征图可以用来预测小物体。YOLOv2提出了一种passthrough层来利用更精细的特征图。

YOLOv2所利用的Fine-Grained Features是2626大小的特征图(最后一个maxpooling层的输入),对于Darknet-19模型来说就是大小为2626512的特征图。passthrough层与ResNet网络的shortcut类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。前面的特征图维度是后面的特征图的2倍,passthrough层抽取前面层的每个22的局部区域,然后将其转化为channel维度,对于2626512的特征图,经passthrough层处理之后就变成了13132048的新特征图(特征图大小降低4倍,而channles增加4倍),这样就可以与后面的13131024特征图连接在一起形成13133072的特征图,然后在此特征图基础上卷积做预测。这使性能略微提高了1%。

2.7 Multi-Scale Training

由于YOLOv2模型中只有卷积层和池化层,所以YOLOv2的输入可以不限于416416大小的图片。为了增强模型的鲁棒性,YOLOv2采用了多尺度输入训练策略,具体来说就是在训练过程中每间隔一定的iterations之后改变模型的输入图片大小。由于YOLOv2的下采样总步长为32,输入图片大小选择一系列为32倍数的值:(320,352,…,608),输入图片最小为320320,此时对应的特征图大小为1010,而输入图片最大为608608,对应的特征图大小为19*19,在训练过程,每隔10个iterations随机选择一种输入图片大小,然后只需要修改对最后检测层的处理就可以重新训练。
论文笔记之YOLOv2、YOLOv3

2.8 DarkNet-19

提出了一个新的分类模型作为YOLOv2的基础。与VGG模型类似,主要使用3 × 3的卷积,在每个池化步骤之后通道数量增加一倍。与网络中的网络类似(NIN),使用全局平均池化进行预测,并使用1 × 1卷积压缩3 × 3卷积之间的特征表示以降低模型计算量和参数。使用batch normalization来稳定训练,加速收敛,并使模型正则化。
最终模型,称为Darknet-19,有19个卷积层和5个maxpooling层。有关详细说明,请参见表6.
论文笔记之YOLOv2、YOLOv3

3. YOLOv3的改进:

3.1 跨尺度预测

YOLOv3预测3种不同尺度的box。其实就是使用了与金字塔网络相似的概念,从这些尺度中提取特征。(当输入为416416时为:(1313),(2626),(5252))。
论文笔记之YOLOv2、YOLOv3
从前面的两层中提取特征图,并将其放大2倍(上采样)。另外还从网络的早期获取一个特征图,并使用cocat将这个与上采样特征融合。这个方法可以从上采样的特征中获取更有意义的语义信息,并从早期的特征映射中获取更细粒度的信息。然后,再添加一些卷积层来处理这个组合的特征映射,并最终预测一个相似的张量。

再次执行相同的步骤,加上原来的和上一个,共3个尺度。

TOLOv3仍然使用k-means聚类来确定先验框。任意选择了9个簇和3个尺度,然后在尺度上均匀地划分簇。在COCO数据集上,9个聚类为:(10 × 13);(16 × 30);(33 × 23);(30 × 61);(62 × 45);(59 × 119);(116 × 90);(156 × 198);(373 × 326)。

3.2 DarkNet-53

新网络是YOLOv2,Darknet-19中使用的网络和新的残差网络之间的混合。网络使用连续的3 × 3和1 × 1卷积层,但现在也有一些快捷连接,并且明显更大。它有53个卷积层,所以称之为Darknet-53.
论文笔记之YOLOv2、YOLOv3

3.3 实验结果

论文笔记之YOLOv2、YOLOv3