yolo9000 Better, Faster, Stronger
YOLO v2: Better, Faster, Stronger
论文地址:https://arxiv.org/pdf/1612.08242.pdf
项目地址:https://pjreddie.com/darknet/yolo900/
abstract
本文介绍了YOLO9000, 能够检测超过9000个物体种类,且是当时最好的实时检测算法。使用了一种新颖的多尺度训练方法,相同yolov2模型可以以不同的尺寸运行,在速度和准确度之间提供简单的权衡。在voc 2007上67FPS时获得76.8 mAP, 40FPS时获得78.6mAP。
最后提出了一种联合训练目标检测和分类的方法。使用这种方法,我们在COCO检测数据集和ImageNet分类数据集上同时训练YOLO9000。联合训练允许YOLO9000预测没有标记检测数据的对象类的检测。我们在ImageNet检测任务上验证了该方法。YOLO9000在ImageNet检测验证集上获得19.7mAP,尽管200个类中只有44个类有检测数据。在不在COCO的156个类中,YOLO9000得到16.0mAP,但是YOLO可以检测到超过200个类;它预测了对9000多种不同对象类别的检测结果。它仍然实时运行。
1. 介绍
通用目标检测应快速、准确,并能够识别多种物体。随着神经网络的引入,检测框架变得越来越快和准确。然而,大多数检测方法仍然局限于一小部分对象集。与分类和标记等其他任务的数据集相比,当前的对象检测数据集是有限的。最常见的检测数据集包含数千到数十万张图像和数十到数百个标签的。而分类数据集有数百万张图像和数万或数十万个类别的。
我们希望检测能够扩展到对象分类的级别。然而,用于检测的标签图像比用于分类或标签昂贵得多(标签通常是用户免费提供的)。因此,我们不太可能做到检测数据集与分类数据集达到相同的规模。
我们提出了一种新的方法来利用大量的分类数据,并利用它来扩大当前检测系统的范围。我们的方法使用对象分类的层次视图,允许我们将不同的数据集组合在一起。
我们还提出了一种联合训练算法,允许我们在检测和分类数据上训练目标检测器。我们的方法利用标记的检测图像来学习精确定位对象,同时它使用分类图像来增加其多样性和鲁棒性
总结:使用这种方法训练YOLO9000实时对象检测器,可以检测超过9000种不同的对象类别。首先,我们改进了基础YOLO检测系统,以生产YOLOv2,一个最先进的实时的检测器。然后利用我们的数据集组合方法和联合训练算法训练ImageNet的9000多类模型以及COCO的检测数据。
2 better
对于最先进的检测系统,YOLO存在各种缺点。YOLO与FastR-CNN相比的误差分析表明,YOLO产生了大量的定位错误。此外,与基于区域提案的方法相比,YOLO的召回率相对较低。因此,我们主要关注于在提高召回率和定位准确率的同时,同时保持分类的准确性。
计算机视觉通常倾向于**更大、更深层次的网络。更好的性能通常取决于训练更大的网络或将多个模型集成在一起。然而,对于YOLOv2,我们想要一个更准确的且快速的检测器。我们没有扩大网络,而是简化了网络,然后使表示更容易学习。我们将来自过去工作中的各种想法与我们自己的新颖概念相结合,以提高YOLO的性能。结果汇总见表2。
- Batch normalization: 批归一化导致收敛的显著改进,同时消除了其他形式的正则化的需要
通过在YOLO中的所有卷积层上添加批处理归一化,我们在mAP中得到了2%以上的改进。批处理规范化还有助于将模型规则化。通过批归一化,我们可以在不进行过拟合的情况下从模型中去除dropout
- High Resolution Classififier: 高分辨率分类器,所有最先进的检测方法都使用在ImageNet上预先训练过的分类器,从AlexNet开始,更多分类器的输入大小比256x256小,原始的YOLO分类器输入大小是224x224,而检测器的输入大小增加到448x448。对于YOLOv2,首先在ImageNet上以全448×448分辨率微调10个epoch的分类网络。这给了网络时间来调整其滤波器,以更好地在更高分辨率的输入上工作。然后,对检测结果中的网络进行微调。这个高分辨率的分类网络增加了近4%的mAP。
- Convolutional With Anchor Boxes: 有anchor boxes的卷积。YOLO使用线性回归方法,利用卷积特征提取器上的完全连接层直接预测边界框的坐标。与之不同的Faster R-CNN,使用手工选择的先验边界框。仅使用卷积层,RPN就可以预测anchor boxes的偏移量和置信度。由于预测层是卷积,RPN在特征图的每个位置预测这些偏移。预测偏移量而不是坐标简化问题,并使网络更容易学习。借助于上述思想,我们移除了YOLO最后的全连接层,并使用anchor boxes来预测边界框。首先我们消除了一个池化层,以使网络的卷积层的输出具有更高的分辨率。我们还缩小了网络,以操作416维度的输入图像,而不是448×448。这样做是因为想要特征图中的奇数位置,所以有一个中心单元格。物体,特别是大型物体,往往占据图像的中心,所以在中心有一个位置来预测这些对象,而不是附近的四个点。YOLO的卷积层对图像下采样32倍,所以通过使用416的输入图像,我们得到了一个13×13(416/32)的输出特征图。使用锚盒,精度略有下降。YOLO只预测每幅图像98个盒子,但使用锚盒,我们的模型预测了超过1000个。如果没有锚盒,中间模型可以得到69.5mAP,召回率为81%。而使用锚盒,模型得到69.2mAP,召回率为88%
- Dimension Clusters:使用锚盒时候面临两个问题:1.盒子的尺寸是手工挑选,网络可以学会适当地调整框,但如果我们从网络中选择更好的先验,可以让网络更容易学习预测良好的检测。本方法不是使用手工选择先验,而是使用k-means聚类自动找到好的先验。但使用的不是标准的k-means(欧式距离),原因是这会导致大的boxes相较于小的boxes会产生更多的错误。为了想要好的IOU分数,这个分数与boxes大小无关,因此,定义距离如下:
对于K的选择,实验了多种值并画出了平均IOU曲线,选择 k = 5 作为模型复杂度和高 召回率之间
的良好权衡
当k为5时,质心的表现类似于 9 锚框,平均 IOU 为 61.0 对比于 60.9。 如果使用 9 个质心,
看到更高的平均 IOU。 这表明使用 k-means 生成的边界框会以更好的表示方式启动模型,使
任务更容易学习
- Direct location prediction: 当使用锚框时,遇到第二个问题:模型不稳定性,特别是在早期迭代期间。大多数不稳定来自于预测盒子的(x, y) 位置。而在区域建议网络中,网络预测值tx和ty,因此 (x,y)中心坐标计算为
例如,tx=1
的预测将通过锚盒的宽度将盒子向右移动,tx=−1
的预测将使它向左移动相同的量
这个公式是不受约束的,因此任何锚盒都可以在图像中的任何一点结束,无论预测盒的哪个位
置。在随机初始化时,该模型需要很长时间来稳定,以预测合理的偏移量。
因此,YOLO V2不是预测偏移量,而是遵循YOLO V1的方法,并预测相对于网格单元格的位置的
位置坐标。这将真值限制在0到1之间。该网络预测了输出特征图中每个单元格上的5个边界框。
该网络预测每个边界框、tx、ty、tw、th和to的5个坐标。如果单元格从图像的左上角被(cx、cy)
偏移,并且前面的边界框的宽度和高度为pw、ph,则预测对应于:
由于限制了位置预测,参数化更容易学习,使网络更加稳定。使用维度聚类以及直接预测边 界框的中心位置,使用锚框的版本提高了近5%;
-
Fine-Grained Features(细粒度特性): 修改后的YOLO网络预测13×13特征图上的检测。虽然这对于大型对象来说已经足够了,但它可以受益于更细粒度的特征来定位较小的对象。Faster R-CNN和SSD都在网络中的不同特征图上运行RPN网络,以获得一系列的分辨率。我们采用了一种不同的方法,简单地添加一个直通层,以26×26的分辨率提供来自早期层的特性。直通层通过将相邻特征叠加到不同的通道中,而不是空间位置,将高分辨率特征与低分辨率特征连接起来,类似于ResNet中的身份映射。将26×26×512特征映射成13×13×2048特征映射,可以与原始特征连接。使用这种方法提升性能mAP 1%
-
Multi-Scale Training:原始的YOLO输入尺寸是448x448,YOLOV2将输入尺寸调整为416x416, 由于模型只使用卷积层和池化层,所以可以动态地调整大小。希望YOLOv2能够在运行不同大小的图像上具有健壮性,所以将其训练到模型中。训练方法是每10个patch下采样32的倍数(320, 352, …, 608), 即最小尺寸是320x320, 最大是608x608。这种机制迫使网络学习充分预测各种输入维度。这意味着同一网络可以预测不同分辨率下的检测。该网络在较小的尺寸下运行得更快,因此YOLOv2提供了速度和准确性之间的简单权衡。在288×288时,它以超过90FPS的速度运行,而mAP几乎和FastR-CNN一样好。这使得它成为较小的gpu、高帧率视频或多个视频流的理想选择。在高分辨率下,YOLOv2是一个最先进的探测器,在VOC2007上有78.6mAP,同时仍高于实时速度运行。
不同的尺寸使用同一网络结构及网络权重
3 Faster
我们希望检测是准确的,但也希望它是快速的。大多数检测应用程序,如机器人技术或自动驾驶汽车,都依赖于低延迟预测。因此,为了最大化性能,因此设计了YOLO v2
大多数检测框架依赖于VGG-16作为基本特征提取器。VGG-16是一个强大的、准确的分类网络,但它是不必要的复杂网络。VGG-16的卷积层需要306.9亿浮点操作,以224×224分辨率通过单张图像。
YOLO框架使用了一个基于GoogLeNet结构的自定义网络,该网络比VGG-16更快,前向运算只需要85.2亿浮点操作,它的准确性略低于VGG-16。对于ImageNet数据集,224×224大小的top 5 精度,YOLO的定制模型获得88.0%,而VGG-16为90.0%。
- Darknet-19: 基于YOLO v2设计了一个新的分类模型。与VGG模型类似,主要使用3个×3滤波器,每个池化步骤后通道数量增加两倍。借鉴NIN(Network in Network)思想,我们使用全局平均池来进行预测,以及1×1滤波器来压缩3×3卷积之间的特征表示;使用批归一化(BN)来稳定训练,加快收敛速度,并正则化模型。网络模型命名为darknet-19;有19个卷积层和5个池化层;
Darknet-19只需要55.8亿次操作,并能在ImageNet上达到top-1 为72.9%, top-5为91.2%。
-
训练分类器:在标准的ImageNet 1000类分类数据集上训练网络160个epoch,随机梯度下降SGD优化器,起始学习率为0.1,多项式速率衰减幂次为4,L2正则权重衰减为0.0005,SGD的动量设置为0.9;数据层面,对训练数据进行了数据增强,随机裁剪、旋转、调整色调、饱和度和亮度变化。
如上所述,在对224×224的图像进行初始训练后,微调网络以输入一个更大的尺寸448x448。微调后使用上述参数进行训练,但只训练了10个epoch,并从10^−3的学习速率开始。在这个更高的分辨率下,网络达到了top-1:76.5%, top-5准确率: 93.3%;
-
训练检测器:修改网络模型进行检测,删除最后一个卷积层,并增加三个3×3卷积层与1024个滤波器,然后是最后一个1×1卷积层与我们需要检测的输出数量。对于VOC数据,预测5个boxes,以及5个坐标点以及20个类别,所以总共是5x25=125个filters。在倒数第二个卷积层加了一个传递层3×3×512,以便模型可以使用细粒特征。对网络训练160个epoch,开始学习速率为10^−3,在60和90个时代将其除以10, L2正则权重衰减为0.0005,SGD的动量设置为0.9, 数据增强类似于SSD,随机裁剪,颜色变化等;
4 Stronger
本文提出了一种联合训练分类和检测数据的机制。思路是使用有标记的图像的图像进行检测,以学习特定于检测的信息,如边界框坐标预测和对象预测,以及如何对常见对象进行分类;使用仅具有类标签的图像来扩展它可以检测到的类别的数量。
在训练期间,混合来自检测和分类图像数据集。当网络看到的图像是标记图像时候,可以基于完整的YOLO v2损失函数进行反向传播;当看到分类图像时,只反向传播网络结构特定与分类部分的损失;
这种方法提出了一些挑战。检测数据集只有常见的对象和一般标签,如“狗”或“船”。分类数据集有更广泛和更深的标签范围。ImageNet有100多种狗。如果我们想在两个数据集上进行训练,需要一个连贯的方法来合并这些标签。大多数分类方法在所有可能的类别中使用softmax来计算最终的概率分布。使用softmax假设类是相互斥的。这给组合数据集带来了问题,例如,不希望使用这个模型组合ImageNet和COCO,因为“Norfolk terrier”和“dog”这两个类并不是相互排斥的。因此,可以使用多标签模型来合并不假设互排斥的数据集。这种方法忽略了所知道的关于数据的所有结构,例如所有的COCO类都是相互斥的。
- Hierarchical classifification: 层次聚类方法,大多数分类方法都假设标签具有平坦的结构,但是对于组合数据集而言,结构正是我们所需要的。我们通过从ImageNet中的概念构建一个层次树来简化问题。为了构建这棵树,我们检查了ImageNet中的视觉名词,并查看了它们通过WordNet图到根节点的路径,在这种情况下是“物理对象”。许多同步集只有一条路径通过图,所以首先将所有这些路径添加到树中。然后,迭代地检查剩下的概念,并添加尽可能少地增长树的路径。所以,如果一个概念有两条路径到根,其中一条路径会为树添加三条边,而另一条路径会只添加一条边,最终就选择更短的路径。
最终的结果是WortTree,一个视觉概念的层次模型。为了使用WordTree进行分类,预测每个节点上给 定同步集的同步集的每个下位概率的条件概率。例如,在“terrier”节点上,预测:
如果想计算一个特定节点的绝对概率,只需沿着穿过树的路径走到根节点,然后乘以条件概率。例如:
为了分类的目的,假设图像肯定包含一个对象:Pr(physical object)=1
为了验证这种方法,在使用1000类ImageNet构建的树上训练darknet-19模型。为了构建WordTree1k, 添加了所有的中间节点,它将标签空间从1000扩展到1369。在训练过程中,前向传播真实标签的树,这样如果一个图像被标记为“诺福克梗”,它也会被标记为“狗”和“哺乳动物”,等等。为了计算条件概率,模型预测了一个为1369个值的向量,并计算了所有相同概念的系统集的softmax
使用与之前相同的训练参数,分层darknet-19达到了top-1 71.9%准确率和top-5 90.4%准确率。尽管 增加了369个额外的概念但准确性只会略有下降。以这种方式执行分类也有一些好处。新的或未知对象类 别的性能优雅地降级。例如,如果网络看到狗的图片,但不确定它是什么种狗,它仍然会以高信心预 测为“狗”;
这个公式也适用于检测。现在,不是假设每个图像都有一个对象,而是使用YOLOv2的对象性预测器 来给Pr(phsical object)的值。该探测器预测了一个边界框和树的概率,向下遍历树,在每次分割时使 用最高的置信路径,直到达到某个阈值,然后预测该对象的类别
-
Dataset combination with WordTree: 可以让数据集之间简单地进行合并;简单地将数据集中的类别映射到树中的同步集。图6显示了一个使用WordTree结合来自ImageNet和COCO的标签的例子。WordNet非常多样化,所以可以在大多数数据集上使用这种技术
-
Joint classifification and detection.: 使用WordTree组合数据集,可以训练联合模型进行分类和检测。我们想要训练一个非常大规模的检测器,所以使用COCO检测数据集和完整ImageNet发布的前9000个类来创建组合数据集。此外,还需要评估该方法,因此就添加尚未包含的ImageNet检测的其它类。该数据集对应的WordTree有9418个类。ImageNet是一个更大得多的数据集,所以通过过采样COCO来平衡数据集,这样ImageNet只比coco数据集大4倍。使用这个数据集,训练YOLO9000。使用基本的YOLOv2架构,但只有3个先验框而不是5个框来限制输出大小。当网络看到一个检测图像时,网络会正常地反向传播损失。对于分类损失,只在标签的相应级别或以上反向传播损失。
当它看到一个分类图像时,只反向传播分类损失。为了做到这一点,只需找到预测该类的最高概率的边界框,并只计算其预测树上的损失。此外,还假设预测的盒子与真实标签至少重叠了0.3 IOU,并且基于这个假设反向传播客观性损失。使用这种联合训练,YOLO9000学习使用COCO中的检测数据在图像中找到对象,并学习使用来自ImageNet的数据对这些对象进行分类。
在ImageNet检测任务上评估YOLO9000,ImageNet的检测任务与COCO共享44个对象类别,这意味着YOLO9000只看到了大多数测试图像的分类数据,而不是检测数据。YOLO9000在不相交的156个对象类上总共得到19.7mAP,而它缺从未看到过任何标记的检测数据。这个mAP高于DPM获得的结果,但是YOLO9000是在不同的数据集上进行训练的,只需要部分监督,而且还同时实时检测9000个其他对象类别。
当分析iYOLO9000在ImageNet上的表现时,我们看到它很好地学习了新的动物物种,但在服装和设备等学习类别上表现不好。
5 结论
本文介绍了YOLOv2和YOLO9000实时检测系统。YOLOv2是最先进的,并且在各种检测数据集实验表明,它比其他的检测系统更快。此外,它可以在各种图像大小下运行,以提供速度和精度之间的权衡。
YOLO9000是一个实时框架,通过联合优化检测和分类来检测9000多个对象类别。使用WordTree结合来自不同来源的数据和联合优化技术,在ImageNet和COCO上同时训练。YOLO9000是缩小检测和分类之间的数据集大小差距的一步。
ImageNet的文字树表示为图像分类提供了一个更丰富、更详细的输出空间。使用层次分类的数据集组合在分类和分割领域中是有用的。像多规模训练技术可以在各种视觉任务中提供好处。对于未来的工作,希望使用类似的技术进行弱监督图像分割。此外还计划使用更强大的匹配策略来改进检测结果,在训练期间为分类数据分配弱标签。计算机视觉拥有大量的标记数据, 将继续寻找方法,将不同的数据来源和结构结合在一起,以形成更强大的视觉世界模型。
6 提升点
-
基于聚类获得anchor
-
基于检测数据集+分类数据集 扩充检测类别
为了改进yolov1的定位误差、较低的召回率。提出yolov2, 关注改善召回和定位,同时保持分类准确性
相较于yolov1,提出的改进点:
- 使用了batch normalize, 提高收敛性,不需要其它形式的正则化,比如dropout, mAP提升2%以上;
- 输入的分辨率变大,从256x256提升为448x448, 首先在imageNet 10个迭代以上以448x448对分辨率进行微调;在检测时对生成的网络进行微调,使得mAP提升4%以上。
- 带有锚框的卷积,借鉴于Fast rcnn中的区域提议网络(RPN)的思想,删除完全连接层,使用锚框来预测边界框。缩小448–>416, 为了特征图中奇数个位置,一个中心单元。416缩小32倍,得到13x13的特征图;预测每个锚框的类和对象;yolo v1 每张图片98个候选框(7x7x2), 而使用锚框,数量超过一千个。使用锚框,map降低了0.3,但是召回率提升7%。
- 使用手工或者聚类k-means的方式获得锚框,k-means使用k=5时候平衡召回率与模型复杂性;但是度量指标不是使用的sse(误差平方和),使用的是IOU分数:
-
直接位置中心预测:在rpn网络模型不稳定,预测框xy的位置,还是预测网格单元位置的偏移量。
网络预测每个边界框的5个坐标tx, ty, tw, th,to,
约束位置预测,因此参数化更容易学习,使网络更稳定
-
细粒度特征: 借鉴于resnet网络的思想,使用直通层将相邻特征堆叠到不同的通道,将较高分辨率的特征与低分辨率特征连接起来。26x26
-
多尺度训练:分辨率由yolov1 448x448 变成416x416, 且网络模型仅使用卷积与池化层,可以动态地调整大小,在不同尺寸上运行,每10批次网络随机选择一个新的图像尺寸, 32的倍数(320,352,…,608)。同一网络可以预测不同分辨率的检测。
一些策略能提升mAP:
- 增加bn
- 更高分辨率的分类器
- 不同的卷积核
- anchor box
- 新的网络 darknet19
- 位置预测(位置偏移量)
- 直通层(直通连接 类似于resnet)
- 多尺度图像训练
- 更高分辨率的检测器
darknet19:
- 3x3卷积
- 不用全连接层,使用全局平均池化
- 1x1卷积压缩3x3的卷积之间的特征表达
- 使用BN稳定网络,加速收敛,正则化
有 19 个卷积层和 5个最大池化层
可以使用多标签模型来组合不假设互斥的数据集
分类图像时候,只会反向传播分类损失;检测图像时候,是全部loss