Title: YOLO9000: Better, Faster, Stronger(2016)
Link: Paper Website
Tips:
- 检测系统为什么要利用分类数据集 ImageNet(1. Introduction)
- 理解本文的贡献:两个模型,两个方法(1. Introduction)
- 学习提升模型性能的方法,这些 idea 也可以用在自己的模型中(2.Better)
- 为了检测速度提出一个新的网络(3. Faster)
- 联合训练分类和检测数据的机制(4. Stronger)
Summary:
这篇文章提出的 YOLOv2 是 YOLO 的改进版,它的目的是检测模型更准,更快,鲁棒性更强。
更准→模型的性能更好。作者结合之前的模型改进方法,在模型上加了很多东西,并依次实验效果。
更快→主要考虑网络的收敛速度。作者基于之前的模型提出一个新模型。
更强→检测数据少,分类数据多,那就把两种数据集合并利用,扩大数据范围。作者提出改变数据结构和联合训练的方法,这个需要我们重点理解。
对我们的启示:平常看论文要总结影响网络性能的因素,这些因素可能成为自己模型的 idea,文中的 2 Better 部分很好地表明了这一点。学习联合训练的方法,这是一条新思路。
相关文章:
一文读懂 YOLOv1,v2,v3,v4 发展史
YOLOv1 解读:使用 unified system/ one-stage 实现目标检测
YOLOv3 解读:小改动带来的性能大提升
YOLOv4 解读:CV 同学必读的目标检测技巧大合集
Abstract
本文介绍的 YOLO9000 是一个可检测 9000 多个检测类别的先进的实时检测系统。
- YOLOv2 是 YOLO 的改进版本,在 PASCAL VOC 和 COCO 这些标准数据集上表现很好;
- 本文还提出一个可以同时训练检测任务和图像分类的方法(COCO detection dataset + ImageNet classification dataset),通过联合训练(joint train),YOLO9000 可以检测无标记检测数据的物体类别。
1. Introduction
研究现状
神经网络的使用提升了检测框架的速度和准确率,但当前的检测任务受数据集标签的限制(数据集必须有标签或通过分类赋予标签)。但是,标记要检测的图像比标记要分类图像昂贵得多,所以检测数据和分类数据不是一个规模。
解决方法
- dataset combination method:本文提出的方法可以利用已有的分类数据集扩充检测数系统的范围。我们的方法使用物体分类的分层视图,该视图允许我们将不同的数据集组合在一起。
- joint training algorithm:本文提出了一种联合训练算法,该算法可以在检测和分类数据上训练目标检测器。 利用标记的检测图像来学习精准定位,同时使用分类图像来增加其“词汇量”和健壮性。
训练流程
- 在 YOLOv1 的基础上改造产生 YOLOv2;
- 使用上述提到的数据结合方法和联合训练算法,在 ImageNet 和 COCO 数据集上训练 YOLOv2 模型,训练好的模型叫 YOLO9000(检测类别超过 9000)。
2. Better
与 state-of-the-art detection systems 相比,YOLOv1 的两个缺点是定位(localization)不准和召回率(recall)低,所以我们的目标是保证分类准确率的同时提升定位和召回率情况。
CV领域提升模型性能的常用方法是训练更深的网络和模型融合,但是 YOLOv2 的目标是保证速度的同时提升准确率,所以本文的方法是简化模型,使特征表达更易学习,因此 本文结合了之前的一些方法和自己的理念来提升 YOLOv2 的性能。
下面介绍一些可能提升性能的 idea:
Batch Normalization → convergence + regularization
Batch normalization 可以改善收敛性,提升泛化能力。 通过在YOLO的所有卷积层上添加 batch normalization,指标 mAP 增长了2%以上。有了 batch normalization,移除 dropout 也不会导致过拟合。
High Resolution Classifier
现有 state-of-the-art 检测模型都是使用在 ImageNet 上预训练的分类器,输入图像的分辨率都小于 256 × 256,YOLOv1 使用的分类器预训练的图像分辨率是 224 × 224 检测时的图像分辨率增加到 448×448,这意味者 YOLOv1 网络需要在目标检测和适应新的分辨率中切换。
为提高检测高分辨率图像的能力,把检测和高分辨率两个任务分开:先在 448×448 的 ImageNet 图像上微调分类网络,然后微调检测网络。
高分辨率的分类网络使mAP增长了近4%。
Convolutional With Anchor Boxes
YOLO 使用卷积特征提取器顶部的 FC 层直接预测边界框的坐标,而 YOLOv2 移除了 FC 层,用 anchor box 预测边界框。这样就把分类机制与空间位置解耦,可以直接为每个 anchor box 预测类别。
anchor box 使精度下降——mAP 从69.5 降到 69.2,但是 recall 从 81% 提升到 88%,这说明我们的模型还有提升的空间。
Dimension Clusters
使用 anchor box 遇到的第一个问题是:bounding box 的尺寸是手工挑选的。
网络可以学习适当地调整框,但是如果我们为网络选择更好的先验条件,则可以使网络更容易学习预测良好的检测结果。
使用 k-means 聚类找先验条件。先验条件是为了带来好的 IOU 分数,与框尺寸无关,因此距离度量为
实验表明使用 k 均值生成边界框可以更好地表示模型,并使任务更易于学习。
Direct location prediction
使用 anchor box 遇到的第二个问题是:模型不稳定,尤其是在早期迭代期间。大部分的不稳定来源于预测边界框的位置(坐标)。
代替预测偏移量,我们预测相对于网格单元位置的位置坐标,ground truth 的范围是0到1。
与使用 anchor box 的版本相比,使用 dimension clusters 以及直接预测边界框中心位置可使 YOLO 提高近5%。
Fine-Grained Features(细粒度特征)
修改后的 YOLO 可以预测 13×13 大小的特征图上的检测结果。 这对于大型对象已经足够,更细粒度的特征有利于定位较小对象。
我们再网络中添加一个 passthrough layer,该层将相邻特征堆叠到不同的通道而不是空间位置中,从而将高分辨率特征与低分辨率特征连接在一起( 26 × 26 × 512 → 13 × 13 × 2048)
扩展的特征图可以得到更细粒度的特征,使性能提高了 1%。
Multi-Scale Training
为了使 YOLOv2 对不同尺寸的图像都鲁棒,训练时随着迭代改变网络,每 10 个 batch 随机选择一个新的图像尺寸训练。这个机制强制网络学会预测不同尺寸的图片。
3. Faster
我们希望 YOLOv2 检测时不但准还要快。
YOLO框架使用基于Googlenet架构的自定义网络, 它比 VGG-16 快,但精度比 VGG-16 稍差。
Darknet-19
YOLOv2 的基础模型是新提出的 Darknet-19,它有 19 个卷积层和 5 个最大池化层。在 ImageNet 上的性能为 72.9% 的 top-1 accuracy 和 91.2% 的 top-5 accuracy。
Darknet-19 是在之前网络的基础上设计的,使用批量归一化来稳定训练,加快收敛速度,并使模型正规化。
Training for classification
初始训练的图片是 224 × 224,稍后在更大尺寸(448)图像上微调网络,在更高分辨率的图像上网络的性能为 76.5% 的 top-1 accuracy 和 93.3% 的 top-5 accuracy。
Training for detection
修改网络:删除最后一个卷积层,并在三个 3×3 卷积层上分别添加 1024 个 filter,每个 filter 再加上最终的1×1卷积层以及需要检测的输出数量,来修改此网络以进行检测。
4. Stronger
我们提出了一种联合训练分类和检测数据的机制——把检测和分类数据混合,训练过程中遇到带标签的检测图像,就基于 YOLOv2 整个损失函数进行反向传播,遇到分类图像,只反向传播网络的分类损失。
Challenge
检测数据集的 lable 少且普通,分类数据集的 lable 多且具体,如果我们想在两个数据集上训练,就得把它们的标签合并起来。
很多分类方法都用一个 softmax layer ,但它的前提是假设所有类互斥(mutually exclusive),但我们的数据集类别是不都是互斥的(有可能是包含的例如狗和金毛犬),所以我们使用了一个多标签模型来组合数据集(无互斥的要求),也就是多个 softmax 。
Hierarchical classification
大多数分类方法都假定标签采用扁平结构,但是对于组合数据集我们需要层次化的结构。
ImageNet labels 来源于 WordNet(语言数据集),因为语言比较复杂,因此标签采用有向图结构。在这里,作者把数据集的结构简化为结构树(hierarchical tree)。
通过改造图,最后得到一个 WordTree,这是一个视觉概念的层次模型。树的每个节点/标签都能用条件概率表示:
一个节点(lable)的具体概率可以这样计算:
这样每个节点/标签都有自己的概率,解决了类别之间不互斥的问题,就能在检测集和分类集上联合训练。
使用与以前相同的训练参数,我们的分层Darknet-19达到71.9%的top-1准确性和90.4%的top-5准确性。
Joint classification and detection
现在我们可以使用WordTree合并数据集,我们可以在分类集和检测集上训练我们的联合模型。
数据集组成是 COCO detection dataset 和 ImageNet 中的 9000 个类,相应的 WordTree 有 9418 个类。
在这个数据集上,使用基础模型 YOLOv2 训练得到的模型称为 YOLO9000。方法就是本节开始提到的联合训练机制。分类损失中,如果标签为“狗”,预测为更具体的“金毛犬”,则预测错误。
通过联合训练,YOLO9000 学会了使用 COCO 中的检测数据来检测图像,并且学会了使用 ImageNet 中的数据对这些对象分类。
5. Conclusion
总结还是围绕贡献:两个模型,两个方法。
本文提出的两个模型 YOLOv2 和 YOLO9000,它们之间的关系是:
- YOLOv2 是 YOLOv1 的改进版本,它比 YOLOv1 检测得更准更快(第 2 3 节的介绍);
- YOLO9000 是 YOLOv2 在组合数据集上联合训练后得到的可检测9000多个类别的目标检测系统。(第 4 节的介绍)
本文提出的两个方法主要用于数据集的联合训练:
- 用 WordTree 表示图像标签可以组合检测和分类数据集;
- 联合训练机制解决了在组合数据集上如何利用两类数据的问题。