参考 YOLO v2 - 云+社区 - 腾讯云
摘要
我们引入了YOLO9000,一个最先进的,实时的物体检测系统,可以检测超过9000个物体类别。首先,我们提出了YOLO检测方法的各种改进,既有新颖的,也有来自之前工作的。改进后的YOLOv2模型在PASCAL VOC和COCO等标准检测任务上是最先进的。使用一种新颖的多尺度训练方法,同样的YOLOv2模型可以在不同的尺寸下运行,在速度和准确性之间轻松权衡。在67帧的FPS下,YOLOv2在VOC 2007上获得76.8 mAP。在40帧/秒的FPS下,YOLOv2的mAP值为78.6,优于使用ResNet和SSD的Faster RCNN等最先进的方法,同时运行速度仍然非常快。最后提出了一种目标检测与分类联合训练的方法。利用该方法,我们在COCO检测数据集和ImageNet分类数据集上同时训练YOLO9000。我们的联合训练允许YOLO9000预测没有标记检测数据的对象类的检测。我们在ImageNet检测任务上验证了我们的方法。YOLO9000在ImageNet检测验证集上获得19.7 mAP,尽管200个类中只有44个类的检测数据。在COCO以外的156门课上,YOLO9000得了16.0 mAP。但YOLO只能检测200多个类;它预测了9000多种不同目标类别的探测结果。而且它仍然是实时运行的。
1、介绍
通用目标检测应该是快速、准确的,并且能够识别各种各样的目标。自引入神经网络以来,检测框架变得越来越快速和准确。然而,大多数检测方法仍然局限于一小组目标。
与分类和标记等其他任务的数据集相比,当前的目标检测数据集是有限的。最常见的检测数据集包含数千到数十万张图像,带有数十到数百个标签。分类数据集包含数以百万计的图像,其中包含数万或数十万个类别。
我们希望检测能扩展到物体分类的层次。然而,对图像进行检测的标签远比对分类或标签的标签昂贵(标签通常是用户免费提供的)。因此,在不久的将来,我们不太可能看到与分类数据集相同规模的检测数据集。
我们提出了一种新的方法来利用我们已经拥有的大量分类数据,并使用它来扩展当前检测系统的范围。我们的方法使用对象分类的层次视图,允许我们将不同的数据集组合在一起。
我们还提出了一个联合训练算法,使我们能够训练目标检测器的检测和分类数据。我们的方法利用标记检测图像学习精确定位目标,同时利用分类图像增加词汇量和鲁棒性。
使用这种方法,我们训练了YOLO9000,一个实时物体检测器,可以检测超过9000种不同的物体类别。首先,我们对基础的YOLO检测系统进行了改进,生产出了最先进的实时检测仪YOLOv2。然后我们使用我们的数据集组合方法和联合训练算法对来自ImageNet的9000多个类和来自COCO的检测数据进行训练。
二、更好
与Fast R-CNN相比YOLO具有明显的定位误差,与基于区域建议的方法相比YOLO具有更低的召回率。因此在YOLO9000中主要关注在保持分类精度的同时提升召回率和定位精度。
计算机视觉通常倾向于更大、更深的网络。更好的性能通常取决于训练更大的网络或集成多个模型在一起。然而,对于YOLOv2,我们想要的是一种更精确、速度更快的探测器。我们没有扩大网络的规模,而是简化了网络,然后使表示更容易学习。我们从过去的工作中收集了各种想法,用我们自己的新概念来提高YOLO的性能。结果总结见表2。
批归一化
批处理标准化在消除对其他形式的正则化的需要的同时,显著改善了收敛性。通过在YOLO中添加所有卷积层的批处理标准化,我们得到了超过2%的mAP改进。批处理规范化也有助于模型的规范化。通过批处理归一化,可以在不过度拟合的情况下从模型中去除误差。
高分辨率的分类器
所有最先进的检测方法都使用预先在ImageNet上训练好的分类器。AlexNet大多数分类器操作输入图像小于256×256。将原YOLO训练分类器网络的分辨率为224×224,把分辨率提升到448来进行检测。这意味着网络必须同时切换到学习对象检测和调整新的输入分辨率。
对YOLOv2首先在ImageNet上首先在448x448完全分辨率上微调分类网络这给网络时间来调整它的滤波器更好地工作在更高的分辨率输入。然后,对检测结果网络进行微调。这个高分辨率的分类网络增加了将近4%的mAP。
与Anchor Box的卷积
YOLO使用卷积特征提取器上的全连接层直接预测bounding box的坐标,而不是像Faster R-CNN那样使用手工挑选的先验来预测bounding box。在Faster R-CNN中,仅使用卷积层的区域建议网络(RPN)可以预测anchor boxes的偏移量和置信度。由于预测层是卷积的,RPN在feature map的每个位置预测这些偏移。预测偏移量而不是坐标简化了问题,使网络更容易学习。由于预测层是卷积的,RPN在feature map的每个位置预测这些偏移。预测偏移量而不是坐标简化了问题,使网络更容易学习。
从YOLO中移除全连接层,并使用anchor box 来预测bounding box。首先,消除了一个池化层,使网络的卷积层的输出具有更高的分辨率。也对网络进行减少操作使得输入图像416而不是448×448。这样做是因为想在feature map中有奇数个位置,所以只有一个中心单元格。目标,尤其是大的目标,往往占据图像的中心,最好在中心有一个位置来预测这些物体,而不是四个都在附近的地点。YOLO卷积层对图像进行32倍的下采样,因此使用一个输入图像416中得到一个13×13的feature map。
当移动anchor box时,也将类预测机制从空间位置解除出来,而不是为每个锚框预测类和目标。在YOLO之后,目标预测仍然预测ground truth和所提box的IOU,而分类概率则预测该类在有目标的情况下的条件概率。
使用锚框时,我们的精确度略有下降。YOLO只能预测每张图片有98个框,但是如果使用锚框,我们的模型可以预测超过1000个框。如果没有锚框,我们的中间模型得到69.5 mAP,召回率为81%。有了锚框,我们的模型mAP为69.2,召回率为88%。尽管mAP减少了,但回忆率的增加意味着我们的模型有更多的改进空间。
维度聚类
当YOLO与anchor box一起使用时,遇到两个问题。首先,box的尺寸是手工挑选的。网络可以学会适当地调整box,但如果为网络选择更多的先验知识来开始,可以使网络更容易地学会预测好的检测。
没有手工选择先验,而是在训练集的边界框上运行k-means聚类,自动找到好的先验。如果欧几里得距离下的标准欧拉距离,那么大的box会比小的box产生更多的误差。然而,真正想要的是能够得到好的IOU分数的先验知识,这与盒子的大小无关。因此,对距离度量使用:
对k的不同值运行k均值,用最近的质心绘制平均IOU,选择k = 5时可得到模型复杂度和高召回率之间的一个很好的折衷。聚类中心明显得和手工挑选的anchor box不同。有更少的矮宽的box和高窄的box。
将平均IOU与最接近之前的聚类策略和表1中手动选择的锚盒进行比较。在只有5个先验的情况下,质心的表现类似于9个锚箱,平均欠条为61.0,而平均IOU为60.9。如果使用9个质心,会看到一个更高的平均借据。这表明使用k-means来生成边界框将以更好的表示方式启动模型,并使任务更容易。
直接位置预测
当与YOLO和anchor一起使用时,遇到的第二个问题:模型不稳定性,特别是在早期迭代中。大部分的不稳定性来自于对盒子(x, y)位置的预测。在区域建议网络中,网络预测值tx和ty, (x, y)中心坐标计算方法为:
例如,预测将把box向右移动anchor box的宽度,将把box向左移动anchor box左移相同的数量。
这个公式是不受约束的,所以任何anchor box都可以停在图像中的任何一点,不管box预测的是什么。在随机初始化的情况下,该模型需要很长时间才能稳定地预测合理的偏移量。
没有预测偏移量,而是采用YOLO的方法,预测相对于网格单元位置的位置坐标。这限制了ground truth落在0和1之间。使用逻辑激活来约束网络的预测落在这个范围内。
该网络预测在输出特征映射中的每个单元上有5个bounding box。该网络预测每个边界框的5个坐标,, , , 和。如果单元格与图像左上角偏移,且bounding box先验知识具有宽度和高度,则预测对应于:
由于对位置预测进行了约束,使得参数化更容易学习,使网络更加稳定。使用维度聚类以及直接bounding box中心位置,与使用维度聚类的版本相比,YOLO几乎提高了5%。
细粒度特征
改进的YOLO在13×13的feature map上预测检测。虽然这对于大型对象来说已经足够了,但在定位比较小的目标时用细粒度的特征比较好。速度更快的R-CNN和SSD都在网络中不同feature map上运行建议网络,以获得一系列的分辨率。我们采取一种不同的方法,只需添加一层透传带从26x26早期的特征上获取特征。
透传层通过将相邻的特征叠加到不同的通道而不是空间位置来连接高分辨率特征和低分辨率特征,类似于ResNet中的标识映射。使用这种方法后26x26x512的feature map能转化成13x13x2048的feature map,能和原始的特征连接起来。我们的检测器运行在这个扩展的feature map之上,这样它就可以访问细粒度的特性,这将使性能略微提高1%。
多尺度训练
原始YOLO输入分辨率为448×448,通过添加anchor box,把分辨率变为416×416。但是,由于模型只使用卷积层和池化层,因此可以动态调整它的大小。本文的目的是YOLOv2能够在不同大小的图像上运行,因此将其训练到模型中。
不是固定输入图像的大小,而是每隔几次迭代就改变网络。每10批网络随机选择一个新的图像尺寸大小。由于模型向下采样32倍,从以下32的倍数:{320,352,…608 }。因此,最小的选择是320×320,最大的是608×608。将网络调整到那个维度并继续训练。
这种机制迫使网络学会跨各种输入维度进行良好的训练。这意味着同一个网络可以预测不同分辨率下的探测结果。网络在更小的尺寸下运行得更快,所以YOLOv2在速度和准确性之间提供很容易的折中。在低分辨率下,YOLOv2操作起来就像一个简练、相当准确的探测器。在288×288几乎和Fast R-CNN具有相同的mAP。这使得它非常适合于较小的gpu、高帧率视频或多视频流。
3、更快
我们希望检测是准确的,但我们也希望它是快速的。大多数检测应用,如机器人或自动驾驶汽车,依赖于低延迟预测。为了最大化性能,我们从头开始设计YOLOv2的速度。
大多数检测框架依赖VGG-16作为基本特征提取器[17]。VGG-16是一个强大的,准确的分类网络,但它是不必要的复杂。VGG-16的卷积层需要306.9亿浮点运算,以224 × 224的分辨率单次通过一张图像。
YOLO框架使用基于Googlenet架构的自定义网络。这个网络比VGG-16更快,向前传球只使用85.2亿次操作。然而,它的准确性略低于VGG-16。对于单一作物,前5位精度为224 × 224, YOLO的定制模型获得88.0% ImageNet,相比之下VGG-16的90.0%。
DarkNet-19
我们提出了一个新的分类模型作为YOLOv2的基础。我们的模型建立在网络设计之前的工作以及该领域的常识之上。类似于VGG模型,我们大多使用3 × 3滤波器,并在每个池化步骤[17]后增加两倍的通道数量。在网络中网络(NIN)的研究之后,我们使用全局平均池化来进行预测,以及1 × 1过滤器来压缩3 × 3卷积之间的特征表示。我们使用批量归一化来稳定训练,加快收敛速度,并对[7]模型进行正则化。
我们的最终模型,称为Darknet-19,有19个卷积层和5个最大池化层。有关完整描述,请参见表6。Darknet-19只需要55.8亿次操作来处理一幅图像,但在ImageNet上达到了前1位精度的72.9%和前5位精度的91.2%。
训练检测
我们通过删除最后的卷积层来修改这个网络来进行检测,取而代之的是添加三个3 × 3卷积层,每个卷积层带有1024个过滤器,然后是最后一个1 × 1卷积层,其中包含我们检测所需的输出数量。对于VOC,我们预测5个框,每个框有5个坐标,每个盒子有20个类,所以有125个滤波器。我们还从最后的3 × 3 × 512层添加了一个直通层到倒数第二层卷积层,以便我们的模型可以使用细粒度特征。
我们训练网络160个epoch,初始学习率为,在60和90个epoch时除以10。我们使用0.0005的重量衰减和0.9的momentum。我们使用了与YOLO和SSD类似的数据增强,包括随机crop、颜色转换等。我们对COCO和VOC使用相同的训练策略。
4、更强
我们提出了一种联合训练分类和检测数据的机制。我们的方法使用标记的图像进行检测,以学习特定的检测信息,如边界盒坐标预测和目标,以及如何分类常见的目标。它使用只有类标签的图像来扩展它可以检测的类别数量。
在训练过程中,我们混合了检测和分类数据集的图像。当我们的网络看到标记为检测的图像时,我们可以基于完整的YOLOv2损失函数进行反向传播。当它看到分类图像时,我们只从体系结构的分类特定部分反向传播损失。
这种方法存在一些挑战。检测数据集只有通用对象和通用标签,如“狗”或“船”。分类数据集具有更广泛和更深层次的标签范围。ImageNet拥有超过100个品种的狗,包括“诺福克梗”、“约克郡梗”和“贝灵顿梗”。如果我们想在两个数据集上训练,我们需要一个一致的方法来合并这些标签。
大多数分类方法在所有可能的分类中使用softmax层来计算最终的概率分布。使用softmax假设类是互斥的。这就给组合数据集带来了问题,例如,您可能不想使用这个模型组合ImageNet和COCO,因为类“Norfolk terrier”和“dog”并不是互斥的。
我们可以使用一个多标签模型来组合不假设互斥的数据集。这种方法忽略了我们所知道的关于数据的所有结构,例如,所有COCO类都是互斥的。
层级分类
ImageNet标签是从WordNet中提取的,WordNet是一个语言数据库,它组织概念以及它们与[12]的关系。在WordNet中,“Norfolk terrier”和“Yorkshire terrier”都是“terrier”的下义词,“terrier”是“hunting dog”的一种,“terrier”是“dog”的一种,“Yorkshire”是“canine”的一种等等。大多数分类方法都假设标签的结构是扁平的,但是在组合数据集时,结构正是我们所需要的。
WordNet的结构是有向图,而不是树状图,因为语言很复杂。例如,“dog”既是“canine”的一种,也是“domestic animal”的一种,它们都是WordNet中的同义词。我们不使用完整的图结构,而是根据ImageNet中的概念构建一个层次树来简化问题。
为了构建这棵树,我们检查ImageNet中的可视名词,并查看它们在WordNet图中到根节点(在本例中是“物理对象”)的路径。许多synset在图中只有一条路径,所以首先我们将所有这些路径添加到树中。然后我们迭代地检查剩下的概念,并添加尽可能少地增长树的路径。所以如果一个概念有两条到根的路径其中一条路径会给树增加三条边而另一条路径只增加一条边,我们就会选择更短的路径。
最终的结果是WordTree,一个视觉概念的层次模型。为了使用WordTree进行分类,我们在每个节点上预测给定同义词集的每个下义词的概率。例如,在“梗犬”节点,我们预测:
如果我们想要计算一个特定节点的绝对概率,我们只需要沿着这棵树的路径到根节点,然后乘以条件概率。所以如果我们想知道一张图片是否是诺福克梗,我们会计算:
出于分类目的,我们假设图像包含一个目标:。
为了验证这种方法,我们在使用1000类ImageNet构建的WordTree上训练Darknet-19模型。为了构建WordTree1k,我们添加了所有中间节点,将标签空间从1000扩展到1369。在训练过程中,我们向树上传播地面真相标签,这样,如果一幅图像被标记为“诺福克梗”,它也会被标记为“狗”和“哺乳动物”,等等。为了计算条件概率,我们的模型预测了一个1369值的向量,我们计算了所有sysnset上的softmax,这些sysnset都是相同概念的下义词,参见图5。
使用与之前相同的训练参数,我们的分级Darknet-19达到71:9%的top-1准确率和90:4%的top-5准确率。尽管增加了369个额外的概念,并且让我们的网络预测一个树形结构,我们的准确性只是略有下降。以这种方式进行分类也有一些好处。在新的或未知的对象类别上,性能会略有下降。例如,如果网络看到了一张狗的图片,但不确定它是什么类型的狗,它仍然会以高置信度预测“狗”,但在下义词中分布的置信度较低。
这个公式也适用于检测。现在,我们不再假设每张图像都有一个对象,而是使用YOLOv2的对象预测器来给出(物理目标)的值。探测器预测一个边界框和概率树。我们向下遍历这棵树,在每次分割时取置信度最高的路径,直到达到某个阈值,然后预测目标类。
WordTree数据集合并
我们可以使用WordTree以一种合理的方式将多个数据集组合在一起。我们只需将数据集中的类别映射到树中的synsets。图6显示了使用WordTree组合来自ImageNet和COCO的标签的示例。WordNet是非常多样化的,所以我们可以对大多数数据集使用这种技术。
联合分类和检测
既然我们可以使用WordTree组合数据集,我们就可以训练我们的联合模型进行分类和检测。我们想要训练一个超大规模的检测器,所以我们使用COCO检测数据集和完整ImageNet版本的顶级9000类创建了我们的组合数据集。我们还需要评估我们的方法,以便在ImageNet检测挑战中添加任何尚未包含的类。这个数据集对应的WordTree有9418个类。ImageNet是一个更大的数据集,所以我们通过对COCO进行过采样来平衡数据集,这样ImageNet只比原来大4:1。
利用这个数据集,我们训练YOLO9000。我们使用基本的YOLOv2体系结构,但只有3个优先级而不是5个,以限制输出大小。当我们的网络看到一个检测图像,我们反向传播损失正常。对于分类损失,我们只反向传播在标签对应级别或以上的损失。例如,如果标签是“狗”,我们会将任何错误分配给树中更低的预测,“德国牧羊犬”对“金毛寻回犬”,因为我们没有那个信息。
当它看到一个分类图像时,我们只反向传播分类丢失。要做到这一点,我们只需找到预测该类的最高概率的边界框,然后在预测的树上计算损失。我们还假设预测框与地面真理标签至少重叠:3个IOU,我们基于这一假设反向传播客观性损失。通过这种联合训练,YOLO9000学会使用COCO中的检测数据在图像中寻找目标,并学会使用来自ImageNet的数据对各种各样的目标进行分类。
我们在ImageNet检测任务上评估YOLO9000。ImageNet的检测任务与COCO共享了44个对象类别,这意味着YOLO9000只看到了大部分测试图像的分类数据,而没有看到检测数据。YOLO9000在不相交的156个对象类上总共得到19.7 mAP和16.0 mAP,它从未看到任何标记的检测数据。这个mAP比DPM的结果要高,但是YOLO9000是在不同的数据集上训练的,只有部分监督[4]。它还可以同时检测其他9000个对象类别,都是实时的。
当我们在ImageNet上分析YOLO9000的表现时,我们发现它能很好地学习新的动物物种,但在学习衣物和设备等类别时却很困难。
新的动物更容易学习,因为客观预测很好地概括了COCO中的动物。相反,COCO没有任何类型的服装的边框标签,只针对人,所以YOLO9000努力成为“太阳镜”或“泳裤”等模特类别。
5、结论
我们推出YOLOv2和YOLO9000,实时检测系统。YOLOv2是最先进的,在各种检测数据集上比其他检测系统更快。此外,它可以在各种图像尺寸下运行,以提供速度和精度之间的平滑权衡。
YOLO9000是一个实时框架,通过联合优化检测和分类,可以检测9000种以上的对象类别。我们使用WordTree来组合来自不同来源的数据,并使用联合优化技术在ImageNet和COCO上同时进行训练。YOLO9000是缩小检测和分类数据集大小差距的有力一步。
我们的许多技术都适用于物体探测之外的领域。ImageNet的WordTree表示为图像分类提供了更丰富、更详细的输出空间。使用分层分类的数据集组合在分类和分割领域是有用的。像多尺度训练这样的训练技术可以在各种视觉任务中发挥作用。
对于未来的工作,我们希望在弱监督图像分割中使用类似的技术。我们还计划在训练过程中使用更强大的匹配策略为分类数据分配弱标签来提高检测结果。计算机视觉拥有大量的标记数据。我们将继续寻找将不同的数据来源和结构结合在一起的方法,以构建更强大的视觉世界模型。