死磕YOLO系列,YOLOv2的自我修养

系列文章:
死磕YOLO系列,YOLOv1 的大脑、躯干和手脚

演员需要自我修养,程序员也需要。

YOLO 在当时是非常不错的算法,速度极快,但明显的缺陷就是精度问题特别是小尺寸目标检测问题上。

YOLO 的作者有强调的一个事情是 YOLOv2 仍然是实时的,并且在速度和精度方面做了一定的平衡。

YOLOv2 是 YOLO 的进阶版,它没有彻底否定 YOLO,而是在 YOLOv1 的基础上,融合了很多其它论文优秀的思想做了大幅的提升。

YOLO 作者概括了从 3 个方面入手:

  1. 更好
  2. 更快
  3. 更强

1. 如何更好?

YOLO 作者对比了 Fast R-CNN 发现 YOLO 有一些短板,那就是比较低的召回率和比较高的定位误差。

所以,让 YOLO 变得更好指的是保持准确率的情况下:

  • 提升召回率
  • 降低定位误差

为此,尝试了一些手段。

1. 引入 Batch Normalization

Batch Norm 是一种很有效的正则化手段,所有的卷积层后面引入正则化之后,YOLO 表现如何呢?

  • mAP 提升了 2%
  • 可以去掉了 Dropout 仍然不出现过拟合

不熟悉 Batch Norm 的同学可以尝试阅读我这篇介绍文章

2. 高分辨率图像分类器

所有比较先进的目标检测网络,它的图像分类器都是在 ImageNet 做预训练的。

但从 AlexNet 开始,大多数分类器接受的图片尺寸都比较小,低于 256 * 256。

YOLOv1 训练图像分类时,图片尺寸是 224224,之后训练检测时,图片尺寸是 448 × 448,这代表模型需要同时应对学习检测和分辨率的变化。

YOLOv2 做了相应的改变。

通过对 YOLOv1 的模型进行 finetune,用 448*448 的图片尺寸训练了 10 epoches,主要目的是想让卷积核适应高分辨率。

这个步骤相当于做了减法,减轻了网络的学习任务,让它忽略图片尺寸的变化,专心应对目标检测任务。

这种尝试,让 mAP 涨了近 4 个点。

2. 引入 Anchor Box

YOLOv1 最终是通过全连接网络直接预测目标位置。

另外一个优秀的目标检测模型 Fast R-CNN 是通过 Anchor Box 的形式。

两种方法相比,Anchor Box 更容易学习,因为它是通过手选的,然后通过 RPN(Region Proposal Network) 全卷积层预测每一个位置相对于 Anchor Box 的偏移和置信度。

所以,YOLO 作者把 YOLOv1 进行了改造:

  • 最后的全连接层去掉了
  • 用 Anchor Box 预测 b-box
  • 移除一个 pool 层,使得卷积层输出更高分辨率
  • 缩放网络使其能够接受 416x416 的分辨率,目的是最终生成的 featuremap 只有一个中心 cell,方便定位。
  • 将分类和空间检测解耦,跟随 YOLOv1 的思路,预测每一个 anchor box 的对象 objectness 分数,这个是 anchor box 和 groundtruth 的 IOU 分数,也是一个条件概率,针对的是某个 cell 中有无对象时的概率取值。

在论文中,作者花了很长的篇幅讲解 anchor box 相关。

引入 anchor box 后,YOLO 模型的 accuracy 发生了些许下降。

未引入 anchor box 时,YOLO 预测 98 个 bbox,引入后,总共预测的 bbox 能多达 1000 多个

@无anchor box     @Acc=69.5 mAP  @Recall = 81%

@有anchor box   @Acc = 69.2 mAP   @Recall = 88%

相比于精度的少许损失,召回率提升明显,文章开头说 YOLOv2 的改良有个目标就是提高召回率,而 Anchor BOX 的引入确实起了很明显的效果。

3. 尺寸聚类

在引入 Anchor BOX 到 YOLO 的过程,遇到了 2 个问题。

第一个问题就是 Anchor BOX 的尺寸是手选的。

虽然网络可以渐进学习,但是如果一开始的时候就分配好合理的先验尺寸,那么这无疑会加快学习的速度。

相比于人为指定 anchor box 的尺寸比例,YOLO 作者想到了一个自动化的手段,那就是选择 k-means 聚类手段。

在数据训练集中运行 k-means 算法,可以得到 k 个尺寸比例。

但 K 如何取值呢?

作者不是乱取的,有做很详细的对比实验。

在这里插入图片描述

可以看到,k 从 1 到 15 都有做过测试,最终选择了 k=5,选择 5 的原因是在模型复杂度和召回率之间过一个平衡。

经实验,效果很不错,聚类出来的 anchor box 尺寸如下图所示:

在这里插入图片描述

聚类选择出来的尺寸没有很短和宽的尺寸,偏向于高且瘦的尺寸。

最后,作为聚类算法,距离的度量非常重要。

YOLOv2 没有采用标准的欧式距离作为度量。

欧式距离为什么不好呢?

因为 YOLO 作者发现,大尺寸的 bbox 更容易出现定位错误,所以作者想找一个尺寸独立的距离度量,它想到了 IOU, IOU 本身就是一个比例重合的关系。
d ( b b o x , c e n t r o i d ) = 1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

frank909

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

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

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

打赏作者

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

抵扣说明:

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

余额充值