【目标检测】yolov2基本思想和网络结构以及论文补充

论文题目:YOLO9000:Better, Faster, Stronger

一、YOLOv2的引入

在这里插入图片描述
在这里插入图片描述

1.YOLOv2介绍

YOLOv2相对v1版本,在继续保持处理速度的基础上,从预测更准确(Better),速度更快(Faster),识别对象更多(Stronger)这三个方面进行了改进。其中识别更多对象也就是扩展到能够检测9000种不同对象,称之为YOLO9000。相较于 YOLOv1 能达到的45 FPS以及63.4 mAP,YOLOv2 在 PASCAL VOC 数据集上达到了78.6的 mAP 以及 40FPS,其中输入为544×544。比较常用的还是 YOLOv2 416 × 416输入。

文章提出了一种新的训练方法–联合训练算法,这种算法可以把这两种的数据集混合到一起。使用一种分层的观点对物体进行分类,用巨量的分类数据集数据来扩充检测数据集,从而把两种不同的数据集混合起来。联合训练算法的基本思路就是:同时在检测数据集和分类数据集上训练物体检测器(Object Detectors ),用检测数据集的数据学习物体的准确位置,用分类数据集的数据来增加分类的类别量、提升健壮性。

YOLO9000就是使用联合训练算法训练出来的,他拥有9000类的分类信息,这些分类信息学习自ImageNet分类数据集,而物体位置检测则学习自COCO检测数据集。

2.YOLOv2的创新点

YOLOv1有很多缺点,作者希望改进的方向是:改善recall,提升定位的准确度,同时保持分类的准确度。目前计算机视觉的趋势是更大更深的网络,更好的性能表现通常依赖于训练更大的网络或者把多种model综合到一起,但是YOLOv2则着力于简化网络具体的改进见下表:在这里插入图片描述
接下来依次讲解这七点尝试带来的效果:
1.Batch Normalization(批归一化)
2.High Resolution Classifier(高分辨率分类器)
3.Convolutional with Anchor Boxes(加入anchor)
4.Dimension Clusters(聚类)
5.Direct location prediction(直接定位预测)
6.Fine-Grained Features(细粒度特征≈特征融合)
7.Multi-Scale Training(多尺度训练)

1.Batch Normalization(批归一化)

在 YOLOv1 中作者搭建网络时没有用 BN 层,在 YOLOv2 中每个卷积层后使用 BN 层,对于训练收敛有很大帮助,也减少了所需正则化处理,达到了 2% mAP 的提升,帮助模型取得了正则化的效果,还能移除掉 Dropout 层了。
在这里插入图片描述

2.High Resolution Classifier(高分辨率分类器)

目前大部分的检测模型都会在先在 ImageNet 分类数据集上预训练模型的 backbone(CNN特征提取器),由于历史原因,ImageNet 分类模型基本采用大小为 224 × 224 的图片作为输入,分辨率相对较低,不利于检测模型。所以YOLOv1在采用 224 × 224输入预训练后,将分辨率增加至 448 × 448,并使用这个高分辨率在检测数据集上 finetune。但是直接切换分辨率,检测模型可能难以快速适应高分辨率。所以 YOLOv2 采用更高分辨率的分类器,这个思想也很自然。在 YOLOv1 中作者最开始训练 backbone 的时候是在 ImageNet 上使用 224 × 224的图像输入,而在 YOLOv2 中,作者使用更大的输入尺寸 448 × 448在 ImageNet 上预训练。使用大尺寸图片,采用更大分辨率的分类器为我们带来了 4% mAP 提升。
在这里插入图片描述

3.Convolutional with Anchor Boxes(加入anchor)

在 YOLOv1 中直接预测宽度高度和中心坐标,由于各个图片中存在不同尺度和长宽比(scales and ratios)的物体,YOLOv1 在训练过程中学习适应不同物体的形状是比较困难的,这导致定位效果差。这里作者尝试使用基于 Anchor 的目标边界框的预测方式。采用基于 Anchor 偏移的预测比直接预测坐标而言更简单,也能使得网络更加容易学习和收敛。YOLOv2 移除了 YOLOv1 中的全连接层而采用了卷积和 anchor boxes 来预测边界框。为了使检测所用的特征图分辨率更高,移除其中的一个 pool 层。在检测模型中,YOLOv2 不是采用 448 × 448 大小的图片作为输入,而是采用 416 × 416 大小。因为 YOLOv2 模型下采样的总步长为 32,对于 416 × 416大小的图片,最终得到的特征图大小为 13 × 13 ,维度是奇数,这样特征图恰好只有一个中心位置。对于一些大物体,它们中心点往往落入图片中心位置,此时使用特征图的一个中心点去预测这些物体的边界框相对容易些。所以在 YOLOv2 设计中要保证最终的特征图有奇数个位置。对于YOLOv1,每个 cell 都预测 2 个 bounding boxes,每个 bounding boxes 包含5个值:(x, y, w, h, confidence),前 4 个值是边界框位置与大小,最后一个值是置信度(包含两部分:含有物体的概率以及预测框与 ground truth 的 IOU 的乘积)。然而每个 cell 只预测一套分类概率值(class predictions,其实是置信度下的条件概率值),由两个 bounding boxes 共享。YOLOv2 使用了 Anchor boxes 之后,每个位置的各个 anchor box 都单独预测一套分类概率值,这和 SSD 比较类似(但 SSD 没有预测置信度,而是把 background 作为一个类别来处理)。

在没有使用 Anchor 的时候,模型取得了 69.5 mAP 的结果和 81% 的召回率。使用 Anchor 之后得到的模型取得了 69.2 mAP 以及 88% 的召回率。虽然 mAP 有略微下降,但是模型的召回率有了 7% 的提升,这意味着模型有了更大的进步空间。实际上,YOLOv1 只能预测 7 × 7 × 2 = 98个 bounding box,而 YOLOv2 则使用 Anchor boxes 之后能预测上千个边界框(13 × 13 num_anchors),所以召回率大大提升了。
在这里插入图片描述

4.Dimension Clusters(聚类)

Anchor 的聚类。 之前在讲解 Faster R-CNN 以及 SSD 的时候,作者并没有明确地给出我们为什么要采用那些作者给定的 Anchor 或者 Default Box。虽然在 SSD 中给了公式,但是意义似乎并不是特别明确。在 Faster R-CNN 中也是说根据工程经验给定的。其实这个经验对于一般人而言是没有的。这里作者使用 k-means 的方法从训练集中进行聚类得到所谓的 priors(其实就是 Anchor 或者 Default box)
在这里插入图片描述

5.Direct location prediction(直接定位预测)

问题:
作者谈到基于 Anchor 的训练过程中,网络初期出现不稳定的情况,主要是由于坐标偏移量 x 和 y 的预测导致的。x 和 y 没有增加任何约束,预测的边界框很容易向任何方向偏移,如当 tx = 1时边界框将向右偏移先验框的一个宽度大小,而当 tx = −1时边界框将向左偏移先验框的一个宽度大小,这使得可以将一个 Anchor 预测到图片的任何一个地方,例如下图中左上角的 Anchor 被回归参数调整到了右下角去。事实上右下角根本轮不到这个 Anchor 来进行预测。
解决办法:
为此在训练时需要很长时间来学习预测出正确的 offsets。(注意,原论文的公式使用减号是错误的,和 Faster R-CNN 以及 SSD 中描述的公式不符合,应该是加号才对)
在这里插入图片描述
在这里插入图片描述
在 YOLOv2 中作者就为了改善这种情况,于是弃用了这种预测方式,而是沿用 YOLOv1 的方法,就是==预测边界框中心点相对于对应 cell 左上角位置的相对偏移值,为了将边界框中心点约束在当前 cell 中,使用 sigmoid 函数处理偏移值,这样预测的偏移值在 (0,1) 范围内(每个 cell 的尺度看做 1)。保证每个 anchor(prior) 去预测目标中心落在某个 grid cell 区域的目标。==总结来看,根据边界框预测的4个offsets tx,ty,tw, th,可以按如下公式计算出边界框实际位置和大小:
在这里插入图片描述
其中(cx, cy)为 cell 的左上角坐标,如下图所示,在计算时每个 cell 的尺度为1。由于 sigmoid 函数的处理,边界框的中心位置会约束在当前 cell 内部,防止偏移过多。而 pw和 ph是先验框的宽度与长度,前面说过它们的值也是相对于特征图大小的,在特征图中每个 cell 的长和宽均为1。这里记特征图的大小为(W, H),在文中是(13,13),这样我们可以将边界框相对于整张图片的位置和大小计算出来4个值均在0和1之间):
在这里插入图片描述
如果再将上面的 4 个值分别乘以图片的宽度和长度就可以得到边界框的最终位置和大小了。这就是 YOLOv2 边界框的整个解码过程。约束了边界框的位置预测值使得模型更容易稳定训练,结合聚类分析得到先验框与这种预测方法,YOLOv2 获得了的约 5% mAP 的提升。
在这里插入图片描述
补充一句:预测得到的 confidence 值 to也需要经过 sigmoid 进行范围限制:
在这里插入图片描述
最终 predictor 的个数是 (5 + 20) × 5,这最后的5就是 5个Anchor(prior)。

6.Fine-Grained Features(细粒度特征≈特征融合)

YOLOv2 的输入图片大小为 416 × 416 ,经过 5 次 maxpooling 之后得到 13 × 13大小的特征图,并以此特征图采用卷积做预测。 13 × 13 大小的特征图对检测大物体是足够了,但是对于小物体还需要更精细的特征图(Fine-Grained Features),也就是更低层的特征图。在之前讲解的 SSD 中使用了多尺度的特征图来分别检测不同大小的物体,前面更精细的特征图可以用来预测小物体,后面的更高级语意的特征图用来预测大物体。简单的来说:就是将高层2626512与13131024进行融合
在这里插入图片描述
YOLOv2 提出了一种 passthrough 层来利用更精细的特征图,具体而言,YOLOV2 所用的 Fine-Grained Features是 26 x 26 大小的特征图(即最后一个 maxpooling 层的输入),对于 Darknet-19 模型来说就是大小为 26 x 26 x 512 尺寸的特征图。passthrough 层以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。前面的特征图维度是后面的特征图的 2 倍,passthrough 层取前面层的每个2 x 2的局部区域,然后将其转化为 channel 维度,对于 26 x 26 x 512 尺寸的特征图,经passthrough 层处理之后就变成了13 x 13 x 2048 的新特征图(特征图大小降低4倍,而channles 增加4倍,下图为一个实例),这样就可以与后面的 13 x13 X 1024 特征图连接在一起形成 13 x 13 X 3072 大小的特征图,然后在此特征图基础上卷积做预测。
在这里插入图片描述
此外,作者在后期的实现中借鉴了 ResNet 网络,不是直接对高分辨特征图处理,而是增加了一个中间卷积层,先采用 64 个 1 × 1卷积核进行卷积,然后再进行 passthrough 处理,这样 26 × 26 × 512 的特征图首先得到 26 × 26 × 64 再得到 13 × 13 × 256的特征图,与后面的 13 × 13 × 1024 特征图连接在一起形成 13 × 13 × 1280大小的特征图。这在原论文中没有提到,也算是实现上的一个小细节。使用 Fine-Grained Features 之后 YOLOv2 的性能有 1% 的提升。(类似FPN的思想)

7.Multi-Scale Training(多尺度训练)

采用多尺度训练方法,替换固定尺寸训练。作者认为采用固定尺寸网络的鲁棒性是受限的,所以作者在训练中将图片缩放到不同尺度来训练模型。==每迭代 10 个 batches,就将输入尺寸进行随机选择。==由于 YOLOv2 的缩放因子为 32,所以尺寸为 32 的倍数,采用了从 320 到 608 的尺寸。
注意:
1.当输入图片为 320 × 320 时,特征图大小为 10 × 10不是奇数了。
2.这里的缩放因子是图像的尺寸从开始的416到最后的13是32倍
在这里插入图片描述
在这里插入图片描述
采用 Multi-Scale Training 策略,YOLOv2 可以适应不同大小的图片,并且预测出很好的结果。在测试时,YOLOv2 可以采用不同大小的图片作为输入,在 VOC 2007 数据集上的效果如下图所示。可以看到采用较小分辨率时,YOLOv2 的 mAP 值略低,但是速度更快,而采用高分辨输入时,mAP 值更高,但是速度略有下降,对于 544 × 544的输入图,mAP 高达 78.6%。值得注意的是,这只是测试时输入图片大小不同,而实际上用的是同一个采用Multi-Scale Training训练得到的模型。
在这里插入图片描述

3.Darknet-19(新网络)

作者在 Faster 章节提到了新的 backbone 网络,即 Darknet-19。·19 其实是说该网络有 19 个卷积层,然后还有 5 个 maxpooling 层。Darknet-19 与 VGG16 模型设计原则是一致的,主要采用 3 × 3卷积,采用 2 × 2的maxpooling层之后,特征图维度降低 2 倍,而同时将特征图的 channles 增加两倍。与 NIN(Network in Network) 类似,Darknet-19 最终采用 global avgpooling 做预测,并且在 3 × 3 卷积之间使用 1 × 1 卷积来压缩特征图 channles 以降低模型计算量和参数。Darknet-19 每个卷积层后面同样使用了 BN 层以加快收敛速度,降低模型过拟合。在 ImageNet 分类数据集上,Darknet-19 的 top-1 准确度为 72.9%,top-5 准确度为 91.2%,但是模型参数相对小一些。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.其他细节

1.和 YOLOv1 一样,对于训练图片中的ground truth,若其中心点落在某个 cell 内,那么该 cell 内的 5 个先验框所对应的边界框负责预测它,具体是哪个边界框预测它,需要在训练中确定,即由那个与 ground truth 的 IOU 最大的边界框预测它,而剩余的 4 个边界框不与该 ground truth 匹配。YOLOv2 同样需要假定每个 cell 至多含有一个 grounth truth,而在实际上基本不会出现多于 1 个的情况 (稠密小目标问题依然没有解决)。与 ground truth 匹配的先验框计算坐标误差、置信度误差(此时 target 为 1)以及分类误差,而其它的边界框只计算置信度误差(此时 target 为0)。基本上 YOLOv2 和 YOLOv1的损失函数一样,为均方差函数。
2.在 YOLO 中,边界框的预测其实并不依赖于物体的标签,所以YOLO可以实现在分类和检测数据集上的联合训练。

参考:YOLO参考

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jul7_LYY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值