YOLOv2学习
- Anchor boxes 和 bounding boxes 的区别
- 锚框(Anchor Boxes)
- 边界框(Bounding 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 和 bounding boxes 的区别
在对象检测领域,锚框(anchor boxes)和边界框(bounding boxes)是两个基本但不同的概念。理解这两者之间的区别对于掌握现代对象检测算法非常重要。
锚框(Anchor Boxes)
锚框是预定义的、固定大小和形状的框,用于作为对象检测算法预测对象位置的参考点。锚框的目的是提供一组多样化的参考框架,以覆盖可能出现在图像中的不同形状和大小的对象。在训练过程中,算法学习如何调整这些锚框以最佳地覆盖图像中的实际对象,包括调整大小和位置。锚框主要用于基于区域的CNN对象检测算法(如Faster R-CNN、YOLO等),使模型能够在图像中预测多个对象及其类别。
边界框(Bounding 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)机制,使得模型能够预测那些没有标注检测数据的对象类别。
在机器学习和计算机视觉中,标注数据是模型学习识别和理解图像的关键。通常,对象检测模型需要大量的带有标注框(bounding boxes)和类别标签的训练数据。然而,对于很多类别来说,获取这样的数据既困难又昂贵。YOLO9000的创新之处在于,它通过一种特殊的训练方法,可以在有限的标注检测数据的基础上,对大量其他类别进行检测。
联合训练指的是模型同时学习两个任务:一是对象检测任务,二是图像分类任务。YOLO9000结合了这两种类型的数据:
来自检测数据集(如PASCAL VOC)的带标注的检测图像,
以及来自分类数据集(如ImageNet)的大量类别的图像,后者可能没有对应的检测标注。
通过这种方式,模型不仅学会了如何检测已知有标注的类别,也学会了如何将这些知识迁移到没有检测标注的类别上。
具体来说,当模型在检测数据上训练时,它学习识别和定位图像中的对象;而在分类数据上训练时,它学习识别图像中对象的类别。这种联合训练策略允许模型利用分类任务中学到的知识来增强其在检测任务上的性能,尤其是对于那些没有直接检测标注数据的类别。因此,YOLO9000能够在没有直接检测训练数据的情况下,对大量类别进行有效的对象检测,这是通过利用来自不同来源的数据和知识迁移实现的。
引言
提出了一种新的方法来利用已有的大量分类数据,并用它来扩大当前检测系统的范围。提出的方法使用对象分类的分层视图,允许将不同的数据集组合在一起。
提出了一种联合训练算法,允许在检测和分类数据上训练目标检测器。方法利用标记检测图像来学习精确定位目标,同时使用分类图像来增加其词汇量和鲁棒性。
使用这种方法训练YOLO9000,一个实时对象检测器,可以检测9000多种不同的对象类别。首先,作者改进了基本的YOLO检测系统,生产了YOLOv2,一种最先进的实时探测器。然后,使用提出的数据集组合方法和联合训练算法对来自ImageNet的9000多个类和来自COCO的检测数据进行模型训练。
如何理解 数据集组合方法和联合训练算法?
YOLO9000是一个创新的对象检测模型,能够实时检测9000多种不同的对象类别。这一成就依赖于两个关键技术:数据集组合方法(dataset combination method)和联合训练算法(joint training algorithm)。在解释这两个技术之前,需要了解YOLO9000是基于YOLO(You Only Look Once)的改进版,即YOLOv2,后者本身就是一个先进的实时对象检测系统。
数据集组合方法(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%。Batch Normalization 也有助于模型的规范化。通过 Batch Normalization,可以在不过拟合的情况下从模型中去除 dropout。
High Resolution Classifier
所有最先进的检测方法都使用在 ImageNet 上预训练的分类器。
从 AlexNet 开始,大多数分类器对小于 256 × 256 的输入图像进行操作。原始的YOLO以 224 × 224 的分辨率训练分类器网络,并将检测分辨率提高到448。
这意味着网络必须同时切换到学习目标检测并调整到新的输入分辨率。
对于 YOLOv2,作者首先在 ImageNet 上以全 448 × 448 分辨率微调分类网络 10 个 epoch 。
这使网络有时间调整其滤波器,以便在更高分辨率的输入上更好地工作。然后,作者在检测时微调生成的网络。这种高分辨率分类网络使 mAP 增加了近4%。
如何理解上面这段话?
这段话描述了YOLO9000论文中的一个关键步骤,即如何适应高分辨率输入并改善模型在对象检测任务上的性能。这里涉及到两个主要的概念:分类器预训练和分辨率调整。
分类器预训练
在深度学习中,预训练是一种常见的策略,尤其是在对象检测领域。这意味着模型首先在一个大型的图像分类数据集(如ImageNet)上进行训练,学习提取图像中的特征。这些特征随后可以被用于其他任务,如对象检测。这种方法的优势在于,预训练的分类器已经学会了识别和理解图像中的各种特征,这可以加速并提高后续任务的学习效率和性能。
分辨率调整
原始的YOLO模型在训练分类器时使用了224×224的输入分辨率,然后在进行对象检测时增加分辨率到448×448。这种分辨率的变化要求网络同时适应学习目标检测任务和新的输入分辨率,这可能会对性能产生不利影响。
为了解决这个问题,YOLOv2采用了一种不同的策略。在进行目标检测训练之前,它首先在完整的448×448分辨率下对分类网络进行微调(fine-tune),持续10个epoch。这一步骤允许网络调整其卷积滤波器(filters),以便更好地处理高分辨率输入。经过这种预适应后,网络再进行目标检测的微调。
这种方法的结果是显著的性能提升。通过在高分辨率下预先微调分类网络,YOLOv2在平均精度均值(mAP,一种衡量对象检测性能的指标)上获得了近4%的提升。这表明,适应高分辨率输入对于改善对象检测模型的性能至关重要。
Convolutional With Anchor Boxes
YOLOv1 直接使用卷积特征提取器之上的全连接层来预测边界框的坐标。
与直接预测坐标不同,Faster R-CNN使用手工挑选的先验预测边界框。fast R-CNN中的区域建议网络(RPN)仅使用卷积层来预测锚框 (anchor boxes) 的偏移量和置信度。由于预测层是卷积的,RPN 在特征映射的每个位置预测这些偏移量。预测偏移量而不是预测坐标简化了问题,使网络更容易学习。
作者从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
当锚框与YOLO一起使用时,遇到了两个问题。
首先,锚框的尺寸是手工挑选的。网络可以学习适当地调整锚框,但如果为网络选择更好的先验 (锚框的初始尺寸),可以让网络更容易地学习预测好的检测。
作者并非手动选择先验,而是在训练集边界框上运行 k 均值聚类来自动找到好的先验。 如果使用带有欧氏距离的标准 k 均值,较大的框比较小的框会产生更多的错误。 然而,真正想要的是能够获得良好 IOU 分数的先验,该分数与 box 的大小无关。 因此,对于距离度量,作者使用:
如何理解上面这段话?
在这段话中,YOLO9000的开发者们讨论了在YOLO系统中引入锚框(anchor boxes)时遇到的两个主要问题,以及他们如何通过创新方法解决这些问题。让我们来重新理解这些内容。
问题
- 手动选择的锚框尺寸:在引入锚框的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的原因,它是模型复杂度和性能之间的一个良好折中。
也就是说,锚框的尺寸固定之后,模型在验证和推理阶段也不会改变锚框的尺寸,而是在训练过程中以锚框尺寸为参考来指导边界框的生成,对吗?
是的,你的理解是正确的。锚框的尺寸在模型初始化时是固定的,并且在训练、验证和推理阶段都不会改变。模型训练的过程是学习如何根据这些固定尺寸的锚框来预测正确的边界框,即确定对象的确切位置和大小。这里是具体的细节:
-
训练阶段:模型学习如何针对每个锚框预测一组调整值,这些调整值将锚框转换为尽可能与对应对象的真实边界框重合的预测边界框。
-
验证和推理阶段:使用训练阶段学到的调整策略,模型对新图像应用固定尺寸的锚框,并预测调整值来生成最终的边界框。
在整个过程中,锚框的尺寸是不变的;变化的是模型如何利用这些锚框来生成对每个特定对象的精确预测。这使得锚框成为一种高效的工具,用于指导模型捕捉和学习图像中各种大小和形状的对象。
那么锚框是否类似提前标注好的边界框,已经被标注在了训练集图像数据上?
锚框并不是预先在训练集上标注好的边界框,它们更像是一组预定义的框架,用于引导模型如何预测对象的位置。锚框的概念是这样的:
-
预定义的形状:锚框有不同的尺寸和比例,这些是根据数据集中的对象尺寸分布预先定义的。在YOLO9000中,通过k-means聚类算法确定了这些尺寸和比例。
-
在整个图像上均匀分布:这些锚框在图像的每个位置都有,不是实际的对象标注,而是潜在的对象位置的假设。换句话说,网络在每个位置都会尝试用这些锚框去“捕获”可能存在的对象。
-
用于预测:在训练过程中,模型学习如何根据每个锚框的位置和尺寸调整其预测,以便最终生成的边界框尽可能接近实际的对象边界。这包括调整锚框的中心位置、宽度和高度。
-
与真实标注的交互:在训练时,模型会将这些锚框与真实的标注边界框比较,并学习如何调整锚框以使预测的边界框与真实标注的边界框尽可能匹配。
因此,锚框可以看作是模型用来预测真实边界框的一种工具或起点,并不是已经标注在图像数据上的实际边界框。它们是模型内部使用的一种机制,旨在提高检测的准确性和效率。
既然锚框在图像的每个位置都有,那岂不是并不存在物体的区域会有很多冗余的锚框,这些冗余的锚框是如何处理的呢?
确实,由于锚框在整个图像上均匀分布,所以在没有物体的区域或者不属于目标类别的区域,会存在许多不必要的、冗余的锚框。这些冗余的锚框是通过以下几种机制进行处理的:
-
对象置信度评分(Objectness Score):
每个锚框会被赋予一个对象置信度评分,这个评分表示锚框内是否存在对象以及预测边界框与任何真实边界框的IOU(交并比)。在没有对象的区域,预测的对象置信度应该是低的,这样模型就可以忽略这些锚框。 -
非极大值抑制(Non-Maximum Suppression, NMS):
在预测阶段,非极大值抑制是一种常用的后处理技术,用来剔除重叠的边界框。即使多个锚框都预测到了同一个对象,NMS会保留置信度最高的一个边界框,而移除所有其他重叠且置信度较低的边界框。 -
训练过程中的正负样本区分:
在训练过程中,模型会学习区分正样本(即与真实边界框重叠度高的锚框)和负样本(即与真实边界框重叠度低或没有重叠的锚框)。这样,模型就能够专注于对真实对象位置的准确预测,同时忽略掉背景或不包含目标对象的区域。 -
损失函数:
在训练的损失函数中,通常会设计一种机制,减少对那些冗余锚框的惩罚。比如,如果一个锚框没有与任何真实对象重叠,它对总损失的贡献会被降低。
通过上述机制的组合使用,模型就可以在训练和预测时有效地管理和削减冗余的锚框,从而提升整体的检测性能。
也就是说,锚框就像是一个固定大小的探测镜,平铺充满整张图像,来确定各个区域是否有对象存在,如果某个区域的锚框检测到对象存在,模型会参照该锚框来指导边界框的生成,对吗?
是的,这是一个很好的类比。锚框确实像是遍布整张图像的一系列固定大小和比例的“探测镜”。每个锚框都在尝试捕捉其覆盖的图像区域内是否存在潜在的对象,并且每个锚框都独立地做出预测。如果一个锚框检测到了一个对象的存在,以下是接下来会发生的事情:
-
边界框预测:模型会计算调整值(比如位置偏移、宽度和高度的缩放等),以根据锚框的基础来细化预测的边界框,使其更好地适应检测到的对象的实际形状和位置。
-
置信度评分:模型还会为每个锚框分配一个对象置信度评分,表明预测的边界框内是否存在对象,以及预测框与任何真实框之间的交并比(IOU)的大小。
-
分类:同时,模型会为每个锚框分配类别概率,预测覆盖区域内对象的类别。
-
非极大值抑制(NMS):在最终确定边界框时,模型会使用NMS来移除那些重叠且置信度较低的边界框,确保每个对象只有一个高置信度的边界框被保留。
锚框机制提高了模型对不同形状和大小的对象的检测能力,并使得对象检测变得更加高效和准确。
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 来约束网络的预测落在这个范围内。
网络在输出特征图的每个 单元格 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的特征映射图上预测检测。虽然这对于大型物体来说已经足够了,但是对于定位较小的对象,更细粒度的特性可能会表现更好。Faster R-CNN 和 SSD 都在网络中的各种特征映射图上运行它们的提议网络,以获得一系列分辨率。作者采用了一种不同的方法,简单地添加一个 passthrough 层,以26 × 26的分辨率从先前的层中获得特征。
passthrough 层 通过将相邻的特征叠加到不同的通道而不是空间位置来连接高分辨率特征和低分辨率特征,类似于 ResNet 中的 identity mappings 。
这将26 × 26 × 512的特征图转换成13 × 13 × 2048的特征图,可以与原特征进行拼接。作者的检测器运行在这个扩展的特征映射之上,这样它就可以访问细粒度的特征。这将带来1%的性能提升。
Multi-Scale Training
原始的YOLO使用448 × 448的输入分辨率。添加锚框后,作者将分辨率更改为416×416。然而,由于作者的模型只使用卷积层和池化层,它可以动态调整大小。作者希望YOLOv2对不同大小的图像具有鲁棒性,因此将其训练到模型中。
这段话提到的是在YOLO模型的发展中,作者们如何处理输入图像的分辨率,并确保模型可以适应不同大小的图像。在原始的YOLO模型中,输入图像的分辨率是固定的448×448像素。但在后续版本YOLOv2中,出于以下原因和考虑,作者们做了一些改变:
-
引入锚框后的分辨率变化:
引入锚框后,作者们将模型的输入分辨率从448×448更改为416×416。这个更改是基于模型结构的调整,其中416×416的尺寸对于使用锚框的新网络结构更为合适。 -
模型的灵活性:
由于YOLOv2仅使用了卷积层和池化层,这种类型的网络具有天然的尺寸灵活性,允许输入图像的尺寸在不需要任何结构上的修改下即可变化。因此,YOLOv2可以在运行时调整其输入尺寸,这种特性被称为“全卷积性”。 -
训练时的尺寸鲁棒性:
为了使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损失函数进行反向传播。当其看到分类图像时,只从网络结构的特定分类部分反向传播损失
结论
作者介绍了 YOLOv2 和 YOLO9000 实时检测系统。YOLOv2 是最先进的,在各种检测数据集上比其他检测系统更快。此外,它可以在各种图像尺寸下运行,以提供速度和精度之间的平滑权衡。
YOLO9000 是一个实时检测框架,通过对检测和分类的共同优化,可以检测 9000多种目标类别。作者使用 WordTree 结合各种来源的数据和我们的联合优化技术在ImageNet和COCO上同时训练。YOLO9000 是缩小检测和分类之间数据集大小差距的有力一步。
作者的许多技术推广到目标检测之外。作者的ImageNet的WordTree表示为图像分类提供了更丰富、更详细的输出空间。
使用层次分类的数据集组合在分类和分割领域是有用的。
像多尺度训练这样的训练技术可以在各种视觉任务中提供好处。
对于未来的工作,作者希望使用类似的技术进行弱监督图像分割。作者还计划使用更强大的匹配策略来改进检测结果,以便在训练期间为分类数据分配弱标签。计算机视觉拥有大量的标记数据。作者将继续寻找将不同来源和数据结构结合在一起的方法,以构建更强大的视觉世界模型