V1:YOLO:你只看一次(2015)
改编自本文中的YOLO会议:
相对于其他检测器的改进
- 它将目标检测重新定义为一个单一的回归问题,直接从图像像素到边界框坐标和类别概率(没有区域建议)。没有复杂的管道,它非常快。
- 与滑动窗口和基于区域建议的技术不同,它在进行预测时对图像进行全局推理。
- 它学习对象的可概括表示,并且在应用于新域或意外输入时不太可能出现故障。
YOLO:系统概述
系统将图像划分为S×S网格。如果对象的中心落入网格单元,则该网格单元负责检测该对象。对于每个栅格单元格,它预测:
B边界框,每个边界框由5个预测组成:
C条件类概率:PR(Class_i|Object)。这些概率以包含对象的网格单元为条件。无论框B的数量如何,每个网格单元只预测一组类别概率。
这些预测被编码为S×S×(B∗5+C)张量。对于Pascal VOC,S=7,B=2,C=20,因此最终的预测是7×7×30张量。该网络使用整个图像中的特征进行预测,对整个图像和图像中的所有对象进行全局推理。
在测试时,每个盒子的特定于班级的置信度分数计算如下。该分数既编码了类出现在框中的概率,也编码了预测框与对象的匹配程度。
美国有线电视新闻网与有监督的前期培训
该检测网络具有24个卷积层,紧随其后的是2个完全连接的层。在目标分辨率(224×224)的一半下,对ImageNet分类任务进行前20个卷积层(随后是平均池化层和完全连接层)的预训练。
侦察训练
为了执行检测,添加了具有随机初始化权重的四个卷积层和两个全连通层。此外,由于检测通常需要细粒度的视觉信息,因此输入分辨率提高了一倍(从224×224增加到448×448)。最后一层预测类概率和边界框坐标。
- 边界框的宽度和高度根据图像的宽度和高度进行归一化,以便它们介于0和1之间。
- 边界框x和y坐标被参数化为特定网格单元位置的偏移量,因此它们也被限定在0和1之间。
最后一层使用线性激活函数,而所有其他层使用泄漏REU:F(X)=1(x<0)(αx)+1(x≥0)(X),其中α=0.1.
虽然YOLO预测每个网格单元有多个边界框,但在训练时,每个对象只有一个边界框预测器。如果一个对象具有与地面事实最高的当前IOU,则指定一个预测器来“负责”预测该对象。这导致了边界框预测值之间的专门化。每个预测器都能更好地预测对象的特定大小、纵横比或类别,从而提高整体召回率。
在训练过程中,优化了多部分损失。
- 这里使用和平方误差,因为它很容易优化。
- 由于大盒子中的小偏差应该比小盒子中的小偏差要小,因此预测了边界盒宽度和高度的平方根。
- 使用两个参数λ_COORD和λ_NOOBJ来控制不同部分的权重。作者通过设置λ_COORD=5和λ_NOOBJ=0.5来增加定位造成的损失,减少不包含对象的盒子分类造成的损失。因为在每幅图像中,许多网格单元不包含任何对象,它们的“置信度”分数会被推向零,通常会压倒这些单元的梯度。
- 损失函数仅在该网格单元中存在对象时惩罚分类错误。
- 如果预测器对地面真值框“负责”(即,在该网格单元中具有任何预测器中最高的IOU),则它也仅惩罚边界框坐标错误。
缺点
- 由于每个网格单元只能预测B盒,并且只能有一个类,这对包围盒预测施加了很强的空间约束,并限制了模型可以预测的附近对象的数量。
- 它与成群出现的小物体搏斗,比如成群的鸟。
- 因为它学会了从数据中预测边界框,所以它很难将其推广到具有新的或不寻常的纵横比或配置的对象。
- 它使用相对粗糙的特征来预测边界框,因为该体系结构具有来自输入图像的多个下采样层。
- Lost函数将小边界框中的错误与大边界框中的错误进行相同的处理。
概述
- 通用目标检测应该能够识别各种各样的目标。然而,大多数检测方法仍然局限于一小部分对象。
- 与用于分类等其他任务的数据集相比,当前的对象检测数据集是有限的,因为标记用于检测的图像要昂贵得多。
- 为了将检测扩展到目标分类的层次,我们提出了一种新的方法来处理大量的分类数据,并利用这些数据来扩展现有的检测系统的范围。为了实现这一点,我们引入了一种联合训练算法,允许我们在检测和分类数据上训练对象检测器。该方法利用标记的检测图像学习目标定位,同时利用分类图像提高其词汇量和鲁棒性。
- 使用这种方法,我们训练了一个实时目标检测器YOLO9000,它可以检测9000多个不同的目标类别。
更好的
与Fast R-CNN相比,YOLO犯了大量的定位错误。此外,与基于区域提案的方法相比,YOLO的召回率相对较低。因此,我们主要致力于在保持分类精度的同时改进这两个问题。
批量归一化
通过对YOLO中的所有卷积层进行批量归一化,我们在MAP上得到了2%以上的改善。批次标准化也有助于模型的正规化。
高分辨率分类器
YOLOv1将分类器网络训练为224×224,并将分辨率提高到448以进行检测。因此,网络需要同时调整新的输入分辨率和学习对象检测。
对于YOLOv2,我们首先在ImageNet上以全448×448的分辨率微调分类网络10个时期,然后在检测到时微调得到的网络。这给我们带来了近4%的MAP增长。
带锚箱的卷积
YOLOv1直接预测边界框的坐标。而更快的R-CNN预测手工挑选的锚盒的偏移量。预测偏移量而不是坐标简化了问题,从而使网络更容易学习。我们从YOLOv1中删除完全连接的层,并使用锚框来预测边界框。
YOLOv2操作分辨率为416的输入图像。它的卷积层对图像进行了32倍的下采样,得到了13×13的输出特征图,并对每个锚盒进行了类别和客观性预测。在YOLOv1之后,客观性预测仍然预测基础事实和建议框的借条,而类预测预测在存在对象的情况下预测该类的条件概率。
使用锚框,我们的准确率略有下降(MAP从69.5降至69.2),但召回率有所提高(从81%升至88%)。尽管地图减少了,但召回率的增加意味着我们的模型有更大的改进空间。
维度群集
我们不再手工选择锚盒,而是在训练集的地面真实盒上运行k-means聚类,目的是自动找到好的锚盒。
如果我们使用欧几里得距离的标准k-均值,较大的盒子比较小的盒子产生更多的误差。然而,我们真正想要的是无论盒子的大小都能带来好的借条分数的前科。因此,对于我们的距离度量,我们使用:
我们对不同的k值运行k-means,并绘制具有最接近质心的平均IOU。我们选择k=5作为模型复杂性和召回率之间的良好折衷。群集质心与手工挑选的锚点有很大不同。短而宽的盒子较少,而又高又细的盒子更多。
我们比较了我们的集群策略和手工挑选的锚盒之间的最接近锚点的平均欠条。在只有5个锚点时,质心的表现与9个锚点框相似,平均IOU为61.0,而不是60.9。如果我们使用9个质心,我们看到的平均借条要高得多(67.2)。
直接位置预测
在将锚盒与YOLO一起使用时,我们会遇到模型不稳定问题,特别是在早期迭代期间。大部分不稳定性来自于预测盒子的(x,y)位置。为了稳定学习过程,我们预测相对于网格单元位置的位置坐标。这将基本事实限制在0到1之间。我们使用逻辑激活来限制网络的预测落在这个范围内。
网络在输出要素地图中的每个像元处预测5个边界框。每个边界框有5个坐标,t_x、t_y、t_w、t_h和t_o。如果单元格从图像的左上角偏移(c_x,c_y),并且前一个边界框具有宽度和高度p_w,p_h,则预测对应于:
我们预测长方体的宽度和高度为群集质心的偏移量。我们使用Sigmoid函数预测长方体相对于网格单元位置的中心坐标。
使用维度聚类,并直接预测边界框的中心位置,与没有锚定框的版本相比,YOLO提高了近5%。
细粒度要素
改进的YOLO在13×13的特征地图上预测检测。虽然这对于大型对象来说已经足够,但它可能会受益于针对较小对象的更细粒度的功能。更快的R-CNN和SSD都在网络中的各种功能地图上运行他们的提案网络,以获得一系列的分辨率。而我们只需添加一个穿透图层,以26×26分辨率从较早的图层中提取要素。
直通图层通过将相邻要素堆叠到不同的通道而不是空间位置,将高分辨率要素与低分辨率要素连接在一起,类似于ResNet中的身份映射。这使得26×26×512的特征地图变成了13×13×2048的特征地图,该特征地图可以与原始要素拼接。我们的检测器在这个扩展的功能地图上运行,这样它就可以访问细粒度的功能。这使性能略微提高了1%。
多规模培训
由于我们的模型只使用卷积和池层,因此可以在飞翔上调整大小。为了使YOLOv2对不同大小的图像具有鲁棒性,我们不固定输入图像的大小,而是让模型随机选择一个新的图像维度大小,每10批继续训练一次。图像尺寸取自32的几个倍数:{320352,…,608},因为我们的模型下采样了32倍。这种机制迫使网络学会跨各种输入维度进行预测,以便能够预测各种分辨率下的检测。
更快
暗网-19
我们在GoogLeNet体系结构的基础上提出了一种新的分类模型Darknet-19,并将其作为YOLOv2的主干。DarkNet-19有19个卷积层和5个最大汇聚层。就精度而言,它比VGG-16略差,但速度要快得多。
- 与VGG模型类似,我们主要使用3×3滤波器,并且在每个池化步骤之后将通道数增加一倍。
- 在对Network in Network(NIN)研究的基础上,我们使用全局平均池进行预测,并使用1×1滤波器来压缩3×3卷积之间的特征表示。
- 我们使用批量归一化来稳定训练,加快收敛,并对模型进行正则化。
分类培训
我们在ImageNet上对Darknet-19进行了160个历元的预训练,输入分辨率为224×224。然后,我们对其进行微调,输入分辨率为448×448,输入分辨率为448×448,仅为10个历元。
侦察训练
我们通过以下方式修改网络以进行检测:
- 去掉最后一层卷积层。
- 添加具有1024个滤波器的三个3×3卷积层,然后是具有我们检测所需输出数的最后一个1×1卷积层。
对于VOC,我们预测有5个盒子,每个盒子有5个坐标,每个盒子有20个类,所以有125个过滤器。我们还从最后的3×3×512层到倒数第二层卷积层增加了一个穿透层,这样我们的模型就可以使用细粒度特征。我们训练了160个时代的网络。
更强大
我们提出了一种对分类和检测数据进行联合训练的机制。该方法使用标记为检测的图像来学习特定于检测的信息,包括边界框定位、客体预测和常见对象分类。它使用只有类别标签的图像来扩展它可以检测到的类别数量。但是,也存在一些挑战:
- 检测数据集只有公共对象和通用标签,如“狗”或“船”。而分类数据集具有更宽更深的标签范围。例如,ImageNet有一百多个品种的狗,包括“诺福克梗”、“约克夏梗”和“贝德灵顿梗”。如果我们想要在两个数据集上进行训练,我们需要一种连贯的方式来合并这些标签。
- 大多数分类模型在所有可能的类别上使用Softmax层来计算最终的概率分布,假设这些类别是相互排斥的。但是,组合数据集并非如此。例如,ImageNet中的类“诺福克梗犬”和可可中的类“Dog”并不是互斥的。因此,我们改用多标签模型。
等级分类
ImageNet标签是从WordNet中提取的,WordNet是一个语言数据库,用于构建概念及其关联方式。在WordNet中,“诺福克梗”和“约克夏梗”都是“梗”的下义词,是“猎犬”的一种,是“狗”的一种,是“狗”的一种,等等。
由于语言的复杂性,Wordnet被构造为有向图而不是树。例如,“狗”既是“狗”的一种类型,也是“家畜”的一种类型,这两种类型在WordNet中都是同义词。
大多数分类方法假定标签的结构是扁平的。然而,对于组合的数据集,层次结构正是我们所需要的。我们不使用完整的图结构,而是根据ImageNet中的概念构建分层树来简化问题。
为了构建此树,我们检查ImageNet中的可视名词,并查看它们通过WordNet图到达根节点的路径,在本例中为“Physical Object”。
- 许多同义词集在图表中只有一条路径。我们首先将所有这些路径添加到树中。
- 然后,我们迭代检查睡觉的概念,并添加尽可能少生长树的路径。因此,如果一个概念有多条到根的路径,我们会选择最短的一条。
最终的结果是WordTree,这是视觉概念的分层模型。为了使用WordTree进行分类,我们在每个节点预测条件概率。例如,在“梗”节点,我们预测:
如果我们想要计算特定节点的绝对概率,我们只需沿着路径通过树到达根节点,然后乘以条件概率。出于分类目的,我们假设图像包含一个对象:PR(物理对象)=1。
为了验证这种方法,我们在从1000级ImageNet构建的WordTree上训练Darknet-19模型,并将其命名为WordTree1k。为了构建WordTree1k,我们添加了所有中间节点,并将标签空间从1000扩展到1369。
在训练期间,我们将地面事实标签向上传播到树上。因此,如果一幅图像被标记为“诺福克梗”,它也会被标记为“狗”和“哺乳动物”等。为了计算条件概率,我们的模型预测了1369个值的向量,并计算了作为同一概念的下位词的所有同义词的Softmax。
使用与以前相同的训练参数,我们的分层Darknet-19达到了71.9%的TOP-1准确率和90.4%的TOP-5准确率,而原来的性能是72.9%的TOP-1准确率和91.2%的TOP-5准确率。尽管增加了369个额外的概念,并让我们的网络预测树形结构,但我们的准确率仅略有下降。
此外,以这种方式执行分类使得性能能够在新的或未知的对象类别上优雅地降级。例如,如果网络看到一只狗的图片,但不确定具体的狗品种,它仍然会以很高的置信度预测“狗”,但在下义词中展开的置信度较低。
这个公式也适用于检测。现在,我们不是假设每个图像都有一个对象,而是使用YOLOv2的客观性预测器为我们提供Pr(物理对象)的值。检测器预测边界框和概率树。我们向下遍历树,在每次分割时选择最高置信度的路径,直到我们达到某个阈值,并预测该对象类。
数据集与WordTree的组合
我们可以使用WordTree以合理的方式组合多个数据集,只需将数据集中的类别映射到树中的同义词集即可。Wordnet非常多样化,所以我们可以对大多数数据集使用此技术。
联合分类检测
我们希望训练一个超大规模的检测器,因此我们使用COCO检测数据集和完整ImageNet版本中的前9000个类创建了我们的组合数据集。我们还需要评估我们的方法,因此我们添加了ImageNet检测挑战中尚未包括的所有类。此数据集的相应WordTree有9418个类。ImageNet是一个大得多的数据集,所以我们通过对CoCo进行过采样来平衡数据集,以便ImageNet仅大4:1倍。
使用这个数据集,我们训练了YOLO9000。我们使用基本的YOLOv2架构,但只使用3个之前的版本,而不是5个来限制输出大小。
- 当我们的网络看到检测图像时,我们会照常反向传播损失。对于分类损失,我们只反向传播标签相应级别或以上的损失。例如,如果标签是“Dog”,我们不会给树中更下面的预测“德国牧羊犬”和“金毛猎犬”分配任何错误,因为我们没有那个信息。
- 当它看到分类图像时,我们只反向传播分类丢失。我们简单地找到目标类的概率最高的包围盒,并且只计算其预测树上的损失。我们还假设预测盒和潜在地面真实盒之间的IOU至少为0.3,并反向传播客观性损失。
使用联合训练策略,YOLO9000从COCO数据集中学习对象检测,并从ImageNet数据集中学习细粒度对象分类。
我们在ImageNet检测任务中评估了YOLO9000。ImageNet的检测任务与COCO共享44个对象类别,这意味着YOLO9000只看到了大多数测试图像的分类数据,而没有看到检测数据。YOLO9000在从未见过任何标记检测数据的不相交的156个对象类上获得19.7和16.0的总体地图。
当我们分析YOLO9000在ImageNet上的表现时,我们发现它很好地学习了新的动物物种,但在学习服装和设备等类别方面却举步维艰。新的动物更容易学习,因为客观性预测很好地概括了可可的动物。相反,Coco没有任何类型服装的包围盒标签,只有“人”的包围盒标签,所以YOLO9000努力为“太阳镜”或“泳裤”等类别建模。
V3:YOLOv3:增量改进(2018)
附言:这篇论文真的很有趣,强烈推荐你去看看。
作者的说法:我们大多是从别人那里汲取好点子,只需要一些小的改变就能让YOLO变得更好。
“小”的变化
包围盒预测
YOLOv3使用Logistic回归预测每个边界框的客观性分数。
- 如果边界框优先(锚定框)与地面真实对象重叠最多,则其客观性目标应为1。
- 如果它不是最好的(就重叠地面真实对象而言),但重叠超过某个阈值(例如0.5),则它的预测将被忽略(遵循更快的R-CNN)。
- 与速度更快的R-CNN不同,YOLOv3只为每个地面真实对象指定一个优先边界框(锚框)。如果没有将边界框先验分配给任何地面事实对象,则不会损失坐标或类预测,只会损失客观性。
班级预测
YOLOv3采用多标签设置代替多类来预测每个盒子的类别,在训练过程中简单地使用独立的Logistic分类器和二进制交叉熵损失。此公式使其更灵活地适用于更复杂的域,如Open Images数据集,其中有许多重叠的标签。
跨规模的预测
YOLOv3可以预测3种不同比例的方框。它使用与要素金字塔网络类似的思想从这些比例中提取要素。
我们在基本特征提取器中增加了几个卷积层。对于每个尺度,网络预测三维张量编码边界框、客观性和类别预测。在COCO实验中,我们在每个尺度上预测3个框,因此对于4个边界框偏移量、1个客观性预测和80个类别预测,张量是N×N×[3×(4+1+80)]。
为了检测额外的尺度(从检测1到检测2),我们取当前的特征地图并对其进行2倍的上采样。我们还从较早的网络层中提取一个要素地图,并使用拼接将其与上采样的要素地图合并。它允许我们从上采样的特征图中获得更有意义的语义信息,并从早期的特征图中获得更细粒度的信息。然后,我们再添加几个卷积层来处理这个组合的特征图,并最终预测类似的张量。
我们再经历一次相同的过程来预测最终标度的框(从检测2到检测3)。因此,对第三尺度的预测得益于所有先前的计算以及来自较早网络层的细粒度特征。
我们仍然使用k-均值聚类来确定包围盒先验。我们随机选择9个簇和3个尺度,并在尺度上均匀地划分簇。在COCO数据集中,9个聚类分别为:(10×13)、(16×30)、(33×23)、(30×61)、(62×45)、(59×119)、(116×90)、(156×198)、(373×326)。
要素提取器:DarkNet-53
我们的新特征提取网络,称为Darknet-53,是一种混合方法,它结合了YOLOv2、Darknet-19中使用的网络和最新的剩余网络内容。
这个新的网络比Darknet-19强大得多,但仍然比ResNet-101或ResNet-152更有效率。以下是ImageNet的一些结果:
YOLOv3怎么样?
好的,YOLOv3一般看起来不错。然而,随着IOU阈值的增加,性能会显著下降,这表明YOLOv3很难使框与对象完全对齐。
YOLO过去在小物件上举步维艰,但现在我们看到了逆转的趋势。通过新的多尺度预测,我们看到YOLOv3在小型物体上具有相对较高的AP性能。然而,它在中等和较大尺寸的对象上的性能相对较差。需要更多的调查才能弄清这件事的真相。
我们试过的东西都不管用
如果您有兴趣,请参考原文。
原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/09/28/%e7%ba%b8%e8%b4%a8%e9%98%85%e8%af%bb%e2%80%8a-%e2%80%8ayolo%ef%bc%9a%e4%bb%8ev1%e5%88%b0v3/