2021SC@SDUSC
前言
为了对yolov5有更好的理解,在分析yolov5的代码中间我会穿插yolo系列其它的理论讲解,本篇介绍yolov2.
yolov2论文https://arxiv.org/abs/1612.08242
yolov1作为one-stage目标检测的开山之作,速度快是一大优势,可以实时完成,但是由于定位不够准确,recall较低,因此yolov2在其基础上做了改进
Batch Normalization
batch normalization是对一个batch里的数据按维度进行normalization
上图是一个3*3的矩阵,BN就是对(1,1),(2,1),(3,1)的数据进行归一化,而另一种normalization为layer normalization则是对一个向量归一化,即对(1,1),(2,1),(3,1)的数据归一化
在网络中加入BN层可以加速网络的收敛,yolov2在每个卷积层后都加入了BN层,省去了Dropout,使mAP提升了2.4个点
Hight resolution classifier
由于主流的backbone网络都是在imagenet数据集上进行训练的,而imagenet数据集的图片像素是224*224,在检测时分辨率是448*448,因此yolov2就在imagenet数据集上以448*448的分辨率预训练10个epoch进行微调,使网络适应高分辨率的输入,使mAP提升了4个点
Convolution with Anchor Boxes
在yolov1中是直接使用全连接层来预测box的坐标,而同时期另一种目标检测算法Faster R-CNN则是通过RPN来预测anchor boxes的位置偏移(offset)和置信度的,由于offset比较小,预测offset比直接预测坐标要容易一些,因此在yolov2中去掉了全连接层并且使用anchor boxes来预测box。
Dimension Clusters
使用anchor就会有一个问题,怎么确定anchor的维度,在Faster R-CNN中是通过人工手动设定的,设定的好那么效果自然好,反之效果就差,我们并不想要这样。因此在yolov2中通过k-means聚类方法对训练集中的边框做了聚类。设置anchor的目的是要让预测框与GT的IOU更好,因此在聚类中使用box与聚类中心box之间的IOU指作为距离指标
下图为在VOC和COCO数据集上的聚类分析结果,随着聚类中心数目的增加,平均IOU值增加,但考虑到模型复杂度和recall,最终选取5个聚类中心作为anchor
Direct location prediction
使用anchor的第二个问题就是预测box的位置导致模型初期迭代不稳定,Faster R-CNN的位置预测公式为
,是预测边框的中心, ,是anchor的中心坐标,,是anchor的宽和高,,是要学习的参数。由于,的取值没有任何约束,因此box的中心可能出现在任何位置,在训练时需要很长时间来预测出正确的offsets。
yolov2则预测box中心点相对于cell左上角位置的offsets,公式为
其中,是box的中心和宽高,是box的置信度,这里对预测参数进行变换后作为置信度的之。为对应cell的左上角坐标,如下图,由于sigmoid函数的处理,box的中心坐标会约束在当前cell内部防止偏移。是anchor的宽和高。是要学习的参数,分别用于预测box的中心和宽高、置信度。
Darknet-19
yolov2的backbone采用darknet-19,其网络结构如图
Fine-Grained Features
yolov2输入为416*416,5次池化输出为13*13*1024,对于小目标多次卷积池化后特征不明显,因此需要更精细的特征图。yolov2引入一种称为passthrough层的方法在特征图中保留一些细节信息。
Multi-Scale Training
在yolov2中没有全连接层,只有卷积层和池化层,因此网络可以接受任意尺寸的输入,yolov2用了不同size的样本来训练网络。在训练过程中每隔一定的iteration之后改变模型的输入图片大小,选择的尺寸都是32的倍数。
总结
yolov2借鉴了很多其它目标检测方法的技巧,最终在保证速度的同时可以提高检测准确率。
部分内容摘抄自