• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

yolov2论文初读笔记

互联网 diligentman 3天前 4次浏览
概括:

yolov2论文主要根据yolov1体现的一些缺点和局限性作出了一些改进:论文称达到了better、fatser、stronger
yolov2论文初读笔记
从上图可以看出yolov2做的优化改进以及对应提升的mAP。
(题外话:mAP是衡量目标检测准确度的指标:越高越精准,这个定义解释复杂点,可另件我的博文,FPS是衡量检测速度的指标:越高速度越快,理解成每秒可以处理多少帧/张图片)
下面从这些改进里逐个分析:
Batch Normalization:
简单解释一下Batch Normalization,下图是一个样本量为N,通道为C,尺寸WH的特征,注意蓝色区,可以简单理解成批归一化操作时该蓝色区块沿着通道方向移动,每次计算相同通道上特征的均值和方差,所以处理后会得到一个1C的均值向量和1*C的方差向量
yolov2论文初读笔记
有了上述概念,再用下图一个简单例子举例说明,假设用批归一化处理手写数字图片特征输入,有6个样本,特征通道是3,图片尺寸是2828,把每个通道的2828特征转为一维,则输入可以描述为(6,3,784),每个通道都有(6,784),经过Batch Normal处理得到均值向量u和方差向量sigema,如下图z公式处理,是的处理后的z满足N(0,1)分布,从而实现对特征的归一化处理
yolov2论文初读笔记
(此图引于视频https://www.bilibili.com/vide…)
批归一化操作有助于处理梯度零散的问题,并降低对一些参数的敏感性,对于参数很多的模型,对参数就很敏感,因此易发生过拟合的现象,所以批归一化处理同样对抑制过拟合有效果,因此yolov2在网络结构中增加了Batch Normalization层,因此替代了yolov1的dropout处理过拟合的解决方案,并且效果表现提升了超过2%mPA
高分辨率分类器:
这个需要先去了解:ImageNet的图像分类样本采用$ 224*224$ 作为输入,主流的目标检测算法包括yolo都会在ImagetNet进行预训练,所以预训练时图片输入尺寸只能是$224*224$,因为这样的分辨率相对较低,不利于检测模型,所以yolov1在检测图像时输入是448*448的输入,但是这样直接切换输入分辨率,不利于网络模型适应新分辨率输入,因此yolov2对此进行了改进。
改进方案:yolov2在ImageNet数据集上增加了一些448448的输入图片,先用224224的输入从头开始训练网络,大概160个epoch(循环训练所有数据160趟),再将输入调整到448448,训练10个epoch,这样网络能有时间去适应调整其过滤器,在这样渐进的过度下,yolov2在进行检测数据集上检测时,对于其448448的输入切换的反应就不会那么突然,适应性比较好,并且yolov2的网络结构在检测时仍然会进行微调。这样的处理论文表示提升了4%mAP。
采用先验框:
yolov1是从最后的卷积层输出经过全连接层处理直接得到的预测边框的坐标值和长宽,yolov2与之不同,yolov2网络结构去掉了全连接层,并采取了先验框的思路,从先验框中预测最后边框,这样处理后解决了yolov1定位误差大的缺点,召回率提升至88%,但是准确度下降了一点点0.2%mPA,相比起来还是值得的,一个grid有几个先验框是可以设定的,yolov2论文用实验表明设置5个最为合适。
维度聚类(来确定先验框):
作者发现使用先验框存在两个需要解决的问题:1是先验框如何确定,手工确定的方式显然不是最好的;2是模型存在不稳定问题;针对问题一yolov2交代了怎么确定先验框,与faster R-CNN等采取手工确定先验框不同,yolov2采用k-means聚类确定先验框,论文说到yolov2的先验框一开始就选择更好的先验框,再随着网络适应调整,这样可以使网络更快更好的学习到检测结果,这里先简单介绍一下k-means聚类:
yolov2论文初读笔记
yolov2论文初读笔记

已上图根据身高体重分成两类的例子为例介绍
步骤流程:
1、确定好分成k=2类;
2、确定初始化群中心点,如图中的蓝色和红色点;标准做法是计算每个点到两个群心的欧式距离,最小的举例则属于对应群心那类,已此方法重新聚类;
3、重新确定群中心点,重复2操作;
回到yolov2先验框的聚类确定,因为先验框对于我们来说真正关系的是他的置信度,或者是IOU,IOU越大说明这个先验框预测效果越好,IOU其实与先验框的尺寸没有关系,所以并不采用标准的欧式距离去聚类,而是根据公式:
$d(box,centroid)=1-IOU(box,centroid)$
上面说到yolov2先验框个数也就是k类选的是5,这里是作者将k值设定类很多种值实验得来的结果,因为在k>5以后虽然IOU更高,但是模型必然会随着k的增大而更复杂,计算量也更大,而k=5时已经有比较好的IOU,再此之后IOU升高速度也很慢,所以5是模型复杂度和高IOU的折衷取值。
yolov2论文初读笔记
看一下实验对比效果:
yolov2论文初读笔记
和yolov1一样,这里要解释一下最后输出的先验框里都含有那些张量,这里论文没有解释,yolov2最后输出是13*13,论文设置先验框k=5,和yolov1一样每个先验框含有(tx,ty,tw,th,confidence)五个张量,不同的是,yolov1的类别概率是一个grid有20个(因为voc数据集有20类),而yolov2是每个先验框含有C个类别概率,而不是根据grid计算,所以网络最后的总张量是$13*13*5*(5+C)$
直接位置预测:
这里是对先验框第二个问题的解决方案的回答,先解释一下为什么说模型存在不稳定的问题:
作者用SSD算法的bbox边框中心预测公式来作出解释:
yolov2论文初读笔记
式中(x,y)是要求的bbox的中心坐标,tx,ty是先验框相对于bbox中心的offset,先验框的位置是(xa,ya,wa,ha),因为tx,ty的取值在原公式里没有限制,这样会导致最终x,y的结果不在对应负责的那个grid cell内,这显然是不正确的,因此也是表现里此模型对于yolo来说这样处理的不稳定性,解决方案是首先将offset定义更改,改成相对于对应的那个grid的左上角的offset,tx,ty便是先验框中心点相对于所在grid左上角的偏置量,(tw,th)是先验框宽高的偏置量,(cx,cy)是相对于当前gird左上角相对于图片左上角的距离,(pw,ph)是先验框的宽高,最后要求的是bbox中心坐标(bx,by)以及该边框的宽高bw,bh;这样的定义再加上一个激活函数对tx,ty的限定,从而达到预测边框中心点不会跑出对应grid cell里,论文给出求边框和对应置信度的公式:
yolov2论文初读笔记
这样的处理精度提升5%mAP。
细粒度功能:
理解的通俗一点就是在后续网络处理中还会用到早起的特征,因为早起的特征图处理的少,图像细节更多,这里这样优化对小目标物体检测友好,原论文对此做了解释,但不好理解,我用下图解释:
yolov2论文初读笔记
(此图引于视频https://www.bilibili.com/vide…)
文中说的早起2626的特征是从图中虚线框出那层模型的输出里得到的,将其经过passthrounth层来实现改变尺寸,使其与最后输出1313的尺寸一致,这样才可以合并,简单介绍一下passthroungth层工作原理:
yolov2论文初读笔记
这样的细粒度处理提升来1%mAP。
多尺度训练:
yolov2在训练时采用输入图片随机变化不同尺度进行训练的方式,因为yolov2的网络结构更改了,没有全连接层,所以输入尺寸其实并不是向yolov1那样受限了,那yolov2是怎样改变训练图片输入尺寸的呢,yolov2有一个倍数因子是32,输入图片只要满足32的整数倍都可以,所以输入图片的尺寸就可以是:{320,352,…,608},训练集中提供这些尺寸的输入图片,并在训练时每10个batch就随机更换一种尺寸,这样能使yolov2的网络模型适应各种大小输入图片的检测,这里的原理和前面的高分辨率分类器处理是一样的。

Faster(创新了darknet-19网络结构)

上述的优化主要是提高检测精度和召回率,此段主要介绍yolov2如何实现更快的,主要是完全改变了网络结构,废去了yolov1的网络结构,自创了名为darknet-19的网络结构:
yolov2论文初读笔记


喜欢 (0)