YOLOV2

来源:互联网 发布:php高级视频教程下载 编辑:程序博客网 时间:2024/06/05 11:10

YOLO9000:更好,更快,更强
摘要:我们介绍一个最先进的实时对象检测系统YOLO9000,可以检测超过9000个对象类别。 首先,我们提出了YOLO检测方法的各种改进,既有新颖性,也是从以前的工作中得出的。 改进型号YOLOv2是标准检测任务(如PASCAL VOC和COCO)的最先进技术。 使用新颖的多尺度训练方法,相同的YOLOv2模型可以运行在不同的大小,提供了速度和精度之间的轻松的权衡。在67 FPS下,YOLOv2在VOC 2007上获得76.8 mAP。在40 FPS下,YOLOv2获得78.6 mAP,超过最先进的方法,如具有ResNet和SSD的更快的RCNN,而运行速度明显更快。 最后,我们提出了一种联合训练对象检测和分类的方法。 使用这种方法,我们在COCO检测数据集和ImageNet分类数据集上同时训练YOLO9000。 我们的联合培训允许YOLO9000预测没有标记检测数据的对象类的检测。 我们验证我们的ImageNet检测任务的方法。 YOLO9000在ImageNet检测验证集上获得19.7 mAP,尽管只有200个类别中的44个的检测数据。 在不在COCO的156个班级上,YOLO9000获得16.0 mAP。 但YOLO可以检测到超过200个课程; 它预测超过9000个不同对象类别的检测。 它仍然运行在实时。
1. 介绍
通用对象检测应该是快速,准确,能够识别各种各样的对象。 自从引入神经网络以来,检测框架越来越快,准确。 然而,大多数检测方法仍然限制在一小组对象上。
与其他任务(如分类和标记)的数据集相比,当前对象检测数据集有限。 最常见的检测数据集包含几十万到几十万个具有数十到数百个标签的图像[3] [10] [2]。 分类数据集具有数百万个具有数十或数十万个类别的图像[20] [2]。
我们希望检测能够扩展到对象分类的级别。 然而,用于检测的标签图像要比用于分类或标记的标签要贵得多(标签通常由用户免费提供)。 因此,我们不太可能在不久的将来看到与分类数据集相同规模的检测数据集。
我们提出了一种新的方法来利用我们已经拥有的大量分类数据,并用它来扩大当前检测系统的范围。 我们的方法使用对象分类的分层视图,允许我们将不同的数据集合在一起。
我们还提出了一种联合训练算法,使我们能够对检测和分类数据进行对象检测。 我们的方法利用标记的检测图像学习精确定位对象,同时使用分类图像来增加其词汇和鲁棒性。
使用这种方法,我们训练YOLO9000,一个可以检测超过9000个不同对象类别的实时对象检测器。 首先,我们改进基础的YOLO检测系统来生产YOLOv2,这是一个最先进的实时检测器。 然后我们使用我们的数据集合方法和联合训练算法,对来自ImageNet的9000多个类别进行模型训练,以及COCO的检测数据。
我们的所有代码和预先训练的型号均可在线获取,网址为http://pjreddie.com/yolo9000/。

图1:YOLO9000。 YOLO9000可以实时检测各种对象类。
2. 更好
相对于最先进的检测系统,YOLO具有各种缺陷。 YOLO与Fast R-CNN相比的误差分析表明,YOLO产生了大量的定位误差。 此外,与区域提案方式相比,YOLO的召回率相对较低。 因此,我们主要着眼于提高召回和本地化,同时保持分类准确性。
计算机视觉通常趋向于更大,更深的网络[6] [18] [17]。 更好的表现往往取决于训练较大的网络或将多个模型合在一起。 但是,使用YOLOv2,我们需要一个更加准确的检测器。 而不是扩展我们的网络,我们简化网络,然后使表示更容易学习。 我们从过去的工作中汇集了我们自己的小说概念的各种想法,以提高YOLO的表现。 结果概况见表2。

表2:从YOLO到YOLOv2的路径。 大多数列出的设计决策导致mAP的显着增加。 两个例外是使用锚盒切换到完全卷积网络并使用新网络。 切换到锚盒风格方法增加了召回,而不改变mAP,而新的网络切割计算占33%。
批量归一化。 批量归一化导致收敛的显着改善,而不需要其他形式的正则化[7]。 通过在YOLO的所有卷积层上添加批量归一化,我们在mAP中得到超过2%的改进。 批量归一化也有助于规范模型。 通过Batch Normalization,我们可以从模型中删除dropout,而不会过度拟合。
高分辨率分类器。 所有最先进的检测方法都使用ImageNet [16]预处理的分类器。 从AlexNet开始,大多数分类器对小于256*256的输入图像进行操作[8]。 原始的YOLO在224 *224上训练分类器网络,并将分辨率提高到448进行检测。 这意味着网络必须同时切换到学习对象检测并适应新的输入分辨率。
对于YOLOv2,我们首先在ImageNet上对10个时期的448_448分辨率细分分类网络。 这给网络时间调整其过滤器以在更高分辨率的输入上更好地工作。 然后,我们在检测到的时候微调所得到的网络。 这种高分辨率分类网络使我们增加了近4%的mAP。
卷积与锚盒。 YOLO在卷积特征提取器的顶部直接使用完全连接的层来预测边界框的坐标。 而不是直接预测坐标更快的R-CNN使用挑选的先验来预测边界框[15]。 仅使用卷积层,Faster R-CNN中的区域提案网络(RPN)预测了锚点框的偏移和置信度。 由于预测层是卷积的,所以RPN在特征图中的每个位置预测这些偏移。 预测偏移而不是坐标可以简化问题,使网络更容易学习。
我们从YOLO中删除完全连接的图层,并使用锚点框来预测边框。 首先我们消除一个池化层,使网络卷积层的输出更高分辨率。 我们也缩小了网络对416输入图像的操作,而不是448*448。 我们这样做是因为我们想要在我们的功能地图中有一些奇数位置,所以有一个单一的中心单元格。 对象,特别是大型物体,往往占据图像的中心,所以在中心有一个位置可以预测这些物体,而不是四处都在附近。 YOLO的卷积层将图像缩小了32倍,因此通过使用416的输入图像,我们得到13 *13的输出特征图。
当我们移动到锚盒时,我们也将类预测机制与空间位置分离,而是预测每个锚盒的类和对象。 在YOLO之后,对象性预测仍然预测了地面真相的IOU和所提出的框,并且类预测预测了该类有条件的条件概率。
使用锚盒,我们的精度略有下降。 YOLO仅预测每个图像98个盒子,但是使用锚盒,我们的模型预测了一千多个。 没有锚盒,我们的中间模型得到69:5 mAP,召回率为81%。 使用锚盒,我们的模型获得69:2 mAP,召回率为88%。 即使mAP减少,回想的增加意味着我们的模型有更多的改进空间。
维度集群。当与YOLO一起使用时,我们遇到两个问题。 首先是手动选择盒子尺寸。 网络可以学习适当地调整框,但如果我们从网络中选择更好的先验,我们可以使网络更容易学习预测好的检测。
我们不用手动选择先验,而是在训练集边界框上运行k-means聚类,以自动找到优先级。 如果我们使用欧氏距离较大的标准k-means,会比较小的盒子产生更多的错误。 然而,我们真正想要的是优先级,导致良好的IOU分数,这与箱子的大小无关。 因此,对于我们的距离度量,我们使用:

我们对k的各种值运行k-means,并绘制最接近重心的平均IOU,见图2.我们选择k = 5作为模型复杂度与高回调之间的一个很好的折衷。 集群质心与手动选择的锚盒显着不同。 短,宽的盒子和更高的,薄的盒子更少。

图2:VOC和COCO上的聚类框尺寸。我们对边界框的维数运行k均值聚类,以获得我们的模型的优先级。 左图显示了k的各种选择所得到的平均IOU。 我们发现k = 5给出了模型的召回与复杂度的很好的折衷。 正确的图像显示了VOC和COCO的相对重心。 两套优先级都有利于更薄,更高的盒子,而COCO的尺寸比VOC更大。
我们将平均IOU与我们的聚类策略之前的最接近的比较和表1中的手动选择的锚点进行比较。只有5个优先级,质心与9个锚点盒类似,平均IOU为61.0,而60.9。 如果我们使用9个质心,我们看到一个更高的平均IOU。 这表明使用k-means来生成我们的边界框可以使模型更好地表现出来,使得任务更容易学习。

表1:VOC 2007上最接近的先验的盒子的平均IOU。VOC 2007上对象的平均IOU到最接近,未修改之前使用不同的生成方法。 聚类提供比使用挑选优先级更好的结果。
直接位置预测。当使用YOLO的锚盒时,我们遇到第二个问题:模型不稳定,特别是在早期迭代期间。 大多数不稳定性来自预测箱子的(x; y)位置。 在区域提案网络中,网络预测值tx和ty,并且(x; y)中心坐标计算为:

例如,tx = 1的预测将使箱子向右移动锚箱的宽度,tx =-1的预测将向左移动相同的量。
该公式是无约束的,所以任何锚盒可以在图像中的任何点处结束,而不管什么位置预测该盒子。 随机初始化,模型需要很长时间才能稳定以预测明智的偏移。
而不是预测偏移,我们遵循YOLO的方法,并相对于网格单元的位置来预测位置坐标。 这将使地面的真相落在0和1之间。我们使用物流激活来限制网络的预测落在这个范围内。
网络预测输出特征图中每个单元格的5个边界框。 网络预测每个边界框tx,ty,tw,th和to的5个坐标。 如果单元格通过(cx; cy)从图像的左上角偏移,并且先前的边界框具有宽度和高度pw,ph,则预测对应于:

由于我们约束位置预测,参数化更容易学习,使网络更加稳定。 使用维度集群以及直接预测边界框中心位置将YOLO比使用锚盒的版本提高了近5%。
细粒度特征。此修改后的YOLO预测13*13特征图上的检测。 虽然这对于大型物体是足够的,但是它可能会从更细粒度的特征中获益,从而使较小的物体本地化。 更快的R-CNN和SSD都可以在网络中的各种功能图上运行他们的提案网络,以获得一系列解决方案。我们采取不同的方法,只需添加一个通过层,它以26 * 26分辨率带来了早期层的功能。
直通层将较高分辨率特征与低分辨率特征相连,将相邻特征叠加到不同的通道中,而不是与ResNet中的身份映射相似,而不是空间位置。 这将26 * 26 * 512功能图变成13 * 13 * 2048特征图,可以与原始特征相连。 我们的检测器运行在这个扩展的功能图上,以便它可以访问细粒度特征。 这提供了适度的1%的性能提升。

图3:具有尺寸先验和位置预测的边界框。 我们预测盒子的宽度和高度是与聚类质心的偏移量。 我们使用S形函数预测框相对于过滤器应用位置的中心坐标
多尺度训练。 原来的YOLO使用448 * 448的输入分辨率。通过添加锚盒,我们将分辨率更改为416*416。 但是,由于我们的模型仅使用卷积和层叠层,因此可以随时调整大小。 我们希望YOLOv2能够运行在不同尺寸的图像上,因此我们将其训练到模型中。
而不是修复输入图像大小,我们每隔几个迭代就改变网络。 我们的网络每10批次随机选择一个新的图像尺寸大小。 由于我们的模型下降了32倍,我们从32的倍数:{320,352,…,608}中抽出。 因此,最小的选项是320 * 320,最大的是608 * 608。我们将网络调整到该维度并继续训练。
这一制度迫使网络学习如何在各种输入方面进行预测。 这意味着同一个网络可以预测不同分辨率的检测。 网络运行速度越来越小,所以YOLOv2在速度和精度之间提供了轻松的折中。
在低分辨率下,YOLOv2作为廉价,相当准确的检测器运行。 在288 * 288,它运行在超过90 FPS,mAP几乎与Fast R-CNN一样好。 这使它成为更小的GPU,高帧率视频或多个视频流的理想选择。
在高分辨率下,YOLOv2是VOC 2007中最先进的检测器,具有78.6 mAP,同时仍然高于实时速度。 有关YOLOv2与VOC 2007中其他框架的比较,请参见表3。图4。

表3:PASCAL VOC 2007的检测框架。YOLOv2比以前的检测方法更快更准确。 它也可以以不同的分辨率运行,以便在速度和精度之间进行轻松的权衡。 每个YOLOv2条目实际上是具有相同权重的相同训练模型,只是以不同的大小进行评估。 所有时间信息都在Geforce GTX Titan X(原始,不是Pascal型号)上。

图4:VOC 2007的准确性和速度。
进一步实验。 我们在VOC 2012上培训YOLOv2进行检测。表4显示了YOLOv2与其他最先进的检测系统的比较性能。 YOLOv2的运行速度比竞争方法快得多73.4 mAP。 我们还对COCO进行培训,并与表5中的其他方法进行比较。在VOC指标(IOU = .5)上,YOLOv2获得44.0 mAP,与SSD和更快的R-CNN相当。

表4:PASCAL VOC2012检测结果。 YOLOv2与最先进的检测器(如ResNet和SSD512)的Faster R-CNN相当,是2