目标检测算法YOLO2论文详解

论文题目:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

论文地址:https://arxiv.org/pdf/1612.08242v1.pdf

 

相对于YOLO1,YOLO2提出了很多方案改进网络的性能,比如

(1)批正则化数据

(2)用更高的分辨率以适应小图像的检测

(3)用prior boxes作为参考系让学习更容易

(4)用k-mean 聚类算法自己决定每个网格更适合的anchor box个数

(5)限制预测偏移量范围在0-1之间使得模型更稳定

(5)训练过程中改变输入图像的size以适应不同分辨率物体的检测

(6)联合分类和检测数据集使其可以检测出超过9000种类的物体等等

(7)去掉最后一个池化层,得到高分辨率的输出,虽然精度下降,但可以预测更多的框。

同时,它使用的使自己的网络DarkNet-19而不是VGG。

 

一、论文解读

1、YOLO2解决了大部分目标检测模型只预测很少类别物体的限制,可以检测出超过9000种不同类别的数据(YOLO1仅20种)

大部分目标检测模型都只能预测很少类别的物体,主要是标注目标数据集太昂贵了,不可能达到图像分类数据集的规模。YOLO2提出一种联合训练算法,可以利用有大量数据的分类数据集ImageNet扩大目标检测系统检测的数据范围利用有标签的目标检测数据集COCO去学习精确地定位物体的位置,同时使用大型分类数据集ImageNet来增加它的泛化能力。

 

2、YOLO2提出了很多改进算法改善目标检测模型的表现,如下图:

目标检测算法YOLO2论文详解_第1张图片

 

3、改进算法一:batch normalization

BN不仅对输入层做标准化处理,还对网络的每一个输入层做标准化处理。相当于把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0,方差为1的标准正态分布。这样做的好处是:

(1)可以让梯度变大,避免梯度消失问题。

(2)梯度变大意味着学习收敛速度更快,可以加快训练速度。

(3)提高模型泛化能力,因为批量标准化不是应用在整个数据集,所以会产生一些噪声,从而提高模型的泛化能力。

 

4、改进算法二:高分辨率训练分类网络

YOLO在ImageNet上训练分类器的输入图像尺寸为224*224,而在训练目标检测器时,将分辨率提高到448*448,所以YOLO需要同时做目标检测和适应新的分辨率。YOLO2提出,可以先用448*448分辨率的图像在ImageNet上训练10个迭代去微调分类网络,这使得我们的目标检测网络更好的适应高分辨率的输入。

 

5、改进算法三:借鉴RPN的anchor boxes,有先验知识,网络学习更容易

YOLOv1最后采用的是全连接层直接对边界框进行预测,其中边界框的宽与高是相对整张图片大小的,而由于各个图片中存在不同尺度和长宽比的物体,没有参考系,在训练过程中学习适应不同物体的形状是比较困难的,这也导致它在精确定位方面表现较差。

而Faster RCNN使用anchor,只要预测偏移量(预测值和anchor box之间的偏移量)即可,RPN对CNN特征提取器得到的特征图(feature map)进行卷积来预测每个位置的边界框以及置信度(是否含有物体),并且各个位置设置不同尺度和比例的先验框,RPN预测的是边界框相对于先验框的offsets值,采用先验框使得模型更容易学习。

YOLOv2借鉴了RPN网络的先验框(anchor boxes,prior boxes)策略。YOLOv2移除了YOLOv1中的全连接层而采用了卷积和prior boxes来预测边界框,有了参考系学习起来更容易。

(1)去掉了一个pooling层使得卷积网络得到高分辨率的输出,此时特征图大小为14*14。

(2)缩小网络图像大小改为416*416(原来是448*448)。这样做是为了在特征图上可以有奇数个网格位置,维度是奇数,这样保证物体的中心恰好只有一个中心网格。尤其是大的物体的中心,往往会占用多个网格,我们希望用一个网格预测它而不是多个。YOLO卷积层下采样是除以32(5次max pooling 2^5=32),所以输入图像是416,这样feature map就可以得到13*13的网格了。

(3)和YOLO一样,使用预测框与真值的IoU,也使用类条件概率(类别概率*置信度)。

使用anchor boxes的YOLO2在精确度上有微弱降低,但是却能预测超过1000个boxes,而YOLO只有98个(7*7*2)。

 

6、改进算法四:用k-mean聚类算法,自动选取更合适的先验框维度

k-means算法以数据间的距离作为数据对象相似性度量的标准,通过聚类分析将数据聚合成几个群体,属于无监督学习。k-means详细内容参见博客:https://blog.csdn.net/qq_32172681/article/details/99464656

在使用有anchor boxes的YOLO时,遇到两个问题,第一个就是anchor box的维度(长和宽)需要手动指定,带有一定的主观性。如果选取的先验框维度比较合适,那么模型更容易学习,从而做出更好的预测。所以我们采用k-means聚类算法让bounding boxes自动选取更合适先验框的维度(长和宽),作出更快更好的预测。

评判类之间距离的标准不能是标准的欧式距离,因为它会让大boxes比小boxes产生更多的错误。因此,自定义距离矩阵为:,centroid是聚类时被选作中心的边框,box就是其它边框,d就是两者间的“距离”。IOU越大,“距离”越近。。经过实验,我们发现k=5(聚类个数为5)可以使模型复杂度和recall之间取一个折中。

 

7、改进算法五:将预测的偏移量限制在一个网格范围内,模型更稳定

在使用有anchor boxes的YOLO时,遇到的第二个问题是,模型不稳定,尤其是在早期迭代的时候,大部分的不稳定性来源于box的位置(x,y)的预测,因为它预测的是预测框和anchor box的偏移量,预测值t和anchor box的坐标(x,y)的计算公式如下:

目标检测算法YOLO2论文详解_第2张图片其中tx、ty为归一化后的预测框和anchor box的距离,tx*wa就是真正距离,距离 = 预测框 - anchor box,

(此处公式是不是应该是加号~)如果tx=1,就意味着把框整体右移了一个anchor box的宽度,任何anchor box都可以移动到图像位置,随机初始化模型会需要很长时间才能稳定。

YOLO2没有像RPN一样,直接预测先验框anchor box和预测框bounding box的偏移量,而是像YOLO一样,预测的是预测框中心相对于网格单元的偏移量,YOLO2使用logistic激活函数将网络的预测值(预测框中心相对于网格单元的偏移量)限制在0-1范围内,这样可以保证预测框偏移量不会超过一个网格,模型更稳定。特征图上每个网格预测5个(k-means中的k=5)bounding boxes(piror boxes),网格为每个bounding boxes预测5个值:tx、ty、tw、th、to。设图像左上角坐标偏移网格左上角坐标为cx、cy,且piror bounding(模板框)的高、宽为ph、pw,则预测框的中心坐标为:

目标检测算法YOLO2论文详解_第3张图片

如图所示:

目标检测算法YOLO2论文详解_第4张图片

 

8、改进算法六:提出passthrough层,有利于小目标的检测

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

YOLOv2提出了一种passthrough层来利用更精细的特征图。YOLOv2所利用的Fine-Grained Features是 26*26 大小的特征图(最后一个maxpooling层的输入),对于Darknet-19模型来说就是大小为 26*26*512 的特征图。passthrough层与ResNet网络的shortcut类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。前面的特征图维度26x26是后面的特征图13*13的2倍,passthrough就是把26x26x512的图像直接分成四部分, LT, RT, LB, RB, 然后再串联形成一个13x13x2048的feature map, 与后面的 13*13*1024 特征图连接在一起形成 13*13*3072 大小的特征图,有利于小目标的检测。

 

9、改进算法六:Multi-Scale Training

YOLO2输入图像的尺寸是416*416,它希望能够提高网络对不同分辨率图像做目标检测的速度和robust。方法就是不固定输入图像的大小(FCN网络),每隔一些迭代就改变一下输入图像的大小,再继续训练。因为我们的网络下采样需要除以因子32,所以要在32的倍数中随机选择(320、352、...、608)。

 

10、网络模型(自己的模型) : Darknet-19

与vgg模型类似,主要使用3×3过滤器,并在每个池化步骤后将通道数增加一倍。在对网络中的网络(NIN)进行研究之后,使用全局平均池化(一个feature map 全局平均池化后得到一个值,会少很多参数)。预测,并使用1×1过滤器压缩3×3个卷积之间的特征表示。使用批量规范BN化来稳定训练,加速收敛,并规范化模型。最终模型,称为darknet-19,有19个卷积层和5个最大池层。网络结构如下:

目标检测算法YOLO2论文详解_第5张图片

 

11、Training for classification

使用随机梯度下降,起始学习率为0.1、多项式衰减速率0.1的4次方、权重衰减率为0.0005、动量为0.9,在标准ImageNet 1000类分类数据集上对网络进行了160个epoch的训练。在训练期间,使用标准的数据增强技巧,包括随机作物、旋转、色调、饱和度和曝光偏移。如上所述,在对224×224的图像进行初步训练后,对网络进行了更大尺寸的微调,即448*448。对于这个微调,使用上面的参数进行训练,但只训练10个epoch,以0.001的学习速率开始。

 

12、目标检测网络模型

删除最后一个卷积层,添加3个3×3卷积层,每个3*3卷积层后面跟着一个1*1卷积层,每个卷积层有1024个filter,最后一层的1*1的卷积层filter个数等于网络输出个数,来修改该网络进行检测任务。再添加一个从最后一个3×3×512层到倒数第二个卷积层3*3*1024的passthrough layer,这样模型就可以使用细粒度特征。对网络进行了160个epoch的训练,起始学习率为0.001,在第60和90个eopch分别将其除以10。

 

13、混合分类和检测数据集,对分类和检测任务进行联合训练

YOLO2提出一种联合训练机制,混合来自检测和分类数据集的图像进行训练。当网络看到标记为检测的图像时,基于完整的yolov2损失函数进行反向传播。当它看到一个分类图像时,只从特定于分类的部分反向传播损失。使用WordTree方法组合数据集,将COCO检测数据集和完整ImageNet发行版的前9000个类组合,创建我们的组合数据集。ImageNet是一个大得多的数据集,因此我们通过对COCO进行过采样来平衡数据集,以便ImageNet只比4:1大一点。通过这项联合训练,Yolo9000学会了使用Coco中的检测数据在图像中查找目标,并学会了使用ImageNet中的数据对各种各样的目标进行分类。

 

参考文章地址:https://blog.csdn.net/hai_xiao_tian/article/details/80472419

你可能感兴趣的:(图像处理,paper阅读,YOLO2)