YOLOv2学习
- 引入 Anchor boxes
- 摘要
- 数据集组合方法(Dataset Combination Method)
- 联合训练算法(Joint Training Algorithm)
- 改进
- Batch Normalization
- High Resolution Classifier
- 分类器预训练
- 分辨率调整
- **Convolutional With Anchor Boxes**
- 锚框(Anchor Boxes)
- 对象性(Objectness)与类别预测的解耦
- Dimension Clusters
- 问题
- 解决方案
- 遇到的挑战和改进的k-means聚类
- k-means聚类和质心(Centroid)
- 选择k值和平均IOU
- 聚类结果与手动选择的锚框的差异
- Direct location prediction
- Fine-Grained Features
- Multi-Scale Training
- Further Experiments
- 分类训练
- 检测训练
- 层次分类
- 结论
引入 Anchor boxes
对象可以有不同的大小和形状,并且可以在图像中的任何位置出现。
为了有效地预测这些边界框,使用一组 预定义的 anchor boxes 作为参考框,
也即 Anchor boxes 是固定大小和比例的矩形框
在YOLOv2中的操作步骤大致如下:
-
图像划分:
输入图像被划分为S×S的网格。每个网格单元负责预测在其区域内中心点落在该单元内的对象。 -
锚框分配:
每个网格单元不再预测单一的边界框,而是为多个锚框(Anchor boxes)预测位置和尺寸的调整参数,以及对象的类别和对象置信度(即该区域是否包含某个类别的对象,以及边界框的准确度)。 -
锚框数量:
具体来说,YOLOv2为每个网格单元引入了 K 个锚框(在实际实现中K通常为5),锚框尺寸和比例是通过聚类训练数据集中的边界框来确定。 -
预测过程:
对于每个锚框,网络都会预测调整值来精细调整锚框的位置和尺寸,并且为每个锚框预测一个对象置信度和 多个类别概率。
通过这种方式,YOLOv2可以对图像中存在的多个对象进行更准确的检测,并且能够更好地处理不同尺寸和比例的对象。引入锚框后,YOLOv2在多尺度训练方面也表现出更好的适应性和性能。
Anchor Boxes的工作原理:
-
生成Anchor Boxes: 在图像的每个位置上,生成一组不同尺寸和比例的anchor boxes。这些框的大小和比例是根据训练数据中常见对象的尺寸和形状选择的。
-
特征提取: 使用卷积神经网络从图像中提取特征。这些特征用于预测每个anchor box是否包含对象以及对象的类别。
-
边界框回归: 对于每个anchor box,模型预测与实际对象边界框之间的偏移量。这些偏移量用于调整anchor box的位置和大小,使其更接近真实的边界框。
-
非极大值抑制(NMS): 由于每个位置有多个anchor boxes,因此可能会有多个预测框重叠在同一个对象上。非极大值抑制用于去除重叠的预测框,只保留具有最高置信度的框。
Anchor Boxes的优点:
- 提高召回率: 通过使用一组不同大小和比例的anchor boxes,模型能够更好地检测具有各种形状和大小的对象。
- 加速训练和推理: 使用anchor boxes可以将目标检测任务转换为固定数量的边界框回归问题,这可以通过并行处理来加速。
Anchor Boxes的缺点:
- 手动设计: Anchor boxes的大小和比例通常需要根据特定的数据集手动设计,这可能需要一些实验和调整。
- 可能的重叠: 多个anchor boxes可能会重叠在同一个对象上,导致多个预测框。这需要通过非极大值抑制来处理。
在目标检测中,当说在图像的每个位置上生成anchor boxes时,通常是指在图像的特征图(feature map)上的每个位置。特征图是卷积神经网络中某一层的输出,它是原始图像经过一系列卷积、池化等操作后得到的一个较小的矩阵。
例如,假设原始图像的大小为 640x480 像素,经过卷积神经网络处理后得到一个大小为 20x15 的特征图。这个特征图上的每个元素(称为特征点)都对应于原始图像中的一个区域。在这个例子中,特征图的每个特征点对应于原始图像中的 32x32 像素的区域(这个对应区域的大小取决于网络的结构和参数)。
在每个特征点上,我们生成一组不同尺寸和比例的anchor boxes。这些anchor boxes在特征图上的位置是固定的,但它们对应到原始图像上时,会覆盖不同的区域。通过在特征图的每个位置上放置这些anchor boxes,我们可以确保在原始图像的不同位置和尺度上都有框来寻找潜在的对象。
总之,当我们说在图像的每个位置上生成anchor boxes时,我们实际上是指在卷积神经网络生成的特征图的每个位置上生成一组预定义的框。这些框随后用于在原始图像中的不同区域寻找潜在的对象。
摘要
使用一种新颖的 多尺度训练 方法,相同的YOLOv2模型可以在不同的尺寸上运行。在速度和准确性之间提供了一个简单的权衡。
提出了一种目标检测与分类联合训练的方法。使用该方法,作者在COCO检测数据集和ImageNet分类数据集上同时训练YOLO9000。
Our joint training allows YOLO9000 to predict detections for object classes that don’t have labelled detection data.
如何理解这句话?
这句话来自YOLO9000论文的一个核心观点,讲的是YOLO9000模型如何利用联合训练(joint training)机制,使得模型能够预测那些没有标注检测数据的对象类别。
YOLO9000的创新之处在于,它通过一种特殊的训练方法,可以在有限的标注检测数据的基础上,对大量其他类别进行检测。
联合训练指的是模型同时学习两个任务:一是对象检测任务,二是图像分类任务。YOLO9000结合了这两种类型的数据:
来自检测数据集(如PASCAL VOC)的带标注的检测图像,
以及来自分类数据集(如ImageNet)的大量类别的图像,后者可能没有对应的检测标注。
通过这种方式,模型不仅学会了如何检测已知有标注的类别,也学会了如何将这些知识迁移到没有检测标注的类别上。
具体来说,当模型在检测数据上训练时,它学习识别和定位图像中的对象;而在分类数据上训练时,它学习识别图像中对象的类别。这种联合训练策略允许模型利用分类任务中学到的知识来增强其在检测任务上的性能,尤其是对于那些没有直接检测标注数据的类别。因此,YOLO9000能够在没有直接检测训练数据的情况下,对大量类别进行有效的对象检测,这是通过利用来自不同来源的数据和知识迁移实现的。
数据集组合方法(Dataset Combination Method)
数据集组合方法是一种策略,用于融合和利用来自不同源的数据集,尤其是当这些数据集的类型(例如,分类数据与检测数据)和对象类别覆盖范围不同时。YOLO9000的情况中,这种方法特别用于结合来自COCO的检测数据和来自ImageNet的分类数据。
- COCO数据集提供了大量的带有精确标注框的对象检测数据。
- ImageNet数据集则以其庞大的分类数据著称,其中包含了数百万张图像,覆盖了成千上万的类别,但这些数据大多不包含对象的位置信息(即没有标注框)。
为了结合这两种数据,YOLO9000设计了一种方法,使得模型可以同时从两种类型的数据中学习。这意味着模型能够在训练过程中,既学习到如何识别和定位对象(来自检测数据),也能够识别出大量的对象类别(来自分类数据)。
联合训练算法(Joint Training Algorithm)
联合训练算法是使模型能够同时学习检测和分类任务的机制。这种算法的关键在于设计一个损失函数(loss function),它能够平衡和整合来自两种不同任务的学习目标。
在YOLO9000的案例中,联合训练算法允许模型在训练过程中同时处理带有检测标注的图像(例如,来自COCO的数据)和只有类别标签的图像(例如,来自ImageNet的数据)。这种方法的挑战在于两者数据标注的不同:检测任务需要模型预测对象的位置(通过边界框)和类别,而分类任务只需预测图像中对象的类别。
为了解决这一挑战,YOLO9000的设计者提出了一个创新的损失函数,该函数能够在不牺牲任一任务性能的前提下,有效地整合这两种学习目标。具体来说,这意味着当模型在检测数据上训练时,它会优化位置和类别的预测;而在分类数据上训练时,它则专注于优化类别的预测。
通过这种联合训练方法,YOLO9000能够扩展其识别的对象类别到9000多种,这包括大量仅在ImageNet分类数据集中有标注的类别。这一成就标志着在保持实时检测性能的同时,显著扩展了模型的适用范围和灵活性。
改进
相对于最先进的检测系统,YOLO存在各种缺点。YOLO与Fast R-CNN的误差分析表明,YOLO会产生大量的定位误差。此外,与基于区域提议的方法相比,YOLO的召回率相对较低。因此,作者主要关注在保持分类准确性的同时提高召回率和定位准确性。
YOLOv2,作者想要一个更准确,速度更快的检测器。而不是扩大网络,作者简化网络,然后使特征表示更容易学习。作者将过去工作中的各种想法与自己的新概念结合起来,以提高YOLO的性能。表2是对结果的总结。
表2 列出的大多数设计决策都会导致 mAP 的显著增加。两种例外情况是切换到带有锚框的全卷积网络和使用新网络。切换到锚框样式的方法在不改变mAP的情况下增加了召回率,而使用新的网络减少了33%的计算。
Batch Normalization
批处理归一化显著加快了收敛速度,同时消除了对其他形式的 Normalization 的需要。
通过在YOLO的所有卷积层上添加 Batch Normalization,mAP 的改进幅度超过 2%。
High Resolution Classifier
所有最先进的检测方法都使用在 ImageNet 上预训练的分类器。
从 AlexNet 开始,大多数分类器对小于 256 × 256 的输入图像进行操作。原始的YOLO以 224 × 224 的分辨率训练分类器网络,并将检测分辨率提高到448。
这意味着网络必须同时切换到学习目标检测并调整到新的输入分辨率。
对于 YOLOv2,作者首先在 ImageNet 上以全 448 × 448 分辨率微调分类网络 10 个 epoch 。
这使网络有时间调整其滤波器,以便在更高分辨率的输入上更好地工作。然后,作者在检测时微调生成的网络。这种高分辨率分类网络使 mAP 增加了近4%。
分类器预训练
在深度学习中,预训练是一种常见的策略,尤其是在对象检测领域。这意味着模型首先在一个大型的图像分类数据集(如ImageNet)上进行训练,学习提取图像中的特征。这些特征随后可以被用于其他任务,如对象检测。这种方法的优势在于,预训练的分类器已经学会了识别和理解图像中的各种特征,这可以加速并提高后续任务的学习效率和性能。
分辨率调整
原始的YOLO模型在训练分类器时使用了224×224的输入分辨率,然后在进行对象检测时增加分辨率到448×448。这种分辨率的变化要求网络同时适应学习目标检测任务和新的输入分辨率,这可能会对性能产生不利影响。
为了解决这个问题,YOLOv2采用了一种不同的策略。在进行目标检测训练之前,它首先在完整的448×448分辨率下对分类网络进行微调(fine-tune),持续10个epoch。这一步骤允许网络调整其卷积滤波器(filters),以便更好地处理高分辨率输入。经过这种预适应后,网络再进行目标检测的微调。
通过在高分辨率下预先微调分类网络,YOLOv2在平均精度均值(mAP,一种衡量对象检测性能的指标)上获得了近4%的提升。这表明,适应高分辨率输入对于改善对象检测模型的性能至关重要。
Convolutional With Anchor Boxes
YOLOv1 直接使用卷积特征提取器之上的全连接层来预测边界框的坐标。
作者从YOLOv1中移除全连接层,并使用锚框 (anchor boxes) 来预测边界框。
首先,作者消除一个池化层,使网络的卷积层的输出具有更高的分辨率。
作者还缩小了网络以在416个输入图像上运行,而不是 448×448。这样做是因为作者想在特征映射中有奇数个位置,这样就有一个中心单元格。
物体,尤其是大的物体,往往会占据图像的中心,所以最好在中心有一个位置来预测这些物体,而不是在附近有四个位置。YOLOv1的卷积层将图像的采样率降低了32倍,所以通过使用416的输入图像,得到了13 × 13的输出特征图。
当移动到 anchor boxes 时,也将类别预测机制与空间位置解耦,取而代之的是预测每个锚盒的类和对象。
如何理解上面这句话?
在解释这句话之前,需要了解一些背景知识,特别是关于对象检测和YOLO模型的一些关键概念,包括锚框(anchor boxes)和对象性(objectness)的概念。
锚框(Anchor Boxes)
Anchor Boxes最先由Faster R-CNN对象检测模型提出。
锚框是一种预定义的框,用于预测对象的位置。在对象检测任务中,模型需要预测对象的类别以及它们在图像中的位置。传统的 YOLO 模型通过直接预测边界框的坐标来定位对象,这种方法将类别预测与空间位置预测紧密耦合在一起。然而,这种方法在处理图像中有重叠或大小差异显著的对象时会遇到困难。
为了改进这一点,YOLO9000引入了锚框的概念。锚框为模型提供了一组固定大小和比例的参考框架,模型通过调整这些参考框的位置和尺寸来预测实际的对象边界框。这种方法允许模型更好地处理对象之间的重叠和不同尺寸的问题。
对象性(Objectness)与类别预测的解耦
在引入锚框的同时,YOLO9000还改变了类别预测的机制。在之前的版本中,类别预测与边界框的位置紧密相关,即模型需要对每个边界框预测它所包含对象的类别。但在YOLO9000中,模型对每个锚框分别预测对象性和类别。对象性指的是锚框内包含对象的置信度,而类别预测则是对锚框中对象所属类别的预测。
这种改变有几个关键优点:
- 改善检测性能 通过解耦类别预测和空间位置,模型可以更灵活地预测不同位置和尺寸的对象。
- 提高效率 模型可以在整个图像范围内并行预测多个锚框的对象性和类别,这提高了预测速度和准确性。
- 减少漏检 这种方法使得模型更有可能正确识别和定位图像中的多个对象,包括那些彼此重叠或大小差异大的对象。
总的来说,通过使用锚框并将类别预测机制从空间位置中解耦,YOLO9000显著提升了对象检测的灵活性和准确性,这是对YOLO模型的一大改进。
在YOLO之后,对象性(Objectness)预测仍然预测了 Ground Truth 和预测框的IOU,类别预测预测存在目标的情况下该类别的条件概率。
YOLOv1 每张图像只能预测 98 个框,但使用锚框,模型可以预测超过1000个。没有锚框,中间模型得到 69.5 mAP,召回率为 81%。对于锚框,模型得到 69.2 mAP,召回率为88%。尽管 mAP 降低了,召回率的增加意味着模型还有更多的改进空间。
Dimension Clusters
作者在训练集边界框上运行 k 均值聚类来自动找到好的 anchor box先验尺寸和比例。
因此,对于距离度量,作者使用:
box 是预测的边界框,centroid是聚类簇心,期望二者的 IOU 值越大越好,那么二者距离越来越小。
问题
- 手动选择的锚框尺寸:在引入锚框的YOLO版本(即YOLOv2,也作为YOLO9000的基础)中,初始的锚框尺寸是手动选择的。尽管网络能够通过学习调整这些锚框以更好地匹配图像中的实际对象,但如果锚框的初始尺寸(即先验)能够更接近实际对象的尺寸,网络学习预测准确的检测就会更加容易。
解决方案
为了克服手动选择锚框尺寸的问题,YOLO9000的作者采取了一种基于数据驱动的方法来自动寻找更好的锚框尺寸:
- 使用k-means聚类:他们对训练集中的边界框运行 k-means 聚类算法,以自动发现更适合作为锚框的先验尺寸。这种方法的目的是找到一组能够代表训练数据中实际边界框分布的锚框尺寸。
遇到的挑战和改进的k-means聚类
在应用 k-means 聚类时,他们遇到了一个挑战。如果使用标准的 k-means 算法和欧几里得距离作为度量,结果会偏向于较大的框,因为在欧几里得空间中,较大的框相对于较小的框会产生更多的误差。
- 改进的距离度量:为了使聚类结果更加符合对象检测任务的需求,他们采用了一种改进的距离度量,这种度量更关注于提高交并比(IOU)得分,而不是简单地比较尺寸大小。IOU得分是评估预测的边界框与真实边界框之间重叠程度的一个指标,与框的绝对大小无关。
通过这种改进的方法,YOLO9000能够自动确定一组更适合实际对象尺寸分布的锚框尺寸,这有助于提高模型的检测性能。这种基于聚类的方法来选择锚框的尺寸,代表了一种从数据中学习而非依赖于手动设定的方法,这在对象检测领域是一个重要的进步。
We run k-means for various values of k and plot the average IOU with closest centroid, see Figure 2. We choose k = 5 as a good tradeoff between model complexity and high recall. The cluster centroids are significantly different than hand-picked anchor boxes. There are fewer short, wide boxes and more tall, thin boxes.
在这段话中,YOLO9000论文的作者描述了他们如何使用k-means聚类算法来自动确定锚框的尺寸,并解释了为什么选择特定的k值以及聚类结果与手动选择锚框的差异。下面是对这段话的详细解释:
k-means聚类和质心(Centroid)
- k-means聚类:这是一种常用的聚类算法,用于将数据点分组成k个簇,使得每个数据点属于与其最近的质心的簇。
- 质心(Centroid):在k-means聚类中,质心是每个簇的中心点,代表了该簇中所有数据点的平均位置。在YOLO9000中,质心对应于每个簇的平均边界框尺寸,它们被用作锚框的尺寸。
选择k值和平均IOU
- 不同k值的平均IOU:作者运行k-means聚类算法,尝试不同的k值,并计算每个k值对应的平均交并比(IOU)与最近质心的关系。IOU是一种衡量预测边界框与真实边界框重叠程度的指标,平均IOU反映了聚类结果与真实边界框的匹配程度。
- 选择k = 5:基于平均IOU和模型复杂度之间的权衡,作者选择了k = 5作为锚框尺寸聚类的数量。这意味着他们使用5个不同尺寸的锚框来覆盖训练数据中的对象形状和大小。
聚类结果与手动选择的锚框的差异
- 聚类结果与手动选择的差异:作者指出,通过k-means聚类得到的锚框尺寸(即质心)与他们之前手动选择的锚框尺寸明显不同。具体来说,聚类结果倾向于有更少的短而宽的框,而更多的高而窄的框。这表明自动聚类方法能够根据训练数据中实际对象的分布更好地选择锚框尺寸,而不是依赖于人为的假设或经验。
总的来说,这段话描述了作者如何通过使用k-means聚类自动确定锚框尺寸,以及他们如何基于模型复杂度和回调率之间的权衡选择最佳的k值。聚类结果显示,自动确定的锚框尺寸与手动选择的尺寸有明显的差异,这有助于改进模型的检测性能。
也就是说,就像这张图中显示的,作者使用k=5,所以用图中这5个固定尺寸的锚框去训练数据集,然后在训练过程中,模型是否会调整这5个锚框的尺寸?
正是这样,这张图展示了当使用不同数量的簇(或锚框)进行k-means聚类时,平均交并比(IOU)如何变化。图中标出的k=5的位置表示,作者通过分析这些数据选择了五个簇作为他们模型的锚框尺寸的基础。
在训练过程中,模型使用这五个由k-means决定的锚框尺寸作为起点。模型不会改变这五个锚框的初始尺寸;相反,它会学习如何根据每个锚框来调整边界框预测的尺寸和位置。具体来说:
-
锚框的角色:每个锚框为模型提供了一个预测的参照框架。在训练时,模型尝试对每个锚框分配最合适的真实边界框,并学习如何调整锚框以最好地覆盖对应的对象。
-
学习调整参数:对于每个锚框,模型输出一系列调整值,包括边界框中心的偏移量、宽度和高度的缩放因子等。这些值是根据模型在训练数据上的学习成果计算出来的。
-
预测时的锚框尺寸:在预测(或推理)阶段,模型会应用在训练阶段学到的调整参数,基于预定义的锚框尺寸生成预测边界框。因此,尽管初始锚框的尺寸是固定的,但最终模型输出的边界框尺寸会根据每个特定图像中对象的实际大小和位置进行相应的调整。
这张图中还展示了随着簇数量的增加,平均IOU提高了,但是提升的幅度在k增加到一定程度后变得缓慢。这表明增加更多的锚框尺寸并不一定会带来显著的性能提升,而是存在一个最优点,这就是为什么作者选择了k=5的原因,它是模型复杂度和性能之间的一个良好折中。
Direct location prediction
在YOLO中使用锚框时,遇到了第二个问题:模型不稳定,特别是在早期迭代期间。大部分的不稳定性来自于对边界框坐标
(
x
,
y
)
(x,y)
(x,y)的位置。在区域建议网络中,网络预测值
t
x
t_x
tx、
t
y
t_y
ty 和中心坐标
(
x
,
y
)
(x,y)
(x,y) 计算为:
这组公式描述了如何从模型输出的预测值
t
x
t_x
tx 和
t
y
t_y
ty 转换为最终的边界框的中心坐标
x
x
x 和
y
y
y。这里的
w
a
w_a
wa 和
h
a
h_a
ha 分别是锚框的宽度和高度,
x
a
x_a
xa 和
y
a
y_a
ya 是锚框中心的坐标。公式的具体解释如下:
- t x t_x tx 和 t y t_y ty 是网络预测的值,它们表示边界框中心相对于锚框中心的偏移,但这个偏移是按锚框的宽度和高度进行的相对度量。
- 通过乘以锚框的宽度 w a w_a wa 或高度 h a h_a ha,预测的偏移量 t x t_x tx 和 t y t_y ty 被转换为图像坐标空间中的实际像素值。
- 然后,这个实际的偏移值被从锚框中心的坐标 x a x_a xa 和 y a y_a ya 中减去,得到最终的边界框中心坐标 x x x 和 y y y。
所以,如果 t x t_x tx 和 t y t_y ty 是正值,边界框的中心将相对于锚框中心向右移动和向下移动;如果它们是负值,边界框的中心则向左移动和向上移动。
公式确保了预测的边界框中心是相对于锚框中心定位的,并且考虑到了锚框的实际大小,使得模型能够为不同尺寸和比例的锚框适当地调整预测的边界框位置。这是YOLO系列模型定位边界框的一种有效方法。
For example, a prediction of t x t_x tx = 1 would shift the box to the right by the width of the anchor box, a prediction of t x t_x tx = −1 would shift it to the left by the same amount.
这句话解释了在YOLO9000模型中,预测值 t x t_x tx如何影响边界框位置的调整。在模型中,对于每个锚框,网络会输出一系列的预测值(例如, t x , t y , t w , t h t_x, t_y, t_w, t_h tx,ty,tw,th),分别对应于边界框中心的x和y坐标,以及边界框的宽度和高度。这些值是相对于锚框属性的调整参数。
这里的 t x t_x tx是边界框中心相对于锚框中心的x坐标的偏移量,它是以锚框的宽度为单位进行度量的:
- 如果 t x = 1 t_x = 1 tx=1,那么边界框将向右移动一个锚框的宽度。
- 如果 t x = − 1 t_x = -1 tx=−1,边界框将向左移动一个锚框的宽度。
这种方法的优点是预测值的尺度与锚框的尺寸相关,这意味着无论锚框的实际大小如何, t x t_x tx 都会以一种与锚框大小成比例的方式来移动边界框。这有助于模型学习预测边界框的位置,因为它为不同大小的锚框提供了一致的位置调整方式。同样的逻辑也适用于y坐标的偏移量 t y t_y ty以及宽度 t w t_w tw和高度 t h t_h th的调整。
上面的公式是不受约束的,所以任何锚框都可以在图像中的任何一点结束,而不管锚框的位置是什么。在随机初始化的情况下,模型需要较长的稳定时间才能预测出合理的偏移量。
并非预测偏移量,作者遵循YOLO的方法,并预测相对于网格单元的位置的位置坐标。这将 Ground Truth 限定在0和1之间。作者使用 logistic activation 来约束网络的预测落在这个范围内。
下面的约束使得anchor boxes不能任意地出现在整张图像的任何位置,而是只能在其所属的gird cell内进行偏移,
网络在输出特征图的每个 单元格 cell 上预测5个边界框。网络为每个边界框预测5个坐标, t x t_x tx, t y t_y ty, t w t_w tw, t h t_h th和 t o t_o to。如果单元格从图像的左上角偏移( c x c_x cx; c y c_y cy),先验边界框的宽度和高度分别为 p w p_w pw, p h p_h ph,则预测对应于:
约束了位置预测使得参数化更容易学习,网络更稳定。使用维度聚类并直接预测边界框中心位置,比使用锚框的版本提高了近5%的YOLO。
这组表达式是YOLO9000中用于从模型输出的预测值转换成最终边界框的实际参数的公式。这里面包含了位置坐标的转换( b x , b y b_x, b_y bx,by),尺寸的转换( b w , b h b_w, b_h bw,bh),以及对象置信度的计算。让我们逐个解释这些表达式:
-
b x = σ ( t x ) + c x b_x = \sigma(t_x) + c_x bx=σ(tx)+cx 和 b y = σ ( t y ) + c y b_y = \sigma(t_y) + c_y by=σ(ty)+cy
- t x t_x tx 和 t y t_y ty 是网络对边界框中心位置的原始预测。
- σ \sigma σ 是sigmoid函数,它将输入值映射到0和1之间。这样可以保证预测的中心点坐标落在给定网格单元内。
- c x c_x cx 和 c y c_y cy 是网格单元左上角的坐标。这些坐标是固定的,与锚框的位置相关联。
- 网络输出的 t x t_x tx和 t y t_y ty通常被sigmoid函数处理以得到一个单位间隔内的偏移量,然后通过加上网格单元左上角的坐标,将边界框的中心点定位在整个图像坐标空间中。
-
b w = p w e t w b_w = p_w e^{t_w} bw=pwetw 和 b h = p h e t h b_h = p_h e^{t_h} bh=pheth
- p w p_w pw 和 p h p_h ph 是锚框的原始宽度和高度。这些也是在模型初始化时根据数据集的统计信息预设的。
- t w t_w tw 和 t h t_h th 是网络对边界框宽度和高度的原始预测。
- e t w e^{t_w} etw 和 e t h e^{t_h} eth 的指数确保了宽度和高度的调整始终是正值,因为指数函数的输出总是正的。
- 这种方式允许模型以乘法形式对边界框的宽度和高度进行缩放,这是基于锚框尺寸的。
-
P r ( object ) ∗ I O U ( b , object ) = σ ( t o ) Pr(\text{object}) * IOU(b, \text{object}) = \sigma(t_o) Pr(object)∗IOU(b,object)=σ(to)
- P r ( object ) Pr(\text{object}) Pr(object) 表示模型预测的在某个特定网格单元中有对象的概率。
- I O U ( b , object ) IOU(b, \text{object}) IOU(b,object) 表示预测的边界框 b b b和任何真实对象边界框的交并比。
- t o t_o to 是网络对于对象置信度的原始预测。
- 通过应用sigmoid函数, σ ( t o ) \sigma(t_o) σ(to) 被转换成0到1之间的一个值,表示预测的边界框包含对象的置信度。
总的来说,这些表达式联合使用网络的输出( t x , t y , t w , t h , t o t_x, t_y, t_w, t_h, t_o tx,ty,tw,th,to)以及锚框的维度( p w , p h p_w, p_h pw,ph)和网格单元的位置( c x , c y c_x, c_y cx,cy),来计算每个预测边界框的精确位置、大小和对象置信度。这是YOLO系列模型核心的预测机制的数学表达。
Fine-Grained Features
改进的YOLO在 13 × 13 的特征图上预测检测。虽然这对于大型物体来说已经足够了,但是对于定位较小的对象,更细粒度的特性可能会表现更好。
作者采用了一种不同的方法,简单地添加一个 passthrough 层,以26 × 26的分辨率从先前的层中获得特征。
passthrough 层 通过将相邻的特征叠加到不同的通道而不是空间位置来连接高分辨率特征和低分辨率特征,类似于 ResNet 中的 identity mappings 。
Passthrough layer 用于将来自较早层的高分辨率特征图与后面层的低分辨率特征图进行融合。这样做的目的是为了提高模型对小目标的检测能力。
具体来说,Passthrough layer 的工作方式类似于残差网络中的跳跃连接(skip connection),它将较早层的特征图重新映射到较深层的特征图上。在YOLOv2中,这是通过将较早层的特征图的每个2x2的局部区域重新排列成单个深度通道来实现的。这种重新排列的操作被称为"passthrough",因为它相当于将较早层的信息直接传递到较深层,而不进行任何额外的处理。
举例来说,如果较早层的特征图尺寸为26x26x512(宽度x高度x深度),通过Passthrough layer之后,它会被重新排列为13x13x2048的特征图,然后与较深层的13x13x1024的特征图进行融合(通常是通过连接操作),从而产生13x13x3072的融合特征图。这样,较深层的特征图就能够利用较早层的高分辨率信息来进行更精确的目标检测。
这将26 × 26 × 512的特征图转换成13 × 13 × 2048的特征图,可以与原特征进行拼接。作者的检测器运行在这个扩展的特征映射之上,这样它就可以访问细粒度的特征。带来1%的性能提升。
Multi-Scale Training
原始的YOLO使用448 × 448的输入分辨率。添加锚框后,作者将分辨率更改为416×416。然而,由于作者的模型只使用卷积层和池化层,它可以动态调整大小。作者希望YOLOv2对不同大小的图像具有鲁棒性,因此将其训练到模型中。
-
引入锚框后的分辨率变化:
引入锚框后,作者将模型的输入分辨率从448×448更改为416×416。这个更改是基于模型结构的调整,其中416×416的尺寸对于使用锚框的新网络结构更为合适。 -
模型的灵活性:
由于YOLOv2仅使用了卷积层和池化层,这种类型的网络具有天然的尺寸灵活性,允许输入图像的尺寸在不需要任何结构上的修改下即可变化。因此,YOLOv2可以在运行时调整其输入尺寸,这种特性被称为“全卷积性”。 -
训练时的尺寸鲁棒性:
为了使YOLOv2对不同尺寸的图像具有鲁棒性,训练过程中模型被训练来适应多种分辨率的输入。这样做可以使模型学会识别在各种尺寸的图像上的对象,而不仅限于特定的分辨率。 -
多尺度训练:
实际上,YOLOv2在训练过程中采用了多尺度训练的策略,定期调整输入图像的尺寸。这样,网络就能够更好地泛化到不同大小的图像上,并能够在实际应用中处理各种尺寸的输入图像。 -
动态改变网络输入尺寸:
不同于以往固定输入图像尺寸的做法,YOLOv2在训练时每隔10个批次(batches)随机改变网络的输入图像尺寸。这意味着网络不会总是从相同尺寸的图像学习,而是被迫适应各种尺寸。 -
输入尺寸的选择范围:
因为YOLOv2的网络结构是按32的倍数下采样(例如,卷积、池化层通常会减少输入的空间尺寸),所以可选的输入图像尺寸是32的倍数,具体范围从320×320到608×608不等。 -
训练过程中的尺寸调整:
当决定了新的图像尺寸后,网络会被调整到该尺寸,并在新尺寸下继续训练。这种多尺度训练策略强迫网络学习如何在不同尺寸的输入图像上进行有效的预测。 -
不同分辨率下的检测能力:
这种训练方法使得同一个训练好的网络能在不同的分辨率下进行对象检测。网络在较小尺寸的图像上运行速度更快,因此YOLOv2能够在检测速度和精度之间提供一个简单的权衡选择。
这种训练策略的结果是,YOLOv2能够适应从小型快速检测到大型高精度检测的各种应用需求,提高了模型的实用性和灵活性。
Further Experiments
与VGG模型类似,作者主要使用3 × 3滤波器,并在每个池化步骤后将通道数量增加一倍。在(NIN)的研究之后,作者使用全局平均池化来进行预测,并使用1 × 1过滤器来压缩3 × 3个卷积之间的特征表示。使用批归一化来稳定训练,加速收敛,并使模型正则化。
作者的最终模型,称为Darknet-19,有19个卷积层和5个maxpooling层。
分类训练
在训练过程中,作者使用标准的数据增强技巧,包括随机裁剪、旋转、色调、饱和度和曝光位移。
如上所述,在对224 × 224的图像进行初始训练后,将网络调整为更大的尺寸,448。
只有 10 个 epoch
检测训练
为了检测,作者修改了这个网络,删除了最后一个卷积层,增加了三个3 × 3的卷积层,每个卷积层有1024个滤波器,最后一个1 × 1的卷积层有检测所需要的输出数量。对于VOC,预测5个边界框,每个边界框有5个坐标,20个类别,所以125个滤波器。作者还从最后的3 × 3 × 512层添加了一个 passthrough 层到倒数第二个卷积层,以便模型可以使用细粒度特征。
训练 160 个 epoch,数据增强方法,包括随机裁剪、颜色移动等。
训练过程中,混合了来自检测数据集和分类数据集的图像。当网络看到标记为检测的图像时,可以基于完整的YOLOv2损失函数进行反向传播。当其看到分类图像时,只从网络结构的特定分类部分反向传播损失
层次分类
大多数分类方法都假设标签的结构是扁平的,但是对于组合数据集来说,结构正是作者所需要的。
作者通过从ImageNet中的概念构建层次树来简化问题
在WordTree中,顶层的词或节点是非常一般性的类别,比如“动物”或“物体”。随着你往下走,每个分支都会变得更加具体,比如“动物”可以分成“哺乳动物”、“爬行动物”等等,而“哺乳动物”又可以细分为“狗”、“猫”、“马”等。通过这种方式,WordTree能够以清晰的方式表示出各种对象之间的关系。
在YOLO9000的情况中,WordTree帮助模型更好地理解不同对象的层次和分类,尤其是当有些类别的标注数据非常有限或者不存在时。这样,即使模型没有直接学习到某个特定对象的大量样本,它也可以通过了解这个对象与其他相关对象之间的关系来识别它。举个例子,就算模型没有看到过很多“斑马”的图片,但通过知道“斑马”是一种“马”,而且它已经学习过很多其他“马”的图片,它也能识别出“斑马”。
WordTree还允许YOLO9000利用大量的图像分类数据(比如ImageNet数据库中的数据),即使这些数据没有对应的对象检测标注(比如边界框)。这就大大扩展了模型可以识别的对象类别数量,使其能够识别超过9000种不同的对象,这也是YOLO9000名字的由来。
最终的结果是WordTree,一个视觉概念的分层模型。为了使用WordTree进行分类,在每个节点上预测给定该同义词集的每个下义词的概率的条件概率。例如,在“terrier”节点,预测:
如果想计算一个特定节点的绝对概率,只需沿着树的路径到达根节点,然后乘以条件概率。因此,如果想知道一张图片是否是 Norfolk terrier,计算:
为了便于分类,假设图像包含 1 个对象: P r ( p h y s i c a l o b j e c t ) = 1 Pr(physical object)=1 Pr(physicalobject)=1
分类时利用 WordTree 假设每张图像有一个对象,给出预测,
而检测时利用 WordTree 时,使用YOLOv2的对象预测器来给出 P r ( p h y s i c a l o b j e c t ) Pr(physical object) Pr(physicalobject) 的值
检测器预测一个边界框和概率树,向下遍历树,在每个分叉处取最高置信度的路径,直到到达某个阈值,然后预测对象类别。
与WordTree的数据集组合。可以使用WordTree以合理的方式将多个数据集组合在一起。只需将数据集中的类别映射到树中的同义词集。
联合分类与检测。现在可以使用WordTree组合数据集,可以在分类和检测上训练联合模型。
当它看到分类图像时,只反向传播分类损失。要做到这一点,只需找到预测该类概率最高的边界框,然后计算其预测树上的损失。还假设预测框与基础真值标签至少重叠0.3个IOU,并基于此假设反向传播对象损失。
通过这种联合训练,YOLO9000学习使用COCO中的检测数据在图像中查找对象,并使用来自ImageNet的数据学习对各种各样的这些对象进行分类。
结论
作者介绍了 YOLOv2 和 YOLO9000 实时检测系统。YOLOv2 是最先进的,在各种检测数据集上比其他检测系统更快。此外,它可以在各种图像尺寸下运行,以提供速度和精度之间的平滑权衡。
YOLO9000 是一个实时检测框架,通过对检测和分类的共同优化,可以检测 9000多种目标类别。作者使用 WordTree 结合各种来源的数据和我们的联合优化技术在ImageNet和COCO上同时训练。YOLO9000 是缩小检测和分类之间数据集大小差距的有力一步。
作者的许多技术推广到目标检测之外。作者的ImageNet的WordTree表示为图像分类提供了更丰富、更详细的输出空间。
使用层次分类的数据集组合在分类和分割领域是有用的。
像多尺度训练这样的训练技术可以在各种视觉任务中提供好处。
对于未来的工作,作者希望使用类似的技术进行弱监督图像分割。作者还计划使用更强大的匹配策略来改进检测结果,以便在训练期间为分类数据分配弱标签。