目标检测之YOLO2

前言

YOLO2的全称为“YOLO9000: Better, Faster, Stronger”,是不是感觉契合着奥运会精神更高、更快、更强。

Better方面:使用了一系列的技巧对原来的YOLO多目标检测框架进行了改进,在保持原有速度的优势之下,精度上得以提升。

Fasterf方面:使用自定义的Darknet网络进行特征提取。

Stronger方面:提出了一种目标分类与检测的联合训练方法,通过这种方法,YOLO2可以同时在COCO和ImageNet数据集中进行训练,训练后的模型可以实现多达9000种物体的实时检测。

接下来分别对上述方面进行介绍。

Better

总览图如下;

 可见作者利用一系列的技巧将mAP 63.4提升到78.6。

Batch Normalization

CNN在训练过程中每层输入的分布一直在改变, 会使训练难度加大,可以通过normalize每层的输入解决。YOLO2在每一个卷积层后添加batch normalization,通过这一方法,mAP获得了2%的提升。batch normalization 也有助于规范化模型,可以在舍弃dropout优化后依然不会过拟合。

High Resolution Classifier

之前的目标检测方法中,基本上都会使用ImageNet预训练过的分类模型来提取特征,如果用的是AlexNet网络,那么输入图片会被resize到不足256 * 256,导致分辨率不够高,给检测带来困难。所以YOLO1先以分辨率224*224训练分类网络,然后增加分辨率到448*448,进行检测。所以作者想能不能在预训练的时候就把分辨率提高了,训练的时候只是由分类算法切换为检测算法。

对于YOLOv2,作者首先对分类网络(自定义的Darknet)进行了fine tune,分辨率改成448 * 448,在ImageNet数据集上训练10轮(10 epochs),训练后的网络就可以适应高分辨率的输入了。然后,作者对检测网络部分(也就是后半部分)也进行fine tune。这样通过提升输入的分辨率,mAP获得了4%的提升。

Convolutional With Anchor Boxes

YOLO1使用全连接层数据进行bounding box预测(要把1470*1的全连接层reshape为7*7*30),这会丢失较多的空间信息定位不准。YOLO2借鉴了之前介绍过的Faster R-CNN中anchor思想: 在卷积特征图上进行滑窗采样,每个像素预设9种不同大小和比例的建议框。由于都是卷积不需要reshape,很好的保留的空间信息。

具体做法如下:

  • 去掉最后的池化层确保输出的卷积特征图有更高的分辨率。
  • 缩减网络,让图片输入分辨率为416 * 416,目的是让后面产生的卷积特征图宽高都为奇数,这样就可以产生一个center cell。因为作者观察到,大物体通常占据了图像的中间位置,可以只用一个中心的cell来预测这些物体的位置,否则就要用中间的4个cell来进行预测,这个技巧可稍稍提升效率。
  • 使用卷积层降采样(factor 为32),使得输入卷积网络的416 * 416图片最终得到13 * 13的卷积特征图(416/32=13)。
  • 把预测类别的机制从网格中解耦,由anchor box同时预测类别和坐标。因为YOLO是由每个网格来负责预测类别,每个网格对应的2个bounding box 负责预测坐标(回想YOLO中 最后输出7*7*30的特征,每个网格对应1*1*30,前10个是2个bounding box用来预测坐标,后20个表示该网格属于20个类别的条件概率) 。YOLO2中,不再让类别的预测与每个网格绑定一起,而是让全部放到anchor box中。下面是特征维度示意图(仅作示意并非完全正确)

加入anchor boxes后,结果是召回率上升,准确率下降。我们来计算一下,假设每个网格预测9个建议框,那么总共会预测13 * 13 * 9 = 1521个boxes,而之前的网络仅仅预测7 * 7 * 2 = 98个boxes。具体数据为:没有anchor boxes,模型recall为81%,mAP为69.5%;加入anchor boxes,模型recall为88%,mAP为69.2%。这样看来,准确率只有小幅度的下降,而召回率则提升了7%。

Dimension Clusters

作者在使用anchor的时候遇到了两个问题,第一个是anchor boxes的宽高维度往往是精选的先验框(hand-picked priors),虽说在训练过程中网络也会学习调整boxes的宽高维度,最终得到准确的bounding boxes。但是,如果一开始就选择了更好的、更有代表性的先验boxes维度,那么网络就更容易学到准确的预测位置。

解决办法就是统计学习中的K-means聚类方法,通过对数据集中的ground true box做聚类,找到ground true box的统计规律。以聚类个数k为anchor boxs个数,以k个聚类中心box的宽高维度为anchor box的维度。

如果按照标准k-means使用欧式距离函数,大boxes比小boxes产生更多error。但是,我们真正想要的是产生好的IOU得分的boxes(与box的大小无关)。因此采用了如下距离度量:

聚类分析结果如下:

 

左图: 随着k的增大,IOU也在增大(高召回率),但是复杂度也在增加。所以平衡复杂度和IOU之后,最终得到k值为5。

右图:5聚类的中心与手动精选的boxes是完全不同的,扁长的框较少瘦高的框较多。

Direct location prediction

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

在RPN中会预测坐标就是预测tx,ty。对应的中心点(x,y)按如下公式计算:

x=(t_x*w_a)+x_a, \; y=(t_y*h_a)+y_a

可见预测tx=1就会把box向右移动anchor box的宽度,预测tx=-1就会把box向左移动相同的距离。

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

这个公式没有任何限制,无论在什么位置进行预测,任何anchor boxes可以在图像中任意一点。模型随机初始化之后将需要很长一段时间才能稳定。因此作者没有采用这种方法,而是预测相对于grid cell的坐标位置,同时把ground truth限制在0到1之间(利用logistic激活函数约束网络的预测值来达到此限制)。

最终,网络在特征图(13 *13 )的每个网格上预测5个bounding boxes,每一个bounding box预测5个坐标值:tx,ty,tw,th,to。如果这个网格距离图像左上角的边距为(cx,cy)以及该网格对应的box维度(bounding box prior)的长和宽分别为(pw,ph),那么对应的box为:

 

约束了位置预测的范围,参数就更容易学习,模型就更稳定。使用Dimension Clusters和Direct location prediction这两项anchor boxes改进方法,mAP获得了5%的提升。

Fine-Grained Features

修改后的网络最终在13 * 13的特征图上进行预测,虽然这足以胜任大尺度物体的检测,如果用上细粒度特征的话可能对小尺度的物体检测有帮助。YOLO2添加了一个 passthrough layer,把浅层特征图(分辨率为26 * 26)连接到深层特征图。具体来说就是特征重排,前面26 * 26 * 512的特征图使用按行和按列隔行采样的方法,就可以得到4个新的特征图,维度都是13 * 13 * 512,然后做concat操作,得到13 * 13 * 2048的特征图,将其拼接到后面的层,相当于做了一次特征融合,有利于检测小目标。
Multi-Scale Training

原来得YOLO网络使用固定的448 * 448的图片作为输入,加入anchor boxes后输入变成416 * 416,由于网络只用到了卷积层和池化层,就可以进行动态调整(检测任意大小图片)。为了让YOLO2对不同尺寸图片的具有鲁棒性,在训练的时候也考虑了这一点。不是固定输入图片尺寸,每经过10批训练(10 batches)就会随机选择新的图片尺寸。网络使用的降采样参数为32,于是使用32的倍数{320,352,…,608},最小的尺寸为320 * 320,最大的尺寸为608 * 608。 调整网络到相应维度然后继续进行训练。这种机制使得网络可以更好地预测不同尺寸的图片,同一个网络可以进行不同分辨率的检测任务,在小尺寸图片上YOLO2运行更快,在速度和精度上达到了平衡。

faster

YOLO2使用了一个新的分类网络Darknet进行特征提取,包含19个卷积层、5个最大值池化层,处理一张照片需要55.8亿次运算,相对于VGG-16的306.9亿次浮点数运算。

网络结构如下:

训练网络进行分类

使用Darknet-19在标准1000类的ImageNet上训练了160次,用随机梯度下降法,starting learning rate 为0.1,polynomial rate decay 为4,weight decay为0.0005 ,momentum 为0.9。训练的时候仍然使用了很多常见的数据扩充方法(data augmentation),包括random crops, rotations, and hue, saturation, and exposure shifts。

初始的224 * 224训练后把分辨率上调到了448 * 448,使用同样的参数又训练了10次,学习率调整到了10^{-3}。高分辨率下训练的分类网络top-1准确率76.5%,top-5准确率93.3%。

训练网络进行检测

为了把分类网络改成检测网络,去掉原网络最后一个卷积层,增加了三个 3 * 3 (1024 filters)的卷积层,并且在每一个卷积层后面跟一个1 * 1的卷积层。

对于VOC数据集,预测5种anchor box,每个box包含4个坐标值和1个置信度和20个类别,所以总共是5 * (5+20)= 125个输出维度。

 

也添加了passthrough layer,从最后3 * 3 * 512的卷积层连到倒数第二层,使模型有了细粒度特征。

学习策略是:先以10^{-3}的初始学习率训练了160次,在第60次和第90次的时候学习率减为原来的十分之一。weight decay为0.0005,momentum为0.9,以及类似于Faster-RCNN和SSD的数据扩充(data augmentation)策略: random crops, color shifting, etc。使用相同的策略在 COCO 和VOC上训练。

 stronger

使用联合训练方法,结合wordtree方法,使YOLO2的检测种类扩充到了上千种。

总结

YOLO2较YOLO1实现了更好、更快、更强。此后的YOLO3也是在此基础上做了轻微改动,下节将要介绍YOLO3.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值