概括:

yolov2论文次要依据yolov1体现的一些毛病和局限性作出了一些改良:论文称达到了better、fatser、stronger

从上图能够看出yolov2做的优化改良以及对应晋升的mAP。
(题外话:mAP是掂量指标检测准确度的指标:越高越精准,这个定义解释简单点,可另件我的博文,FPS是掂量检测速度的指标:越高速度越快,了解成每秒能够解决多少帧/张图片)
上面从这些改良里一一剖析:
Batch Normalization:
简略解释一下Batch Normalization,下图是一个样本量为N,通道为C,尺寸WH的特色,留神蓝色区,能够简略了解成批归一化操作时该蓝色区块沿着通道方向挪动,每次计算雷同通道上特色的均值和方差,所以解决后会失去一个1C的均值向量和1*C的方差向量

有了上述概念,再用下图一个简略例子举例说明,假如用批归一化解决手写数字图片特色输出,有6个样本,特色通道是3,图片尺寸是2828,把每个通道的2828特色转为一维,则输出能够形容为(6,3,784),每个通道都有(6,784),通过Batch Normal解决失去均值向量u和方差向量sigema,如下图z公式解决,是的解决后的z满足N(0,1)散布,从而实现对特色的归一化解决

(此图引于视频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聚类:

已上图依据身高体重分成两类的例子为例介绍
步骤流程:
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的折衷取值。

看一下试验比照成果:

和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边框核心预测公式来作出解释:

式中(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里,论文给出求边框和对应置信度的公式:

这样的解决精度晋升5%mAP。
细粒度性能:
了解的艰深一点就是在后续网络解决中还会用到早起的特色,因为早起的特色图解决的少,图像细节更多,这里这样优化对小指标物体检测敌对,原论文对此做了解释,但不好了解,我用下图解释:

(此图引于视频https://www.bilibili.com/vide...)
文中说的早起2626的特色是从图中虚线框出那层模型的输入里失去的,将其通过passthrounth层来实现扭转尺寸,使其与最初输入1313的尺寸统一,这样才能够合并,简略介绍一下passthroungth层工作原理:

(解释也能够看此视频,此图引于某大佬的视频https://www.bilibili.com/vide...)
这样的细粒度解决晋升来1%mAP。
多尺度训练:
yolov2在训练时采纳输出图片随机变动不同尺度进行训练的形式,因为yolov2的网络结构更改了,没有全连贯层,所以输出尺寸其实并不是向yolov1那样受限了,那yolov2是怎么扭转训练图片输出尺寸的呢,yolov2有一个倍数因子是32,输出图片只有满足32的整数倍都能够,所以输出图片的尺寸就能够是:{320,352,...,608},训练集中提供这些尺寸的输出图片,并在训练时每10个batch就随机更换一种尺寸,这样能使yolov2的网络模型适应各种大小输出图片的检测,这里的原理和后面的高分辨率分类器解决是一样的。

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

上述的优化次要是进步检测精度和召回率,此段次要介绍yolov2如何实现更快的,次要是齐全扭转了网络结构,废去了yolov1的网络结构,借鉴了名为darknet-19的网络结构: