【目标检测】YOLOv2 ,对YOLOv1的多种改进

一、YOLOv2简介

YOLOv1介绍:【目标检测】YOLOv1 ,one-stage 目标检测算法的开山之作

首先还是接着推荐这篇博客: 你一定从未看过如此通俗易懂的YOLO系列(从v1到v5)模型解读 (中) 这篇博客对于整个目标检测的思想和网络的改进思路讲的很好。

YOLOv2即YOLO9000,原论文是《YOLO9000: Better, Faster, Stronger》

YOLO2相比于YOLOv1主要有两个大方面的改进:

(1)使用一系列的方法对YOLO进行了改进,在保持原有速度的同时提升精度得到YOLOv2。

(2)提出了一种目标分类与检测的联合训练方法,同时在COCO和ImageNet数据集中进行训练得到YOLO9000,实现9000多种物体的实时检测。

二、目标检测模型的改进思路

可以认为:

检测模型 = 特征提取器 + 检测头

在YOLOv1的模型中检测头就是最后的2个全连接层(Linear Layers),它们是参数量最大的2个层,也是最值得改进的2个层。所以后面的YOLO模型都对这里进行改进。

YOLO v1一共预测49个目标,一共98个框。YOLOv1虽然速度快,但是预测的框不准确,主要有两个问题:

(1)预测的框不准确:准确度不足。
(2)很多目标找不到:recall不足。

以某种object为正类,其他类别为负类。召回率(recall)表示正确预测该 object的数量占该 object所有数量的比例。

我们一个问题一个问题解决,首先第1个:预测的框不准确。这个问题的解决方法参看“3.6 直接位置预测”。

问题2:很多目标找不到。这个问题的解决方法参看“3.5 anchor 维度聚类”。

三、YOLOv2的改进之处

YOLOv2 在 YOLOv1的基础上的几种改进策略如下:
在这里插入图片描述
详细介绍各个改进策略:

3.1 批归一化(Batch Normalization,BN)

YOLOv2 在每个卷积层之后加了BN层,去掉Dropout。BN层可以起到一定的正则化效果,提升模型收敛速度,防止模型过拟合。YOLOv2通过使用BN层使得MAP( Mean Average Precision )提高了2%.

3.2 高分辨率的分类器(hi-res classifier)

目前的大部分检测模型都会使用主流分类网络(如VGG、Resnet等)在ImageNet 上的预训练模型作为特征提取器,而这些网络都是小于256*256分辨率的图片作为输入进行训练的,低分辨率会影响模型检测能力。

YOLOv2将输入图片的分辨率提升至448x448,为了使网络适应新的分辨率,YOLOv2先在ImageNet上以448x448的分辨率对网络进行10个epoch的微调,让网络适应高分辨率的输入。通过使用高分辨率的输入,YOLOv2的MAP提升了约4%。

3.3 与锚框进行卷积(Convolutional With Anchor Boxes)

YOLOv1利用全连接层直接对边界框进行预测,导致丢失较多空间信息,定位不准。YOLOv2去掉了YOLOv1中的全连接层,使用Anchor Boxes预测边界框,同时为了得到更高分辨率的特征图,YOLOv2还去掉了一个池化层。

由于图片中的物体都倾向于出现在图片的中心位置,若特征图恰好有一个中心位置,利用这个中心位置预测中心点落入该位置的物体,对这些物体的检测会更容易。所以总希望得到的特征图的宽高都为奇数。

YOLOv2通过缩减网络,使用416x416的输入,模型下采样的总步长为32,最后得到13x13的特征图,然后对13x13的特征图的每个cell预测5个anchor boxes,对每个anchor box预测边界框的位置信息、置信度和一套分类概率值。

使用anchor boxes之后,YOLOv2可以预测 13x13x5=845个边界框(YOLOv2可以预测 7x7x2=98个边界框),模型的召回率由原来的81%提升到88%,MAP由原来的69.5%降低到69.2%.召回率提升了7%,准确率下降了0.3%。

3.4 新的网络 Darknet-19(new network)

YOLOv2采用 Darknet-19网络,其网络结构(以输入图片尺寸为416*416为例)以及YOLOv2整体的网络结构如下图所示:
        

在这里插入图片描述
        

Darknet-19 包括19个卷积层和5个max pooling层,主要采用3x3卷积和1x1卷积。这里1x1卷积可以压缩特征图通道数以降低模型计算量和参数,每个卷积层后使用BN层以加快模型收敛同时防止过拟合。最终采用global avg pool (全局池化)做预测。采用YOLOv2,模型的MAP值没有显著提升,但计算量减少了。

3.5 anchor 维度聚类(dimension priors)

我们首先回顾一下Faster RCNN,经典目标检测算法:RCNN、Fast RCNN、 Faster RCNN 基本思想和网络结构介绍 Faster RCNN中引入了anchor,特征图中的每个位置在原图中生成9个anchor(3种面积和3种长宽比,3*3=9)。

也就是说在Faster R-CNN和SSD中,先验框都是手动设定的,带有一定的主观性。虽说在训练过程中网络也会学习调整boxes的宽高维度,最终得到准确的bounding boxes。但是如果能够一开始就选择了更好的、更有代表性的先验 boxes尺寸,那么网络就应该更容易学到准确的预测位置。

在YOLOv1中,生成每个网格生成2个框,导致其总体预测精度不高。也就是说2个框不够,9个框可能略多,因为计算时间太长,注意是可能,因为我们现在还没有别的方案做对比。那么如何选择合适有效的anchor数量呢?YOLOv2采用的方法是聚类。

YOLOv2采用 k-means聚类算法对 训练集中标注的 ground truth boxes做聚类分析,boxes之间的IOU值作为聚类指标,找到 ground truth boxes的统计规律,从而自动找到更好的boxes尺寸。以聚类个数k为 anchor 个数,也就是说一个特征图的点在原图中在生成5个特点尺寸的 anchor,YOLOv2最终生成 13x13 分辨率的特征图,所以会生成13x13x5=845个anchor(一个anchor就是一个候界框)。

那么为什么选取聚类数 k=5呢?作者综合考虑了模型复杂度和召回率,最终选择5个聚类中心,得到5个先验框。作者发现其中中扁长的框较少,而瘦高的框更多,更符合行人特征。通过对比实验,发现用聚类分析得到的先验框比手动选择的先验框有更高的平均IOU值,这使得模型更容易训练学习。

3.6 直接位置预测(Direct location prediction)

Faster R-CNN使用anchor boxes预测边界框相对先验框的偏移量,由于没有对偏移量进行约束,每个位置预测的边界框可以落在图片任何位置,甚至回归之后的anchor可能会超过对应的网格范围。会导致模型不稳定,加长训练时间。

YOLOv1直接预测x,y,w,h等参数,范围比较大,现在我们想预测一个稍微小一点的值,来增加准确度。

YOLOv2根据所在网格单元的位置来预测坐标。设一个网格相对于图片左上角的偏移量是cx和cy,先验框的宽度和高度分别是pw和ph,则预测的边界框相对于特征图的中心坐标(bx,by)和宽高bw、bh的计算公式如下图所示。

        

其中各个变量的含义如下:

        
在这里插入图片描述
公式中的 σ \sigma σ() 表示 sigmoid函数,将网络预测结果(tx,ty,tw,th)输入到sigmoid函数中,使输出结果介于0到1之间。这样模型最终得到的检测框的中心点一定在对应的网格中,不会偏的太远。

YOLOv2结合anchor 聚类, 通过对边界框的位置预测进行约束,使模型更容易稳定训练,使得模型的MAP值提升了约5%。

3.7 细粒度特征(Fine-Grained Features)

YOLOv2借鉴SSD使用多尺度的特征图做检测,提出pass through层将高分辨率的特征图与低分辨率的特征图联系在一起,从而实现多尺度检测。YOLOv2提取Darknet-19最后一个max pool层的输入,得到26x26x512的特征图。经过1x1x64的卷积以降低特征图的维度,得到26x26x64的特征图,然后经过pass through层的处理变成13x13x256的特征图(抽取原特征图每个2x2的局部区域组成新的channel,即原特征图大小降低4倍,channel增加4倍),再与13x13x1024大小的特征图连接,变成13x13x1280的特征图,最后在这些特征图上做预测。使用Fine-Grained Features,YOLOv2的性能提升了1%.

3.8 多尺度训练(Multi-Scale Training)

YOLOv2中使用的Darknet-19网络结构中只有卷积层和池化层(没有全连接层),所以其对输入图片的大小没有限制。YOLOv2采用多尺度输入的方式训练,在训练过程中每隔10个batches,重新随机选择输入图片的尺寸。由于Darknet-19下采样总步长为416/13=32,输入图片的尺寸一般选择32的倍数{320,352,…,608}。

采用Multi-Scale Training, 可以适应不同大小的图片输入,当采用低分辨率的图片输入时,mAP值略有下降,但速度更快,当采用高分辨率的图片输入时,能得到较高mAP值,但速度有所下降。

3.9 高分辨率探测器(Hi-res Detector)

YOLOv2调整网络后能适应多种尺寸的输入图像,通常使用416 * 146大小的输入图像。若采用较高分辨率的输入图像,比如 608 * 608,则MAP可以提升1.8%

3.10 总结

YOLOv2借鉴了很多其它目标检测方法的一些技巧,如Faster R-CNN的anchor boxes, SSD中的多尺度检测。除此之外,YOLOv2在网络设计上做了很多tricks,使它能在保证速度的同时提高检测准确率,Multi-Scale Training更使得同一个模型适应不同大小的输入,从而可以在速度和精度上进行自由权衡。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ctrl A_ctrl C_ctrl V

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值