YOLO v2: Better, Faster, Stronger
论文地址:https://arxiv.org/pdf/1612.08242.pdf
项目地址:https://pjreddie.com/darknet/yolo900/
本文介绍了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多种不同对象类别的检测结果。它仍然实时运行。
通用目标检测应快速、准确,并能够识别多种物体。随着神经网络的引入,检测框架变得越来越快和准确。然而,大多数检测方法仍然局限于一小部分对象集。与分类和标记等其他任务的数据集相比,当前的对象检测数据集是有限的。最常见的检测数据集包含数千到数十万张图像和数十到数百个标签的。而分类数据集有数百万张图像和数万或数十万个类别的。
我们希望检测能够扩展到对象分类的级别。然而,用于检测的标签图像比用于分类或标签昂贵得多(标签通常是用户免费提供的)。因此,我们不太可能做到检测数据集与分类数据集达到相同的规模。
我们提出了一种新的方法来利用大量的分类数据,并利用它来扩大当前检测系统的范围。我们的方法使用对象分类的层次视图,允许我们将不同的数据集组合在一起。
我们还提出了一种联合训练算法,允许我们在检测和分类数据上训练目标检测器。我们的方法利用标记的检测图像来学习精确定位对象,同时它使用分类图像来增加其多样性和鲁棒性
总结:使用这种方法训练YOLO9000实时对象检测器,可以检测超过9000种不同的对象类别。首先,我们改进了基础YOLO检测系统,以生产YOLOv2,一个最先进的实时的检测器。然后利用我们的数据集组合方法和联合训练算法训练ImageNet的9000多类模型以及COCO的检测数据。
对于最先进的检测系统,YOLO存在各种缺点。YOLO与FastR-CNN相比的误差分析表明,YOLO产生了大量的定位错误。此外,与基于区域提案的方法相比,YOLO的召回率相对较低。因此,我们主要关注于在提高召回率和定位准确率的同时,同时保持分类的准确性。
计算机视觉通常倾向于**更大、更深层次的网络。更好的性能通常取决于训练更大的网络或将多个模型集成在一起。然而,对于YOLOv2,我们想要一个更准确的且快速的检测器。我们没有扩大网络,而是简化了网络,然后使表示更容易学习。我们将来自过去工作中的各种想法与我们自己的新颖概念相结合,以提高YOLO的性能。结果汇总见表2。
通过在YOLO中的所有卷积层上添加批处理归一化,我们在mAP中得到了2%以上的改进。批处理规范化还有助于将模型规则化。通过批归一化,我们可以在不进行过拟合的情况下从模型中去除dropout
对于K的选择,实验了多种值并画出了平均IOU曲线,选择 k = 5 作为模型复杂度和高 召回率之间
的良好权衡
当k为5时,质心的表现类似于 9 锚框,平均 IOU 为 61.0 对比于 60.9。 如果使用 9 个质心,
看到更高的平均 IOU。 这表明使用 k-means 生成的边界框会以更好的表示方式启动模型,使
任务更容易学习
例如,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,同时仍高于实时速度运行。
不同的尺寸使用同一网络结构及网络权重
我们希望检测是准确的,但也希望它是快速的。大多数检测应用程序,如机器人技术或自动驾驶汽车,都依赖于低延迟预测。因此,为了最大化性能,因此设计了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只需要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,随机裁剪,颜色变化等;
本文提出了一种联合训练分类和检测数据的机制。思路是使用有标记的图像的图像进行检测,以学习特定于检测的信息,如边界框坐标预测和对象预测,以及如何对常见对象进行分类;使用仅具有类标签的图像来扩展它可以检测到的类别的数量。
在训练期间,混合来自检测和分类图像数据集。当网络看到的图像是标记图像时候,可以基于完整的YOLO v2损失函数进行反向传播;当看到分类图像时,只反向传播网络结构特定与分类部分的损失;
这种方法提出了一些挑战。检测数据集只有常见的对象和一般标签,如“狗”或“船”。分类数据集有更广泛和更深的标签范围。ImageNet有100多种狗。如果我们想在两个数据集上进行训练,需要一个连贯的方法来合并这些标签。大多数分类方法在所有可能的类别中使用softmax来计算最终的概率分布。使用softmax假设类是相互斥的。这给组合数据集带来了问题,例如,不希望使用这个模型组合ImageNet和COCO,因为“Norfolk terrier”和“dog”这两个类并不是相互排斥的。因此,可以使用多标签模型来合并不假设互排斥的数据集。这种方法忽略了所知道的关于数据的所有结构,例如所有的COCO类都是相互斥的。
最终的结果是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上的表现时,我们看到它很好地学习了新的动物物种,但在服装和设备等学习类别上表现不好。
本文介绍了YOLOv2和YOLO9000实时检测系统。YOLOv2是最先进的,并且在各种检测数据集实验表明,它比其他的检测系统更快。此外,它可以在各种图像大小下运行,以提供速度和精度之间的权衡。
YOLO9000是一个实时框架,通过联合优化检测和分类来检测9000多个对象类别。使用WordTree结合来自不同来源的数据和联合优化技术,在ImageNet和COCO上同时训练。YOLO9000是缩小检测和分类之间的数据集大小差距的一步。
ImageNet的文字树表示为图像分类提供了一个更丰富、更详细的输出空间。使用层次分类的数据集组合在分类和分割领域中是有用的。像多规模训练技术可以在各种视觉任务中提供好处。对于未来的工作,希望使用类似的技术进行弱监督图像分割。此外还计划使用更强大的匹配策略来改进检测结果,在训练期间为分类数据分配弱标签。计算机视觉拥有大量的标记数据, 将继续寻找方法,将不同的数据来源和结构结合在一起,以形成更强大的视觉世界模型。
基于聚类获得anchor
基于检测数据集+分类数据集 扩充检测类别
为了改进yolov1的定位误差、较低的召回率。提出yolov2, 关注改善召回和定位,同时保持分类准确性
相较于yolov1,提出的改进点:
直接位置中心预测:在rpn网络模型不稳定,预测框xy的位置,还是预测网格单元位置的偏移量。
网络预测每个边界框的5个坐标tx, ty, tw, th,to,
约束位置预测,因此参数化更容易学习,使网络更稳定
细粒度特征: 借鉴于resnet网络的思想,使用直通层将相邻特征堆叠到不同的通道,将较高分辨率的特征与低分辨率特征连接起来。26x26
多尺度训练:分辨率由yolov1 448x448 变成416x416, 且网络模型仅使用卷积与池化层,可以动态地调整大小,在不同尺寸上运行,每10批次网络随机选择一个新的图像尺寸, 32的倍数(320,352,…,608)。同一网络可以预测不同分辨率的检测。
一些策略能提升mAP:
darknet19:
有 19 个卷积层和 5个最大池化层
可以使用多标签模型来组合不假设互斥的数据集
分类图像时候,只会反向传播分类损失;检测图像时候,是全部loss