【方针检测(一)】RCNN详解——深度学习方针检测的开山之作
【方针检测(二)】SPP Net——让卷积核算同享
【方针检测(三)】Fast RCNN——让RCNN模型能端到端练习
【方针检测(四)】Faster RCNN——RPN网络替代selective search
【方针检测(五)】YOLOv1——敞开one-stage方针检测的篇章
【方针检测(六)】YOLOv2——引进anchor, Better, Faster, Stronger
【方针检测(七)】YOLOv3——准确率的全面进步
【方针检测(八)】一文吃透方针检测回归框损失函数——IoU、GIoU、DIoU、CIoU原理及Python代码
【方针检测(九)】FPN详解——经过特征金字塔网络进行多标准特征交融
【方针检测(十)】RetinaNet详解——Focal Loss将one-stage算法推向巅峰
【方针检测(十一)】CenterNet——Anchor Free, NMS Free
【方针检测(十二)】FCOS——用实例切割的思想做Anchor Free的方针检测

1. Introduction

YOLOv2是YOLO系列的第二代算法,原论文名称是《YOLO9000: Better, Faster, Stronger》,作者在YOLOv1的基础上进行了很多改善,引进了Faster RCNN提出的anchor机制,它斩获了CVPR 2017 Best Paper Honorable Mention。YOLOv2比较YOLOv1做了很多方面的改善,这也使得YOLOv2的mAP有显著的进步,而且YOLOv2的速度仍然很快,保持着自己作为one-stage方法的优势,YOLOv2和Faster R-CNN, SSD等模型的比照如下图所示。

【目标检测(六)】YOLOv2——引入anchor, Better, Faster, Stronger

2. YOLOv2的原理和改善战略

本文是根据YOLOv1基础上来解说YOLOv2的改善战略的,如果对YOLOv1算法不太熟悉,能够看上一篇YOLOv1的技能博客。作者从YOLO优化到YOLOv2做了很多的改善优化作业,优化作用也十分显著,在VOC2007上mAP准确率直接从63.4优化到了78.6%。

【目标检测(六)】YOLOv2——引入anchor, Better, Faster, Stronger

2.1 Batch Normalization

在2017年BN已经被证明其作用和有效性了,作者也是在第二代YOLO中的卷积层后运用了BN层,BN层使网络练习变得更加容易,而且有正则化的作用,避免过拟合运用了BN层后mAP进步了2个百分点。另外作者还说到,运用了BN层之后能够不再运用dropout层来避免过拟合。

2.2 High Resolution Classifier

  • 在YOLOv1中运用的224*224的图片作为网络输入在ImageNet上进行backbone的预练习,网络在进行正式练习的时分既需求学习检测过程也需求习气更大的分辨率。在YOLOv2中作者运用更大的分辨率448*448持续fine-tune十个epoch,让网络来习气大的分辨率。
  • 一起作者在网络中去掉了一个pooling层,使得网络输出feature map更加稠密(7*7–>13*13)。
  • High Resolution Classifier能给mAP带来挨近4个百分点的进步。

2.3 Anchor

2.3.1 引进anchor机制介绍

在YOLOv1中,输入图片终究被划分为网格,每个单元格猜测2个鸿沟框。YOLOv1最终选用的是全衔接层直接对鸿沟框进行猜测,其间鸿沟框的宽与高是相对整张图片巨细的,而由于各个图片中存在不同标准和长宽比(scales and ratios)的物体,YOLOv1在练习过程中学习习气不同物体的形状是比较困难的,这也导致YOLOv1在准确定位方面体现较差。作者学习了Faster RCNN的anchor机制,让网络输出的每个feature map点都生成若干anchor:

  • anchor是虚拟鸿沟框。
  • 真实的bbox猜测是由anchor生成出来的。

【目标检测(六)】YOLOv2——引入anchor, Better, Faster, Stronger

在YOLOv1中,终究的鸿沟框是直接拟合的猜测值和GT值,而Faster RCNN则是进行的offset regression,即拟合猜测值和先验框的偏差值,选用先验框使得模型更容易学习。所以YOLOv2移除了YOLOv1中的全衔接层而选用了卷积和anchor boxes来猜测鸿沟框。为了使检测所用的特征图分辨率更高,移除其间的一个pool层。在检测模型中,YOLOv2不是选用图片作为输入,而是选用巨细。由于YOLOv2模型下采样的总步长为,关于巨细的图片,终究得到的特征图巨细为,维度是奇数,这样特征图恰好只要一个中心方位。

关于YOLOv1,每个cell都猜测2个boxes,每个boxes包含5个值:,前4个值是鸿沟框方位与巨细,最终一个值是置信度(confidence scores,包含两部分:含有物体的概率以及猜测框与ground truth的IOU)。可是每个cell只猜测一套分类概率值(class predictions,其实是置信度下的条件概率值),供2个boxes同享。YOLOv2运用了anchor boxes之后,每个方位的各个anchor box都独自猜测一套分类概率值。

运用anchor boxes之后,YOLOv2的mAP有略微下降(这儿下降的原因,我猜测是YOLOv2尽管运用了anchor boxes,可是仍然选用YOLOv1的练习方法)。YOLOv1只能猜测98个鸿沟框(),而YOLOv2运用anchor boxes之后能够猜测上千个鸿沟框()。所以运用anchor boxes之后,YOLOv2的召回率大大进步,由本来的81%升至88%。

2.3.2 Anchor聚类

在Faster RCNN中,feature map每个点发生9个anchor,这儿发生的anchor的数量和种类是根据工程经验得来的,那么作者试图去处理拿到一个新的网络怎样能取得更好的anchor?这儿提出了运用k-means算法来对GT Boxes进行聚类,取得更好的anchor超参数。如下图,是作者实验聚类剖析k值选取对终究成果的影响状况(平衡准确率和核算速度,论文选取了k=5):

【目标检测(六)】YOLOv2——引入anchor, Better, Faster, Stronger

作者界说k-means聚类的间隔为:

【目标检测(六)】YOLOv2——引入anchor, Better, Faster, Stronger

2.3.3 Anchor, True BBoxes & Predicted BBoxes

在这一部分主要解说Anchor机制详细是如何和GT Box以及猜测框相结合的。

榜首部分先解说Anchor的意义,首先看一组anchor聚类的输出,例如是这样的:

【目标检测(六)】YOLOv2——引入anchor, Better, Faster, Stronger

输出5个anchor,每一组anchor都包含两个数,都在[0, 13]范围内(输出feature map维度为13*13),这儿是将真实anchor对应图画区域的宽高都映射到feature map的区间上,即每个宽高先除以原始图画宽高再乘以13。

第二部分然后来看GT Boxes是如何处理的:

  • Original bbox: [xo, yo, wo, ho] ∈ [0, W | TH]
  • Normalize in 0~1: [xr, yr, wr, hr] = [xo / W, yo / H, wo / W, ho / H] ∈ [0, 1]
  • Transfer to feature map size: [x, y, w, h] = [xr, yr, wr, hr] * (13 | 13)
  • Transfer to 0~1 corresponding to each grid cell: {xf=x−iyf=y−iwf=log(w/anchors[0])hf=log(h/anchors[1])\begin{cases} x_f = x – i\\ y_f = y – i\\ w_f = log(w/anchors[0])\\ h_f = log(h/anchors[1]) \end{cases}

上面公式中i,j对应的是grid cell的ID,即i=floor(x), j=floor(y),表bbox中心坐标相对所属grid cell的相对偏移量,由于GT bbox中心一定在这个grid cell之内,所以i, j ∈ [0, 1]

最终一部分综合来看anchor, GT Boxes和Predicted BBoxes是怎样用起来的: 先回想下,Faster RCNN中是如何对offset进行回归的:

{txp=xp−xawa,typ=yp−yahatwp=log(wpwa),thp=log(hpha)txg=xg−xawa,tyg=yg−yahatwg=log(wgwa),thg=log(hgha)\begin{cases} t_x^p = \frac{x_p – x_a}{w_a}, t_y^p = \frac{y_p – y_a}{h_a}\\ t_w^p = log(\frac{w_p}{w_a}), t_h^p = log(\frac{h_p}{h_a})\\ t_x^g = \frac{x_g – x_a}{w_a}, t_y^g = \frac{y_g – y_a}{h_a}\\ t_w^g = log(\frac{w_g}{w_a}), t_h^g = log(\frac{h_g}{h_a}) \end{cases}

考虑下,这儿没有对txpt_x^p进行任何约束,假如说这儿txp=3t_x^p=3,那么中心点坐标将直接偏移3个waw_a,很可能猜测的bbox中心早已并不在这个grid cell之内了。为了纠正这种状况,需求对偏移量进行约束,YOLOv2对原始的anchor的offset regression进行了改善,拟合bbox中心点相关于grid cell的相对偏移量而且将中心点偏移量限定在了[0, 1]范围内,如下公式所示:

{(txp)=bx−Cx,(typ)=by−Cytwp=log(wpwa′),thp=log(hpha′)txg=gx−floor(gx),tyg=gy−floor(gy)twg=log(wgwa′),thg=log(hgha′)\begin{cases} (t_x^p) = b_x – C_x, (t_y^p) = b_y – C_y\\ t_w^p = log(\frac{w_p}{w_a’}), t_h^p = log(\frac{h_p}{h_a’})\\ t_x^g = g_x – floor(g_x), t_y^g = g_y – floor(g_y)\\ t_w^g = log(\frac{w_g}{w_a’}), t_h^g = log(\frac{h_g}{h_a’}) \end{cases}

上面公式中表明sigmoid函数;bx,by∈[0,13]b_x, b_y ∈ [0, 13] 是映射到0-13维度上的框中心坐标;(Cx,Cy)(C_x, C_y),是bx,byb_x, b_y最近的离散整数点,wa′,ha′∈[0,13]w_a’, h_a’ ∈ [0, 13],是映射到0-13维度上的anchor宽度和高度,gx,gy∈[0,13]g_x, g_y ∈ [0, 13],是GT Box的中心点坐标映射到0-13维度上;gw,gh∈[0,13]g_w, g_h ∈ [0, 13]同理。

【目标检测(六)】YOLOv2——引入anchor, Better, Faster, Stronger

2.4 网络结构

作者不再运用VGG作为backbone,尽管当时ResNet已被证明十分好用,可是作者也没有运用ResNet这种结构,而是自己规划了网络结构,命名为DarkNet-19。如下图所示,DarkNet-19是分类网络的结构,运用在方针检测任务中,作者将输入图画巨细改成了416*416,一起为了进步分辨率去掉了最终一个pooling层,也去掉了红框中的全衔接层,最终网络输出是一个维度为13*13*1024的feature map。

【目标检测(六)】YOLOv2——引入anchor, Better, Faster, Stronger

2.5 Fine-Grained Features (细粒度特征交融)

在YOLOv1中,小方针的检测作用十分欠好,一方面是与损失函数规划有关,模型loss将偏向大方针,会影响小方针的学习;另一方面与模型的coarse feature有关,网络一直在进行下采样,损失了十分多的细节信息。深度学习模型的学习到的浅层特征是物体的角点和边之类的细节信息,而学习到的深层特征是偏向笼统语义的,那么关于方针检测任务来说浅层特征和深层特征都是很重要的,定位任务需求细节信息才能框的准。因而,YOLOv2学习了RestNet的思想,交融了更精细化的特征。作者将26*26*512的特征经过passthrough层转化为了13*13*256维度的tensor,与原始粗粒度特征13*13*1024进行交融,网络结构如下图所示:

【目标检测(六)】YOLOv2——引入anchor, Better, Faster, Stronger

其间的passthrough层便是特征矩阵隔一个拆出来一个的方法,这样能完成特征图巨细减半,可是channel变成本来的4倍,如下图所示:

【目标检测(六)】YOLOv2——引入anchor, Better, Faster, Stronger

这样的特征交融规划,使最终mAP进步了1个点。

2.6 Multi-Scale Training

多标准练习是为了让网络能习气不同巨细的图画,进步模型的泛化能力,经过多标准练习,能让mAP进步1个百分点。

  • 移除全衔接层:这样网络就能够接纳任意巨细的图画,进步模型的鲁棒性。
  • 多标准:设置标准[320, 352, 384, …, 608],练习每隔10个epoch变换一次。

2.7 Loss方程

作者在原论文中并没有给出loss核算和正负样本划分等细节(可能是想让读者崇拜下作者的代码),能够参阅这篇技能博客,对作者loss核算部分的代码进行了解读。

也可参阅技能博客的loss部分:zhuanlan.zhihu.com/p/82099160 本文将核心公式抄录下来,供参阅:

【目标检测(六)】YOLOv2——引入anchor, Better, Faster, Stronger

【目标检测(六)】YOLOv2——引入anchor, Better, Faster, Stronger

3. YOLOv2的作用和优劣势剖析

3.1 YOLOv2作用

如下图所示,YOLOv2优势总结起来便是涨点提速。在同标准状况下,在VOC2007数据集下YOLOv2进步mAP准确率13.4%,一起推理速度进步50%。

【目标检测(六)】YOLOv2——引入anchor, Better, Faster, Stronger

3.2 YOLOv2优劣势

优点:

  • 无全衔接层,速度快:选用仅包含卷积和池化的Darknet19网络结构,层数比YOLO更少,且没有全衔接层,核算量更少;模型运行更快。
  • 运用卷积替代全衔接层:解除了输入巨细的约束。
  • 速度更快,准确率更高,用了十分多的优化技巧。

缺陷:

  • 精度还有进步空间。
  • 小方针的检测功能还不是太好,也需求进步。
  • 稠密物体难检:尽管分辨率进步了,已经大幅度改善YOLOv1的重叠难检问题,可是还是每一个grid cell最多只能猜测一个物体,如果遇到俄罗斯套娃状况还是不可。

Reference

  1. arxiv.org/pdf/1612.08…
  2. zhuanlan.zhihu.com/p/35325884
  3. zhangxu.blog.csdn.net/article/det…
  4. www.cnblogs.com/YiXiaoZhou/…
  5. zhuanlan.zhihu.com/p/82099160