YOLOv2学习笔记

 

YOLOv2改进

YOLOv2学习笔记_第1张图片

1.Batch Normalization

BN(批量归一化)层简单讲就是对网络的每一层的输入都做了归一化,这样网络就不需要每层都去学数据的分布,收敛会快点。作者在YOLOv2中为每个卷积层都添加了BN层,由于BN可以规范模型,所以加入BN后就把dropout去掉了,实验证明添加了BN层可以提高2%的mAP。

2.High Resolution Classifier

 高分辨率分类器。目前的目标检测方法中,基本上都会使用ImageNet预训练过的模型(classifier)来提取特征,如果用的是AlexNet网络,那么输入图片会被resize到不足256 * 256,导致分辨率不够高,给检测带来困难。

YOLOv1

  1. 预训练的时候用的是224*224的输入,一般预训练的分类模型都是在ImageNet数据集上进行的
  2. 检测的时候采用448*448的输入。

这会导致从分类模型切换到检测模型的时候,模型还要适应图像分辨率的改变。

YOLOv2

  1. 预训练先用224*224的输入从头开始训练网络,大概160个epoch,
  2. 然后再将输入调整到448*448,再训练10个epoch。**注意这两步都是在ImageNet数据集上操作
  3. 检测的时候用448*448的图像作为输入就可以顺利过渡了。

3.Convolutional With Anchor Boxes

YOLOv1是利用全连接层直接预测bounding box的坐标,导致丢失较多的空间信息,定位不准。将输入图像分成7*7的网格,每个网格预测2个bounding box,一共只有7*7*2=98个box

YOLOv2则借鉴了Faster R-CNN的思想,引入anchor。输出feature map大小为13*13,每个cell有5个anchor box预测得到5个bounding box,一共有13*13*5=845个box。增加box数量是为了提高目标的定位准确率

做法:

  1. 删掉全连接层和最后一个pooling层,使得最后的卷积层可以有更高分辨率的特征。
  2. 缩减网络,用416*416大小的输入代替原来448*448。这样做是希望希望得到的特征图都有奇数大小的宽和高,奇数大小的宽和高会使得每个特征图在划分cell的时候就只有一个中心cell。因为大的目标一般会占据图像的中心,所以希望用一个中心cell去预测,而不是4个中心cell。网络最终将416*416的输入下采样32倍变为13*13大小的feature map输出,查看.cfg文件可以看到有8个pooling层

YOLOv2中,不再让类别的预测与每个cell(空间位置)绑定一起,而是让全部放到anchor box中。

YOLOv2学习笔记_第2张图片

4.Dimension Clusters

维度聚类。

Faster R-CNN中anchor box的大小和比例是按经验设定的,然后网络会在训练过程中调整anchor box的尺寸。如果一开始就能选择到合适尺寸的anchor box,那肯定可以帮助网络更好地预测。

所以作者采用k-means的方式对训练集的bounding boxes(就是groundTruth)做聚类,试图找到合适的anchor box。

传统的K-means聚类方法使用的是欧氏距离函数,也就意味着较大的boxes会比较小的boxes产生更多的error,聚类结果可能会偏离。为此,作者采用的评判标准是IOU得分(也就是boxes之间的交集除以并集),这样的话,error就和box的尺度无关了,最终的距离函数为:

在VOC和COCO数据集上的聚类分析结果,随着聚类中心数目的增加,平均IOU值(各个边界框与聚类中心的IOU的平均值)是增加的,但是综合考虑模型复杂度和召回率,作者最终选取5个聚类中心作为先验框

COCO: (0.57273, 0.677385), (1.87446, 2.06253), (3.33843, 5.47434), (7.88282, 3.52778), (9.77052, 9.16828)
VOC : (1.3221, 1.73145), (3.19275, 4.00944), (5.05587, 8.09892), (9.47112, 4.84053), (11.2364, 10.0071)

YOLOv2学习笔记_第3张图片

实验结果:

  1. 采用聚类分析得到的先验框比手动设置的先验框平均IOU值更高,因此模型更容易训练学习。
  2. 仅选取5种box就能达到Faster RCNN的9种box的效果。

5.Direct location prediction

作者在引入anchor box的时候遇到的第二个问题:模型不稳定,尤其是在训练刚开始的时候。

作者认为这种不稳定主要来自预测box的中心坐标(x,y)值。

在基于region proposal的目标检测算法中,是通过预测txty来得到(x,y)值,也就是预测的是offsets。

Faster R-CNN中的公式:

 

YOLOv2学习笔记_第4张图片

x    是坐标预测值

xa  是anchor坐标(预设固定值)

x∗  是坐标真实值(标注信息)

t    是偏移量

所以bbox的中心坐标为:

YOLOv2学习笔记_第5张图片

这个公式是无约束的,预测的边界框很容易向任何方向偏移。
当tx=1时,box将向右偏移一个anchor box的宽度;
当tx=-1时,box将向左偏移一个anchor box的宽度;
因此,每个位置预测的边界框可以落在图片任何位置,这导致模型的不稳定性,在训练时需要很长时间来预测出正确的offsets。

YOLOv2沿用了YOLOv1的方法,就是预测边界框中心点相对于对应cell左上角位置的相对偏移值。

为了将bounding box的中心点约束在当前cell中,使用sigmoid函数tx、ty归一化处理,将值约束在0~1,也就是下图的:σ(tx),σ(ty)这使得模型训练更稳定。

YOLOv2学习笔记_第6张图片

网络在最后一个卷积层输出13*13的feature map,有13*13个cell,每个cell有5个anchor box来预测5个bounding box,每个bounding box预测得到5个值。分别为:tx、ty、tw、th和to(类似YOLOv1的confidence)。

YOLOv2学习笔记_第7张图片

6.Fine-Grained Features(细粒度特征,其实就是多尺度特征融合)

这里添加了一个直通层(passthrough layer),即就是源码中的reorg layer将前面一层的26*26的特征图和本层13*13的特征图进行连接,与ResNet网络的shortcut类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。
在13*13的特征图上做预测,虽然对于大目标已经足够了,但对小目标不一定足够好,这里合并前面大一点的特征图可以有效的检测小目标。

具体操作:对于26*26*512的特征图,经passthrough层处理之后就变成了13*13*2048的新特征图(特征图大小变为1/4,而通道数变为以前的4倍),然后与后面的13*13*1024特征图连接在一起形成13*13*3072的特征图,最后在该特征图上卷积做预测。

注:passthrough layer,具体来说就是特征重排(不涉及到参数学习),前面26 * 26 * 512的特征图使用按行和按列隔行采样的方法,就可以得到4个新的特征图,维度都是13 * 13 * 512,然后做concat操作,得到13 * 13 * 2048的特征图。

7.Multi-Scale Training

YOLOv2中只有卷积层和池化层(无全连接),因此不需要固定的输入图片的大小。
为了让模型更有鲁棒性,作者引入了多尺度训练。就是在训练过程中,每迭代一定的次数,改变模型的输入图片大小。

注:这一步是在检测数据集上fine-tuning时候采用的,不要跟前面在Imagenet数据集上的两步预训练分类模型混淆。

具体操作:在训练时,每10epoch?网络就会随机选择另一种size的输入。

网络输入是416*416,经过5次max pooling之后会输出13*13的feature map,也就是下采样32倍,因此作者采用32的倍数作为输入的size,具体采用320、352、384、416、448、480、512、544、576、608共10种size。

输入图片大小为320*320时,特征图大小为10*10,输入图片大小为608*608时,特征图大小为19*19。每次改变输入图片大小还需要对最后检测层进行处理,然后开始训练。

这种网络训练方式使得相同网络可以对不同分辨率的图像做检测。

在输入size较大时,训练速度较慢,在输入size较小时,训练速度较快,而multi-scale training又可以提高准确率,因此算是准确率和速度都取得一个不错的平衡。

YOLOv2学习笔记_第8张图片


Darknet-19

网络包含19个卷积层5个max pooling层,而在YOLOv1中采用的GooleNet,包含24个卷积层和2个全连接层,因此Darknet-19整体上卷积卷积操作比YOLOv1中用的GoogleNet要少,这是计算量减少的关键。最后用average pooling层代替全连接层进行预测

YOLOv2学习笔记_第9张图片


 

 

你可能感兴趣的:(YOLOv2学习笔记)