概括:
yolov2 论文次要依据 yolov1 体现的一些毛病和局限性作出了一些改良:论文称达到了 better、fatser、stronger
从上图能够看出 yolov2 做的优化改良以及对应晋升的 mAP。
(题外话:mAP 是掂量指标检测准确度的指标:越高越精准,这个定义解释简单点,可另件我的博文,FPS 是掂量检测速度的指标:越高速度越快,了解成每秒能够解决多少帧 / 张图片)
上面从这些改良里一一剖析:
Batch Normalization:
简略解释一下 Batch Normalization,下图是一个样本量为 N,通道为 C,尺寸 W H 的特色,留神蓝色区,能够简略了解成批归一化操作时该蓝色区块沿着通道方向挪动,每次计算雷同通道上特色的均值和方差,所以解决后会失去一个 1 C 的均值向量和 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 层工作原理:
这样的细粒度解决晋升来 1%mAP。
多尺度训练:
yolov2 在训练时采纳输出图片随机变动不同尺度进行训练的形式,因为 yolov2 的网络结构更改了,没有全连贯层,所以输出尺寸其实并不是向 yolov1 那样受限了,那 yolov2 是怎么扭转训练图片输出尺寸的呢,yolov2 有一个倍数因子是 32,输出图片只有满足 32 的整数倍都能够,所以输出图片的尺寸就能够是:{320,352,…,608}, 训练集中提供这些尺寸的输出图片,并在训练时每 10 个 batch 就随机更换一种尺寸,这样能使 yolov2 的网络模型适应各种大小输出图片的检测,这里的原理和后面的高分辨率分类器解决是一样的。
Faster(翻新了 darknet-19 网络结构)
上述的优化次要是进步检测精度和召回率,此段次要介绍 yolov2 如何实现更快的,次要是齐全扭转了网络结构,废去了 yolov1 的网络结构,借鉴了名为 darknet-19 的网络结构: