目标检测: YOLOv2

《YOLO9000: Better, Faster,Stronger》

论文链接:https://arxiv.org/abs/1612.08242
项目地址:https://pjreddie.com/darknet/yolo/

本文为 YOLO v2的提出,作者做了大量的实验,包括把当时比较流行的一些网络构建方法(BN层,average pooling,大量使用小卷积核等)都进行了尝试与结果对比,为了增加候选框的召回率,加入了 anchor box,并在训练过程中加入了 k-means 让网络自动选择 anchor box,为了消除 anchor box 带来的网络不稳定情况,提出了新的 bounding box 定位方法, 为了对小物体更好的检测,加入了前一级的特征,不得不说训练过程及网络的构建过程越来越复杂了,但是速度也越来越快了。

1. Introduction

一般目标检测应该是快速准确的,并且能够识别很多种类的物体。自从神经网络的提出依赖,检测框架变得越来越快,也越来越准确,但是仅仅能识别很少种类的物体。

目前目标检测的数据集相比于其他任务(分类以及标记)还比较有限,分类的图片中可能包含了成千上万的种类,但是标记目标检测数据集的成本远远高于分类任务,因此,在一定时间内,目标检测不可能有达到分类任务那样规模的数据集出现。

本文提出一个新的方法来利用已经有的分类数据集的图片,用它来扩展当前检测系统的范围

2. Better

相比于 Fast R-CNN,YOLO 出现了更多的定位错误。 相比于基于 region proposal 的方法,YOLO 有更低的召回率。因此本文主要是关注于改善召回率,并且在确保分类准确率的同时改善定位精度。

计算机视觉逐渐向更大,更深的网络发展了。 更好的性能一般是来自于训练更大的网络或者是结合了更多的模型在一块。 YOLOv2 并没有增大网络的结构,而是简化了网络,使特征表达更容易学习。本文有尝试了很多方法来改善 YOLO,尝试如下:

  • Batch Normalization : Batch Normalization 简化了正则化的过程,收敛更快。 文中通过对所有卷积层加 BN 层,提高了 2% 的mAP。

  • High Resolution Classifier : 目前 state-of-the-art 都是使用在 ImageNet 上预训练的分类器结构,从AlexNet 开始,大部分分类器的输入分辨率都是小于 256x256 的,YOLOv1 也是在 224x224 的分辨率上训练分类网络,然后分辨率升为 448 做检测。 YOLOv2 则是直接把分类网络在 448x448 分辨率的 ImageNet 上微调 10 个 epochs, 然后再进行 448x448 的目标检测。 这样提高了 4% 的mAP。

  • Convolutional with anchor boxes : YOLO v1 是直接从最后的全连接层输出对坐标的预测,但是这样的 bounding box 的召回率偏低,这里为了改善召回率,YOLO v2 做了 anchor box 的尝试,将输入分辨率变成奇数的 416,网络会降 32 倍分辨率,最后到 13x13,实验证明使用 anchor box 以后 mAP 稍有降低,但是召回率从 81% 变成了 88%,这也说明了 YOLO 还有进一步提升的空间。

  • Dimension Clusters : 之前的 anchor box 都是人为的选择尺寸等信息。这里本文使用 K-means 的方法让网络自动选择较合适的尺寸。如果直接使用欧式距离,大盒子会比小盒子产生更多的错误。 所以这里使用与 IoU 有关的距离,文中综合召回率与模型复杂度,选择了5个聚类中心。

  • Direct location prediction : anchor box 引起的模型不稳定性。 在基于 region proposal 的方法中会预测偏移量 tx 和 ty,结合预测的 (x,y) 坐标,最后的中心点为:

如果 tx = 1 会将 box 右移一个 anchor box 的宽度,tx = -1 则 box 左移一个 anchor box 的宽度。这样的公式没有加以限制,会使 anchor box 可以在图像的任意位置出现,这样也会让网络花费更多的时候来生成稳点的预测。

YOLO v2 则是沿用 YOLO v1 的方法,直接预测 bounding box 的中心相对于 cell 的左上角位置的相对偏移量。 网络最后输出 13x13, 就有 13x13 个cell,每个 cell 有 5 个 bounding box ,每个 bounding box 会有 5 个预测值:tx,ty,tw,th,t0,

进一步说明:

  • Fine-Grained Feature :

13x13 的分辨率检测大物体足够了,为了提升对小物体的检测性能,这里还结合了上一层 26x26 分辨率的特征图,进行训练,26x26x512 经过 passthrough layer 后变成 13x13x2048 然后再与最后的 13x13 的特征图拼接在一起进行检测,这样增加了 1% 的mAP.

  • Multi-Scale Training :

因为 YOLO v2只有卷积层和池化层,所以输入的尺寸可以不再固定,为了增加模型的鲁棒性,在训练时,在 32 的倍数中,从 320 到 608 的分辨率,每 10 个 batch 就随机选择一个新的分辨率输入到网络,这样让网络可以适应不同分辨率的输入。

3. Faster

主要是对 backbone 网络的修改, 提出Darknet-19,学习了 VGGNet 的思想,开始大量使用 3x3 卷积核,然后学习了 NIN 使用了 average pooling,同时使用了 1x1 来进行降通道的操作,学习了 GoogLeNet, 加入了 BN 层,最后的 Darknet-19 由 19 个卷积层 + 5 个 maxpooling 层,具体结构如下:

当用作检测时,就把最后一个 1x1x1000 的卷积层及以下部分替换成 3 个 3x3x1024 的卷积层,最后再加一个 1x1 的卷积层来输出我们需要的输出个数。

对 VOC 数据集,每个 cell 预测 num=5 个 bounding box ,每个bounding box 都有 5 个坐标值和 20 个类别,所以每个 cell 都有: num * (classes + 5) = 5 *(20 + 5) = 125 个 filter

YOLO v1 中的计算是:classes + num * (coords + confidence) = 20+2*(4 + 1) = 30, 所以 YOLO v1 是每一个 cell 有一个类别预测,而 YOLO v2 是每一个 cell 的 bounding box 有一个类别预测。

4. Stronger

用 WordTree 来构造数据集,并使用 joint classification and detection 来训练模型,从而结合分类与检测数据的数据集可以检测 9000 类物体。

Ps,在参考文献中,作者同时给出了 YOLO v2 的 Loss 函数部分的详细说明,这里就不放进本文中了,如果有需要的可以移步至 参考博客 中。

参考博客: https://blog.csdn.net/lwplwf/article/details/82895409

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值