目录
YOLOv2创新点
☆Batch Normalization
High Resolution Classifier (高分辨率图像微调主干网络)
☆使用 anchor box 先验框
☆New Network:Darknet-19
Dimension Clusters(聚类提取先验框的尺度信息)
Direct location prediction(约束预测边框的位置)
Fine-Grained Features (细粒度特性)
Multi-Scale Training(多尺度训练)
YOLOv2 存在的问题
YOLOv1 虽然检测速度快,但在定位方面不够准确,并且召回率较低。为了提升定位准确度,改善召回率,YOLOv2 在 YOLOv1 的基础上提出了几种改进策略
YOLOv2-1
YOLOv2 中在每个卷积层后加 Batch Normalization (BN) 层,去掉 dropout。BN 层可以起到一定的正则化效果,能提升模型收敛速度,防止模型过拟合。YOLOv2 通过使用 BN 层使得 mAP 提高了 2%。
目前的大部分检测模型都会使用主流分类网络(如 vgg、resnet)在 ImageNet 上的预训练模型作为特征提取器,而这些分类网络大部分都是以小于 256x256 的图片作为输入进行训练的,低分辨率会影响模型检测能力。YOLOv2 将输入图片的分辨率提升至 448x448,为了使网络适应新的分辨率,YOLOv2 先在 ImageNet 上以 448x448 的分辨率对网络进行 10 个 epoch 的微调,让网络适应高分辨率的输入。通过使用高分辨率的输入,YOLOv2 的 mAP 提升了约 4%。
YOLOV1包含有全连接层,从而能直接预测Bounding Boxes的坐标值。 Faster R-CNN的方法只用卷积层与Region Proposal Network来预测Anchor Box的偏移值与置信度,而不是直接预测坐标值。作者发现通过预测偏移量而不是坐标值能够简化问题,让神经网络学习起来更容易。
YOLOv2 去掉了 YOLOv1 中的全连接层,使用Anchor Boxes 预测边界框,同时为了得到更高分辨率的特征图,YOLOv2 还去掉了一个池化层。YOLOv2通过缩减网络,使用416x416的输入,模型下采样的总步长为 32,最后得到 13x13 的特征图,然后对 13x13 的特征图的每个 cell 预测 5 个 anchor boxes,对每个 anchor box 预测边界框的位置信息、置信度和一套分类概率值。使用 anchor boxes 之后,YOLOv2 可以预测 13x13x5=845 个边界框,模型的召回率由原来的 81% 提升到 88%,mAP 由原来的 69.5% 降低到 69.2%;召回率提升了 7%,准确率下降了 0.3%。
YOLOv2 采用 Darknet-19,其网络结构如下图所示,包括19个卷积层和5个max pooling 层,主要采用3x3卷积和 1x1 卷积,这里 1x1 卷积可以压缩特征图通道数以降低模型计算量和参数,每个卷积层后使用BN层以加快模型收敛同时防止过拟合。最终采用global avg pool做预测。
Darknet-19只需要55.8亿次操作就可以处理一张图像,但在ImageNet上却可以达到72.9%的top-1精度和91.2%的top-5精度。优点是计算量小精度高。YOLOv2采用Darknet-19作为基网络,减少了模型的计算量。
在 Faster R-CNN 和 SSD 中,先验框都是手动设定的,带有一定的主观性。YOLOv2 采用 k-means 聚类算法对训练集中的边界框做了聚类分析,寻找尽可能匹配样本的边框尺寸。选用 boxes 之间的 IOU 值作为聚类指标。综合考虑模型复杂度和召回率,最终选择 5 个聚类中心,得到 5 个先验框,发现其中扁长的框较少,而瘦高的框更多,更符合行人特征。通过对比实验,发现用聚类分析得到的先验框比手动选择的先验框有更高的平均 IOU 值,这使得模型更容易训练学习。
YOLOv2 对边界框的位置预测进行约束,将预测边框的中心约束在特定gird网格内,使模型更容易稳定训练,这种方式使得模型的mAP值提升了约 5%。
目标检测面临的一个问题是图像中对象会有大有小,输入图像经过多层网络提取特征,最后输出的特征图中(比如YOLO2中输入416*416经过卷积网络下采样最后输出是13*13),较小的对象可能特征已经不明显甚至被忽略掉了。为了更好的检测出一些比较小的对象,最后输出的特征图需要保留一些更细节的信息。
YOLO2引入一种称为passthrough层的方法在特征图中保留一些细节信息。具体来说,就是在最后一个pooling之前,特征图的大小是26*26*512,将特征图尺寸1拆4(26*26拆分成4个13*13),直接传递(passthrough)到pooling+conv后的特征图,然后两者叠加到一起作为输出的特征图。使用 Fine-Grained Features,YOLOv2 的性能提升了 1%.
YOLOv2 使用的 Darknet-19 网络结构中只有卷积层和池化层,所以其对输入图片的大小没有限制。YOLOv2 采用多尺度输入的方式训练,在训练过程中每隔 10 个 batches , 重新随机选择输入图片的尺寸,由于Darknet-19下采样总步长为32,输入图片的尺寸一般选择32的倍数 {320,352,…,608}。
采用 Multi-Scale Training, 可以适应不同大小的图片输入。当采用低分辨率的图片输入时,mAP值略有下降但速度更快;当采用高分辨率的图片输入时,能得到较高mAP值,但速度有所下降。
YOLOv2 借鉴了很多其它目标检测方法的一些技巧,如 Faster R-CNN 的 anchor boxes, SSD 中的多尺度检测。除此之外,YOLOv2 在网络设计上做了很多 tricks, 使它能在保证速度的同时提高检测准确率,Multi-Scale Training 更使得同一个模型适应不同大小的输入,从而可以在速度和精度上进行自由权衡 。
YOLO v2 对 YOLO v1 的缺陷进行优化,大幅度高了检测的性能,但仍存在一定的问题,如无法解决重叠问题的分类等。