单阶段目标检测学习

参考

零基础、快速学YOLO目标检测算法!
Yolo系列详解
YOLO系列算法

《You Only Look Once:Unified, Real-Time Object Detection》2016

摘要

我们提出了 YOLO,一种新的目标检测方法。先前有关对象检测的工作重新利用分类器来执行检测。相反,我们将对象检测视为空间分离的边界框和相关类概率的回归问题。单个神经网络在一次评估中直接从完整图像预测边界框和类别概率。由于整个检测管道是单个网络,因此可以直接在检测性能上进行端到端优化。

我们的统一架构速度非常快。我们的基础 YOLO 模型以每秒 45 帧的速度实时处理图像。该网络的较小版本 Fast YOLO 每秒处理速度高达 155 帧,同时仍实现其他实时检测器的两倍 mAP。与最先进的检测系统相比,**YOLO 会产生更多的定位错误,但不太可能预测背景误报。**最后,YOLO 学习对象的非常通用的表示。当从自然图像推广到艺术品等其他领域时,它的性能优于其他检测方法,包括 DPM 和 R-CNN。

1.简介

最近的方法(例如 R-CNN)使用区域提议方法首先在图像中生成潜在的边界框,然后在这些提议的框上运行分类器。分类后,后处理用于细化边界框,消除重复检测,并根据场景中的其他对象对框重新评分 [13]。这些复杂的管道速度缓慢且难以优化,因为每个单独的组件都必须单独训练。

我们将对象检测重新构建为单个回归问题,直接从图像像素到边界框坐标和类概率。使用我们的系统,您只需查看图像一次 (YOLO) 即可预测存在哪些对象以及它们所在的位置。

YOLO 非常简单:参见图 1。单个卷积网络同时预测多个边界框和这些框的类概率。YOLO 在完整图像上进行训练并直接优化检测性能。与传统的目标检测方法相比,这种统一模型有几个优点。
在这里插入图片描述
第一,YOLO 速度极快。由于我们将检测视为回归问题,因此不需要复杂的流程。我们只需在测试时在新图像上运行神经网络来预测检测结果。我们的基础网络以每秒 45 帧的速度运行,在 Titan X GPU 上没有批处理,快速版本的运行速度超过 150 fps。这意味着我们可以实时处理流视频,延迟小于 25 毫秒。此外,YOLO 的平均精度是其他实时系统的两倍以上。

第二,YOLO 在进行预测时对图像进行全局推理。与滑动窗口和基于区域提议的技术不同,YOLO 在训练和测试期间看到整个图像,因此它隐式编码有关类及其外观的上下文信息。Fast R-CNN 是一种顶级检测方法 [14],它会将图像中的背景块误认为是对象,因为它无法看到更大的上下文。与 Fast R-CNN 相比,YOLO 的背景错误数量不到一半。

第三,YOLO 学习对象的泛化表示。当在自然图像上进行训练并在艺术品上进行测试时,YOLO 的性能远远优于 DPM 和 R-CNN 等顶级检测方法。由于 YOLO 具有高度通用性,因此在应用于新领域或意外输入时不太可能崩溃。

**YOLO 在准确性方面仍然落后于最先进的检测系统。虽然它可以快速识别图像中的物体,但很难精确定位某些物体,尤其是小物体。**我们在实验中进一步研究这些权衡。

2. 统一检测

我们将目标检测的各个组件统一到单个神经网络中。我们的网络使用整个图像的特征来预测每个边界框。它还同时预测图像所有类别的所有边界框。这意味着我们的网络对完整图像和图像中的所有对象进行全局推理。YOLO 设计可实现端到端训练和实时速度,同时保持较高的平均精度。

我们的系统将输入图像划分为 S × S 网格。如果对象的中心落入网格单元中,则该网格单元负责检测该对象。

每个网格单元预测 B 个边界框以及这些框的置信度分数。这些置信度分数反映了模型对盒子包含对象的置信度,以及模型认为盒子预测的准确性。正式地,我们将置信度定义为 Pr(Object) ∗ IOUtruth pred 。如果该单元格中不存在对象,则置信度分数应为零。否则,我们希望置信度得分等于预测框与真实框之间的并集上的交集 (IOU)。

每个边界框由 5 个预测组成:x、y、w、h 和置信度。 (x; y) 坐标表示相对于网格单元边界的框中心。宽度和高度是相对于整个图像预测的。最后,置信度预测表示预测框与任何地面实况框之间的 IOU。

每个网格单元还预测 C 个条件类概率 Pr(Classi jObject)。这些概率以包含对象的网格单元为条件。我们只预测每个网格单元的一组类别概率,而不管框 B 的数量。

在测试时,我们将条件类概率和单个框置信度预测相乘,
在这里插入图片描述
这为我们提供了每个框的特定于类别的置信度分数。这些分数既编码了该类出现在框中的概率,也编码了预测框与对象的拟合程度。
在这里插入图片描述

2.1.网络设计

我们将该模型实现为卷积神经网络,并在 PASCAL VOC 检测数据集 [9] 上对其进行评估。网络的初始卷积层从图像中提取特征,而全连接层则预测输出概率和坐标。

我们的网络架构受到图像分类的 GoogLeNet 模型的启发 [34]。我们的网络有 24 个卷积层,后面跟着 2 个全连接层。我们没有使用 GoogLeNet 使用的 inception 模块,而是简单地使用 1 × 1 缩减层,后跟 3 × 3 卷积层,类似于 Lin 等人[22]。完整网络如图 3 所示。
在这里插入图片描述

2.2.训练

我们在 ImageNet 1000 类竞赛数据集 [30] 上预训练我们的卷积层。对于预训练,我们使用图 3 中的前 20 个卷积层,然后是平均池化层和全连接层。我们训练这个网络大约一周,并在 ImageNet 2012 验证集上实现了 88% 的单次裁剪 top-5 准确率,与 Caffe Model Zoo 中的 GoogLeNet 模型相当 [24]。我们使用 Darknet 框架进行所有训练和推理 [26]。

然后我们转换模型以执行检测。 Ren 等人表明,向预训练网络添加卷积层和连接层可以提高性能 [29]。按照他们的示例,我们添加了四个卷积层和两个具有随机初始化权重的全连接层。检测通常需要细粒度的视觉信息,因此我们将网络的输入分辨率从 224 × 224 增加到 448 × 448。

我们的最后一层预测类概率和边界框坐标。我们通过图像宽度和高度标准化边界框的宽度和高度,以便它们落在 0 和 1 之间。我们将边界框 x 和 y 坐标参数化为特定网格单元位置的偏移量,因此它们也限制在 0 和 1 之间。

我们对最后一层使用线性激活函数,所有其他层使用以下泄漏修正线性激活:在这里插入图片描述
我们优化模型输出中的平方和误差。我们使用平方和误差,因为它很容易优化,但它并不完全符合我们最大化平均精度的目标。它对定位误差和分类误差的权重相等,这可能并不理想。此外,在每个图像中,许多网格单元不包含任何对象。这会将这些单元格的“置信度”分数推向零,通常会压倒包含对象的单元格的梯度。这可能会导致模型不稳定,导致训练早期出现分歧。

为了解决这个问题,我们增加了边界框坐标预测的损失,并减少了不包含对象的框的置信度预测的损失。我们使用两个参数 λcoord 和 λnoobj 来完成此操作。我们设置 λcoord = 5 和 λnoobj = .5。

平方和误差还对大盒子和小盒子中的误差进行同等加权。我们的误差指标应该反映出大盒子中的小偏差没有小盒子中的小偏差那么重要。为了部分解决这个问题,我们预测边界框宽度和高度的平方根,而不是直接预测宽度和高度。

YOLO 预测每个网格单元的多个边界框。在训练时,我们希望每个对象只由一个边界框预测器负责。我们指定一个预测器“负责”预测一个对象,该对象的预测与实际情况具有最高的当前 IOU。这导致边界框预测器之间的专业化。每个预测器都能更好地预测某些尺寸、长宽比或对象类别,从而提高整体召回率。

(为什么我们需要两个 Bbox 来进行预测呢?
在训练时,我们希望两个框同时工作,但真正计算损失的时候,我们只去对 IOU 最大的框进行梯度下降和修正。类似于一个相同的工作,让两个人一起做,为了保障工作正常完成。在训练最后,会发现两个框意见开始出现了分工,比如一个框倾向于去检测细长型的物体。另一个框倾向于去检测扁宽型的物体。
总结一下就是,在训练阶段,输出的两个 Bbox 只会选择其中一个参与损失的计算(和 gd IOU大的那个)。
在测试阶段,输出的两个 Bbox 只有一个有实际预测的意义。
通过前面讲解,可以看到 YoloV1 至多只能预测 49 个目标,即每个“负责”区域输出一个目标。
注意!我们可以使用不止 2 个 Bbox,理论上 Bbox 越多效果越好,但是效率会降低。作者取两个 Bbox 的原因是因为性能和效率的取舍。
————————————————
版权声明:本文为CSDN博主「莫莫莫i」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wmymo/article/details/107815217)

在训练期间,我们优化以下多部分损失函数:
在这里插入图片描述
其中 1 obj i 表示对象是否出现在单元格 i 中,1 obj ij 表示单元格 i 中的第 j 个边界框预测器“负责”该预测。

请注意,如果该网格单元中存在对象,则损失函数仅惩罚分类错误(因此是前面讨论的条件类概率)。如果该预测器对地面实况框“负​​责”(即在该网格单元中具有最高的 IOU),它也只会惩罚边界框坐标错误。(感觉好难懂、、、一个格子会预测到格子外的目标吗?还是只预测包含在里面的?如果只预测里面的话,一个格子两个框够不够?)

为了避免过度拟合,我们使用 dropout 和广泛的数据增强。在第一个连接层之后,速率 = 0.5 的 dropout 层会阻止层之间的共同适应 [18]。对于数据增强,我们引入了高达原始图像大小 20% 的随机缩放和平移。我们还在 HSV 色彩空间中随机调整图像的曝光度和饱和度,最大比例为 1:5。

2.3.推理

网格设计增强了边界框预测的空间多样性。通常,物体属于哪个网格单元是很清楚的,并且网络只为每个物体预测一个框。然而,一些大的物体或者靠近多个单元格边界的物体可以被多个单元格很好地定位。非极大值抑制可用于修复这些多重检测。虽然对于 R-CNN 或 DPM 而言,非最大抑制对性能并不重要,但非极大值抑制使 mAP 增加了 2-3%。

2.4. YOLO 的局限性

YOLO 对边界框预测施加了很强的空间约束,因为每个网格单元只能预测两个框并且只能有一个类别。这种空间约束限制了我们的模型可以预测的附近物体的数量。我们的模型很难处理成群出现的小物体,例如鸟群。

由于我们的模型学习从数据中预测边界框,因此它很难推广到新的或不寻常的纵横比或配置的对象。我们的模型还使用相对粗糙的特征来预测边界框,因为我们的架构具有来自输入图像的多个下采样层。

最后,当我们训练接近检测性能的损失函数时,我们的损失函数对小边界框和大边界框的错误处理相同。大盒子中的小错误通常是良性的,但小盒子中的小错误对 IOU 的影响要大得多。我们的主要错误来源是不正确的定位。

3. 与其他检测系统的比较

目标检测是计算机视觉的核心问题。检测管道通常首先从输入图像中提取一组鲁棒特征(Haar [25]、SIFT [23]、HOG [4]、卷积特征 [6])。然后,使用分类器 [36, 21, 13, 10] 或定位器 [1, 32] 来识别特征空间中的对象。这些分类器或定位器以滑动窗口方式在整个图像或图像中的某些区域子集上运行[35,15,39]。我们将 YOLO 检测系统与几个顶级检测框架进行比较,突出显示关键的相似点和差异。

**可变形零件模型。**可变形零件模型 (DPM) 使用滑动窗口方法进行对象检测 [10]。 DPM 使用分离的管道来提取静态特征、对区域进行分类、预测高分区域的边界框等。我们的系统用单个卷积神经网络替换所有这些不同的部分。该网络同时执行特征提取、边界框预测、非极大值抑制和上下文推理。该网络不使用静态特征,而是内联训练特征并针对检测任务对其进行优化。我们的统一架构可带来比 DPM 更快、更准确的模型。

R-CNN。 R-CNN 及其变体使用区域提议而不是滑动窗口来查找图像中的对象。选择性搜索 [35] 生成潜在的边界框,卷积网络提取特征,SVM 对框进行评分,线性模型调整边界框,非最大抑制消除重复检测。这个复杂管道的每个阶段都必须独立精确调整,并且生成的系统非常慢,测试时每个图像需要 40 秒以上 [14]。

YOLO 与 R-CNN 有一些相似之处。每个网格单元都会提出潜在的边界框,并使用卷积特征对这些框进行评分。然而,我们的系统对网格单元建议施加了空间限制,这有助于减轻对同一对象的多次检测。我们的系统还提出了少得多的边界框,每张图像只有 98 个,而选择性搜索的边界框数量约为 2000 个。最后,我们的系统将这些单独的组件组合成一个共同优化的模型。

其他快速检测器 Fast 和 Faster R-CNN 专注于通过共享计算和使用神经网络来提议区域而不是选择性搜索来加速 R-CNN 框架 [14] [28]。虽然它们比 R-CNN 提供了速度和准确性方面的改进,但两者仍然达不到实时性能。

针对单一类别(例如人脸或人物)的检测器可以进行高度优化,因为它们必须处理的变化要少得多[37]。 YOLO 是一种通用检测器,可以学习同时检测各种物体。

Deep MultiBox.。与 R-CNN 不同,Szegedy 等人训练卷积神经网络来预测感兴趣区域 [8],而不是使用选择性搜索。 MultiBox 还可以通过用单类预测替换置信度预测来执行单个对象检测。然而,MultiBox 无法执行一般的目标检测,并且仍然只是更大的检测管道中的一部分,需要进一步的图像块分类。 YOLO 和 MultiBox 都使用卷积网络来预测图像中的边界框,但 YOLO 是一个完整的检测系统。

OverFeat. Sermanet 等人训练卷积神经网络来执行定位并调整该定位器来执行检测[32]。 OverFeat 有效地执行滑动窗口检测,但它仍然是一个分离的系统。 OverFeat 针对定位而非检测性能进行优化。与 DPM 一样,定位器在进行预测时仅看到局部信息。 OverFeat 无法推理全局上下文,因此需要大量的后处理来产生一致的检测。

MultiGrasp. 我们的工作在设计上与 Redmon 等人 [27] 的抓取检测工作类似。我们的边界框预测网格方法基于 MultiGrasp 系统,用于回归抓取。然而,抓取检测比物体检测简单得多。 MultiGrasp 只需要预测包含一个对象的图像的单个可抓取区域。它不必估计物体的大小、位置或边界,也不必预测它的类别,只需找到适合抓取的区域即可。 YOLO 预测图像中多个类的多个对象的边界框和类概率。

4. 实验

4.1.与其他实时系统的比较

最近的 Faster R-CNN 用神经网络取代选择性搜索来提出边界框,类似于 Szegedy 等人 [8] 在我们的测试中,他们最准确的模型达到 7 fps,而较小、不太准确的模型则以 18 fps 运行。 Faster R-CNN 的 VGG-16 版本比 YOLO 高 10 mAP,但也慢 6 倍。 ZeilerFergus Faster R-CNN 仅比 YOLO 慢 2.5 倍,但准确度也较低。

图 4 显示了所有 20 个类别中每种错误类型的平均细分。
在这里插入图片描述
YOLO 很难正确定位对象。 YOLO 的错误中,本地化错误所占的比例比所有其他来源错误的总和还多。 Fast R-CNN 的定位错误要少得多,但背景错误要多得多。 13.6% 的顶级检测是不包含任何物体的误报。 Fast R-CNN 预测背景检测的可能性几乎是 YOLO 的 3 倍。

4.3.结合 Fast R-CNN 和 YOLO

YOLO 的背景错误比 Fast R-CNN 少得多。通过使用 YOLO 消除 Fast R-CNN 的背景检测,我们的性能得到了显着提升。对于 R-CNN 预测的每个边界框,我们检查 YOLO 是否预测了相似的框。如果确实如此,我们会根据 YOLO 预测的概率和两个框之间的重叠来增强该预测。

YOLO 的提升不仅仅是模型集成的副产品,因为组合不同版本的 Fast R-CNN 几乎没有什么好处。相反,正是因为 YOLO 在测试时犯了不同类型的错误,它才能够如此有效地提升 Fast R-CNN 的性能。

6.结论

我们介绍 YOLO,一个用于目标检测的统一模型。我们的模型构建简单并且可以直接在完整图像上训练。与基于分类器的方法不同,YOLO 是在直接对应于检测性能的损失函数上进行训练的,并且整个模型是联合训练的。

《SSD: Single Shot MultiBox Detector》2016

摘要

我们提出了一种使用单个深度神经网络检测图像中的对象的方法。我们的方法名为 SSD,将边界框的输出空间离散化为一组默认框,每个特征图位置具有不同的纵横比和比例。在预测时,网络会针对每个默认框中每个对象类别的存在情况生成分数,并对框进行调整以更好地匹配对象形状。此外,该网络结合了具有不同分辨率的多个特征图的预测,以自然地处理各种尺寸的对象。 SSD 相对于需要对象提案的方法来说很简单,因为它完全消除了提案生成和后续像素或特征重采样阶段,并将所有计算封装在单个网络中。这使得 SSD 易于训练,并且可以直接集成到需要检测组件的系统中。 PASCAL VOC、COCO 和 ILSVRC 数据集上的实验结果证实,SSD 与利用额外对象提议步骤的方法相比具有竞争性的准确性,并且速度更快,同时为训练和推理提供统一的框架。对于 300 × 300 输入,SSD 在 Nvidia Titan X 上以 59 FPS 的 VOC2007 测试中实现了 74.3% mAP1;对于 512 × 512 输入,SSD 实现了 76.9% mAP,优于同类最先进的 Faster R-CNN 模型。与其他单阶段方法相比,即使输入图像尺寸较小,SSD 也具有更高的精度。代码位于:https://github.com/weiliu89/caffe/tree/ssd。

1 Introduction

当前最先进的目标检测系统是以下方法的变体:假设边界框,对每个框重新采样像素或特征,并应用高质量分类器。自 Selective Search 工作 [1] 到 PASCAL VOC、COCO 和 ILSVRC 检测的当前领先结果(所有这些都基于 Faster R-CNN [2]),尽管具有更深层次的功能(例如 [3]),该管道在检测基准上一直占主导地位。虽然这些方法很准确,但对于嵌入式系统来说计算量太大,而且即使使用高端硬件,对于实时应用程序来说也太慢。

本文提出了第一个基于深度网络的目标检测器,它不会为边界框假设重新采样像素或特征,并且与重新采样的方法一样准确。这使得高精度检测的速度显着提高(在 VOC2007 测试中,59 FPS,mAP 74.3%,而 Faster R-CNN 7 FPS,mAP 73.2% 或 YOLO 45 FPS,mAP 63.4%)。速度的根本改进来自于消除边界框建议和随后的像素或特征重采样阶段。我们并不是第一个这样做的人(参见[4,5]),但通过添加一系列改进,我们设法比以前的尝试显着提高准确性。我们的改进包括使用小型卷积滤波器来预测边界框位置中的对象类别和偏移,使用单独的预测器(滤波器)进行不同的纵横比检测,以及将这些滤波器应用于网络后期的多个特征图以执行多尺度检测。通过这些修改,特别是使用多层进行不同尺度的预测,我们可以使用相对较低分辨率的输入实现高精度,从而进一步提高检测速度。虽然这些贡献单独看来可能很小,但我们注意到,最终的系统提高了 PASCAL VOC 实时检测的准确性,从 YOLO 的 63.4% mAP 提高到 SSD 的 74.3% mAP。与最近备受瞩目的残差网络研究相比,这在检测精度方面有了更大的相对改进[3]。此外,显着提高高质量检测的速度可以扩大计算机视觉有用的设置范围。

我们将我们的贡献总结如下:
– 我们引入了 SSD,这是一种适用于多个类别的单次检测器,比之前最先进的单次检测器 (YOLO) 更快,而且准确度明显更高,与执行显式区域提议和池化的较慢技术(包括 Faster R-CNN)一样准确。

– SSD 的核心是使用应用于特征图的小型卷积滤波器来预测一组固定的默认边界框的类别分数和框偏移。

– 为了实现高检测精度,我们从不同尺度的特征图生成不同尺度的预测,并按纵横比明确分离预测。

– 这些设计功能可实现简单的端到端训练和高精度,即使在低分辨率输入图像上也是如此,从而进一步改善速度与精度的权衡。

– 实验包括对 PASCAL VOC、COCO 和 ILSVRC 上评估的不同输入大小的模型进行时序和准确性分析,并与一系列最新的最先进方法进行比较。

2 The Single Shot Detector (SSD)

本节介绍我们提出的 SSD 检测框架(第 2.1 节)和相关的训练方法(第 2.2 节)。随后,第三节展示了数据集特定的模型细节和实验结果。

2.1 Model

SSD 方法基于前馈卷积网络,该网络生成固定大小的边界框集合以及这些框中是否存在对象类实例的分数,然后是非最大抑制步骤以生成最终检测。早期的网络层基于用于高质量图像分类的标准架构(在任何分类层之前被截断),我们将其称为基础网络。然后,我们向网络添加辅助结构以产生具有以下主要特征的检测:

用于检测的多尺度特征图 我们将卷积特征层添加到截断的基础网络的末尾。这些层的大小逐渐减小,并允许在多个尺度上预测检测。用于预测检测的卷积模型对于每个特征层都是不同的(参见在单尺度特征图上运行的 Overfeat[4] 和 YOLO[5])。

用于检测的卷积预测器 每个添加的特征层(或者可选地来自基础网络的现有特征层)可以使用一组卷积滤波器产生一组固定的检测预测。这些在图 2 中的 SSD 网络架构顶部表示。对于具有 p 个通道的大小为 m × n 的特征层,用于预测潜在检测参数的基本元素是一个 3 × 3 × p 小内核,它产生类别的分数,或相对于默认框坐标的形状偏移。在应用内核的每个 m × n 位置处,它都会产生一个输出值。边界框偏移输出值是相对于每个特征图位置的默认框位置来测量的(参见 YOLO[5] 的架构,该架构在此步骤中使用中间全连接层而不是卷积滤波器)。
在这里插入图片描述
默认框和长宽比 我们将一组默认边界框与每个特征图单元相关联,用于网络顶部的多个特征图。默认框以卷积方式平铺特征图,以便每个框相对于其对应单元的位置是固定的。在每个特征图单元中,我们预测相对于单元中默认框形状的偏移量,以及指示每个框中是否存在类实例的每类分数。具体来说,对于给定位置处的 k 个盒子中的每个盒子,我们计算 c 类分数以及相对于原始默认盒子形状的 4 个偏移量。这导致总共 (c + 4)k 个滤波器应用于特征图中每个位置,从而为 m × n 特征图产生 (c + 4)kmn 个输出。有关默认框的说明,请参阅图 1。我们的默认框与 Faster R-CNN [2] 中使用的锚框类似,但是我们将它们应用于不同分辨率的多个特征图。在多个特征图中允许不同的默认框形状可以让我们有效地离散可能的输出框形状的空间。
在这里插入图片描述

2.2 Training

训练 SSD 和训练使用区域提议的典型检测器之间的主要区别在于,地面实况信息需要分配给固定检测器输出集中的特定输出。 YOLO[5] 中的训练以及 Faster R-CNN[2] 和 MultiBox[7] 的区域提议阶段也需要此版本的某些版本。一旦确定了分配,损失函数和反向传播就会被端到端地应用。训练还涉及选择用于检测的默认框集和尺度以及硬负挖掘和数据增强策略。

匹配策略 在训练过程中,我们需要确定哪些默认框对应于地面实况检测,并相应地训练网络。对于每个地面实况框,我们从随位置、长宽比和比例变化的默认框中进行选择。我们首先将每个地面实况框与具有最佳杰卡卡重叠的默认框进行匹配(如 MultiBox [7] 中)。与 MultiBox 不同,我们将默认框与任何 Jaccard 重叠高于阈值 (0.5) 的地面实况进行匹配。这简化了学习问题,允许网络预测多个重叠默认框的高分,而不是要求它只选择重叠最大的一个。

训练目标 SSD 训练目标源自 MultiBox 目标 [7,8],但扩展为处理多个对象类别。在这里插入图片描述
其中 N 是匹配的默认框的数量。如果 N = 0,则将损失设置为 0。定位损失是预测框 (l) 和地面实况框 (g) 参数之间的 Smooth L1 损失 [6]。与 Faster R-CNN [2] 类似,我们回归默认边界框 (d) 的中心 (cx, cy) 及其宽度 (w) 和高度 (h) 的偏移。
在这里插入图片描述
选择默认框的比例和纵横比 为了处理不同的对象尺度,一些方法[4,9]建议以不同尺寸处理图像,然后组合结果。然而,通过利用单个网络中多个不同层的特征图进行预测,我们可以模拟相同的效果,同时还可以跨所有对象尺度共享参数。先前的工作[10,11]已经表明,使用较低层的特征图可以提高语义分割质量,因为较低层捕获输入对象的更多精细细节。同样,[12]表明,添加从特征图中池化的全局上下文可以帮助平滑分割结果。

受这些方法的启发,我们使用下部和上部特征图进行检测。图 1 显示了框架中使用的两个示例特征图(8×8 和 4×4)。在实践中,我们可以使用更多的计算开销。在这里插入图片描述
已知网络内不同级别的特征图具有不同的(经验)感受野大小[13]。幸运的是,在SSD框架内,默认框不需要对应于每层的实际感受野。我们设计了默认框的平铺,以便特定的特征图学会响应对象的特定比例。假设我们想使用 m 个特征图进行预测。每个特征图的默认框的比例计算如下:在这里插入图片描述
在这里插入图片描述
通过结合来自许多特征图的所有位置的具有不同比例和纵横比的所有默认框的预测,我们拥有一组多样化的预测,涵盖各种输入对象的大小和形状。例如,在图 1 中,狗与 4 × 4 特征图中的默认框匹配,但不与 8 × 8 特征图中的任何默认框匹配。这是因为这些框具有不同的尺度并且与狗框不匹配,因此在训练期间被视为负例。

硬负挖掘 在匹配步骤之后,大多数默认框都是负的,特别是当可能的默认框的数量很大时。这引入了正负训练示例之间的显着不平衡。我们没有使用所有的负例,而是使用每个默认框的最高置信度损失对它们进行排序,并选择最上面的那些,以便负例和正例之间的比例最多为 3:1。我们发现这可以带来更快的优化和更稳定的训练。

数据增强 为了使模型对各种输入对象大小和形状更加稳健,通过以下选项之一对每个训练图像进行随机采样:
– 使用整个原始输入图像。
– 对patch进行采样,使与对象的最小 Jaccard 重叠为 0.1、0.3、0.5、0.7 或 0.9。
– 随机采样patch。

每个采样的patch的大小是原始图像大小的[0.1, 1],长宽比在1/2和2之间。如果ground true box的重叠部分的中心位于采样的patch中,我们保留它的重叠部分。在上述采样步骤之后,除了应用一些类似于[14]中描述的光度畸变之外,每个采样的patch都被调整为固定大小,并以 0.5 的概率水平翻转。

3 Experimental Results

基础网络 我们的实验都是基于VGG16 [15],它是在ILSVRC CLS-LOC数据集[16]上进行预训练的。与 DeepLab-LargeFOV [17] 类似,我们将 fc6 和 fc7 转换为卷积层,对 fc6 和 fc7 的参数进行子采样,将 pool5 从 2 × 2 − s2 更改为 3 × 3 − s1,并使用 a` trous 算法 [18]来填补“漏洞”。我们删除所有 dropout 层和 fc8 层。我们使用初始学习率 10−3 、动量 0.9 、权重衰减 0.0005 和批量大小 32 的 SGD 对结果模型进行微调。每个数据集的学习率衰减策略略有不同,我们将在稍后描述详细信息。完整的训练和测试代码基于 Caffe [19] 构建,并开源于:https://github.com/weiliu89/caffe/tree/ssd。

3.1 PASCAL VOC2007

3.2 Model analysis

数据增强至关重要。 Fast和Faster R-CNN使用原始图像和水平翻转来训练。我们使用更广泛的采样策略,类似于 YOLO [5]。
表 2 显示,采用这种采样策略,我们可以将 mAP 提高 8.8%。我们不知道我们的采样策略会对 Fast 和 Faster R-CNN 带来多大好处,但它们可能受益较少,因为它们在分类过程中使用了特征池步骤,该步骤在设计上对对象翻译相对稳健。在这里插入图片描述

默认盒子形状越多越好。 如第 2.2 节所述默认情况下我们每个位置使用 6 个默认框。如果我们删除长宽比为 1/3 和 3 的框,性能会下降 0.6%。通过进一步删除长宽比为 1/2 和 2 的框,性能又下降了 2.1%。使用各种默认的盒子形状似乎可以使网络预测盒子的任务变得更容易。

Atrous速度更快。 如第 3 节所述,我们使用了子采样 VGG16 的atrous版本,遵循 DeepLab-LargeFOV [17]。如果我们使用完整的 VGG16,保持 pool5 为 2 × 2 − s2,并且不对 fc6 和 fc7 的参数进行二次采样,并添加 conv5 3 进行预测,结果大致相同,但速度慢了约 20%。

不同分辨率的多个输出层效果更好。 SSD 的一个主要贡献是在不同的输出层上使用不同尺度的默认框。为了衡量所获得的优势,我们逐步删除层并比较结果。为了公平比较,每次删除一层时,我们都会调整默认的框平铺,以保持框的总数与原始框相似(8732)。这是通过在剩余层上堆叠更多比例的框并根据需要调整框的比例来完成的。我们不会详尽地优化每个设置的平铺。表 3 显示了层数越少,精度就越低,从 74.3 单调下降到 62.4。当我们在一层上堆叠多个尺度的框时,许多尺度都位于图像边界上,需要小心处理。我们尝试了 Faster R-CNN [2] 中使用的策略,忽略边界上的框。我们观察到一些有趣的趋势。例如,如果我们使用非常粗糙的特征图(例如 conv11_2 (1 × 1) 或 conv10_2 (3 × 3)),它会大大损害性能。原因可能是修剪后我们没有足够的大盒子来覆盖大物体。当我们主要使用更精细的分辨率图像时,性能再次开始提高,因为即使在修剪之后仍然保留足够数量的大框。如果我们只使用 conv7 进行预测,性能是最差的,这强化了这样的信息:将不同尺度的框分布在不同层上是至关重要的。此外,由于我们的预测不依赖于 [6] 中的 ROI 池化,因此我们在低分辨率特征图中不存在折叠箱问题 [23]。 SSD 架构结合了各种分辨率的特征图的预测,以实现与 Faster R-CNN 相当的精度,同时使用较低分辨率的输入图像。在这里插入图片描述

3.3 PASCAL VOC2012

3.4 COCO

3.5 Preliminary ILSVRC results

3.6 小物体精度的数据增强

如果没有像 Faster R-CNN 那样的后续特征重采样步骤,小物体的分类任务对于 SSD 来说相对困难,正如我们的分析所示(见图 4)。第 2.2 节中描述的数据增强策略有助于显着提高性能,尤其是在 PASCAL VOC 等小型数据集上。该策略生成的随机裁剪可以被视为“放大”操作,并且可以生成许多更大的训练示例。为了实现创建更多小型训练样本的“缩小”操作,我们首先将图像随机放置在原始图像大小的 16 倍的画布上,并填充平均值,然后再进行任何随机裁剪操作。因为通过引入这种新的“扩展”数据增强技巧,我们获得了更多的训练图像,所以我们必须将训练迭代次数加倍。我们看到多个数据集的 mAP 持续增加了 2%-3%,如表 6 所示。具体而言,图 6 显示新的增强技巧显着提高了小对象的性能。这一结果强调了数据增强策略对最终模型准确性的重要性。在这里插入图片描述
改进 SSD 的另一种方法是设计更好的默认框平铺,使其位置和尺度更好地与特征图上每个位置的感受野对齐。我们把这个留到以后的工作中。

3.7 Inference time

考虑到我们的方法生成的大量框,在推理过程中有效地执行非极大值抑制(nms)至关重要。通过使用 0.01 的置信度阈值,我们可以过滤掉大多数框。然后,我们应用 nms,每类 Jaccard 重叠为 0.45,并保留每个图像的前 200 个检测。对于 SSD300 和 20 VOC 类别,此步骤每张图像花费约 1.7 毫秒,这接近所有新添加的层所花费的总时间(2.4 毫秒)。我们使用 Titan X 和 cuDNN v4 以及 Intel Xeon E5-2667v3@3.20GHz 测量批量大小 8 的速度。

表7显示了SSD、Faster R-CNN[2]和YOLO[5]之间的比较。我们的 SSD300 和 SSD512 方法在速度和准确性方面都优于 Faster R-CNN。尽管 Fast YOLO[5] 可以以 155 FPS 运行,但它的准确度较低,mAP 低了近 22%。据我们所知,SSD300 是第一个达到 70% 以上 mAP 的实时方法。请注意,大约 80% 的转发时间花费在基础网络上(在我们的例子中为 VGG16)。因此,使用更快的基础网络甚至可以进一步提高速度,这也可能使 SSD512 模型变得实时。
在这里插入图片描述

4 Related Work

图像中的目标检测有两类已建立的方法,一类基于滑动窗口,另一类基于区域提议分类。在卷积神经网络出现之前,这两种方法的最新技术——可变形零件模型(DPM)[26]和选择性搜索[1]——具有相当的性能。然而,在 R-CNN [22] 结合选择性搜索区域提议和基于卷积网络的后分类带来的巨大改进之后,区域提议目标检测方法变得流行。

原始的 R-CNN 方法已通过多种方式进行了改进。第一组方法提高了后分类的质量和速度,因为它需要对数千种图像裁剪进行分类,这是昂贵且耗时的。SPPnet [9] 显着加快了原始 R-CNN 方法的速度。它引入了一个空间金字塔池化层,该层对区域大小和比例更加鲁棒,并允许分类层重用在多种图像分辨率生成的特征图上计算的特征。 Fast R-CNN [6] 扩展了 SPPnet,使其可以通过最小化置信度和边界框回归的损失来端到端地微调所有层,边界框回归首次在 MultiBox [7] 中引入,用于学习对象性。

第二组方法使用深度神经网络提高提案生成的质量。在像 MultiBox [7,8] 这样的最新作品中,基于低级图像特征的选择性搜索区域提案被直接从单独的深度神经网络生成的提案所取代。这进一步提高了检测精度,但导致设置有些复杂,需要训练两个具有依赖性的神经网络。 Faster R-CNN [2] 用从区域提议网络 (RPN) 中学习的提议替换了选择性搜索提议,并引入了一种通过交替微调这两个网络的共享卷积层和预测层来将 RPN 与 Fast R-CNN 集成的方法。通过这种方式,区域建议用于池化中级特征,并且最终分类步骤的成本较低。我们的 SSD 与 Faster R-CNN 中的区域提议网络 (RPN) 非常相似,因为我们也使用一组固定的(默认)框进行预测,类似于 RPN 中的锚框。但我们不是使用这些来池化特征并评估另一个分类器,而是同时为每个框中的每个对象类别生成一个分数。因此,我们的方法避免了将 RPN 与 Fast R-CNN 合并的复杂性,并且更容易训练、更快、更容易集成到其他任务中。

另一组方法与我们的方法直接相关,完全跳过提议步骤并直接预测多个类别的边界框和置信度。 OverFeat [4] 是滑动窗口方法的深度版本,在了解底层对象类别的置信度后,直接从最顶层特征图的每个位置预测边界框。 YOLO [5] 使用整个最顶层的特征图来预测多个类别和边界框(这些类别共享)的置信度。我们的 SSD 方法属于此类,因为我们没有提议步骤,而是使用默认框。然而,我们的方法比现有的方法更灵活,因为我们可以使用来自不同比例的多个特征图的每个特征位置的纵横比。如果我们只使用最顶层特征图中每个位置的一个默认框,我们的 SSD 将具有与 OverFeat [4] 类似的架构;如果我们使用整个最顶层的特征图并添加一个全连接层进行预测而不是卷积预测器,并且不明确考虑多个纵横比,我们可以近似重现 YOLO [5]。

5 Conclusions

本文介绍了SSD,一种用于多类别的快速单次目标检测器。我们模型的一个关键特征是使用附加到网络顶部的多个特征图的多尺度卷积边界框输出。这种表示方式使我们能够有效地对可能的盒子形状的空间进行建模。我们通过实验验证,在适当的训练策略下,大量精心选择的默认边界框可以提高性能。我们构建的 SSD 模型的框预测采样位置、规模和纵横比比现有方法至少高一个数量级 [5,7]。我们证明,在相同的 VGG-16 基础架构下,SSD 在准确性和速度方面均优于最先进的目标检测器同类产品。我们的 SSD512 模型在 PASCAL VOC 和 COCO 上的准确性方面显着优于最先进的 Faster R-CNN [2],同时速度提高了 3 倍。我们的实时 SSD300 模型以 59 FPS 的速度运行,这比当前的实时 YOLO [5] 替代方案更快,同时产生明显优越的检测精度。

除了其独立的实用程序之外,我们相信我们的整体且相对简单的 SSD 模型为采用对象检测组件的大型系统提供了有用的构建块。一个有前途的未来方向是探索其作为使用循环神经网络的系统的一部分的用途,以同时检测和跟踪视频中的对象。

《YOLO9000: Better, Faster, Stronger》2017

摘要

我们推出 YOLO9000,这是一种最先进的实时物体检测系统,可以检测超过 9000 个物体类别。首先,我们对 YOLO 检测方法提出了各种改进,这些改进既新颖又借鉴了之前的工作。改进后的模型 YOLOv2 在 PASCAL VOC 和 COCO 等标准检测任务上是最先进的。使用新颖的多尺度训练方法,相同的 YOLOv2 模型可以在不同的规模下运行,从而在速度和准确性之间提供轻松的权衡。在 67 FPS 下,YOLOv2 在 VOC 2007 上获得 76.8 mAP。在 40 FPS 下,YOLOv2 获得 78.6 mAP,优于采用 ResNet 和 SSD 的 Faster RCNN 等最先进的方法,同时运行速度仍然明显更快。最后,我们提出了一种联合训练目标检测和分类的方法。使用这种方法,我们在 COCO 检测数据集和 ImageNet 分类数据集上同时训练 YOLO9000。我们的联合训练允许 YOLO9000 预测没有标记检测数据的对象类的检测。我们在 ImageNet 检测任务上验证了我们的方法。尽管YOLO9000 仅拥有 200 个类别中 44 个类别的检测数据,但在 ImageNet 检测验证集上获得了 19.7 mAP。在 COCO 之外的 156 个类上,YOLO9000 获得 16.0 mAP。YOLO9000 可实时预测 9000 多种不同物体类别的检测结果。

1.简介

与分类和标记等其他任务的数据集相比,当前的对象检测数据集是有限的。最常见的检测数据集包含数千到数十万张图像,以及数十到数百个标签[3] [10] [2]。分类数据集拥有数百万张图像,其中包含数万或数十万个类别[20][2]。

我们希望检测能够扩展到对象分类级别。然而,用于检测的标记图像比用于分类或标记的标记要昂贵得多(标记通常是用户免费提供的)。

我们提出了一种新方法来利用我们已有的大量分类数据,并用它来扩展当前检测系统的范围。我们的方法使用对象分类的分层视图,使我们能够将不同的数据集组合在一起。

我们还提出了一种联合训练算法,使我们能够在检测和分类数据上训练目标检测器。我们的方法利用标记的检测图像来学习精确定位对象,同时使用分类图像来增加其词汇量和鲁棒性。

我们使用这种方法训练 YOLO9000,这是一种实时物体检测器,可以检测 9000 多种不同的物体类别。首先,我们改进了基础 YOLO 检测系统,生成了 YOLOv2,这是一种最先进的实时检测器。然后,我们使用数据集组合方法和联合训练算法在 ImageNet 的 9000 多个类以及 COCO 的检测数据上训练模型。

2.Better

与最先进的检测系统相比,YOLO 存在多种缺点。与 Fast R-CNN 相比,YOLO 的误差分析表明 YOLO 存在大量定位错误。此外,与基于区域提议的方法相比,YOLO 的召回率相对较低。因此,我们主要关注提高召回和定位,同时保持分类准确性。

计算机视觉通常趋向于更大、更深的网络[6][18][17]。更好的性能通常取决于训练更大的网络或将多个模型集成在一起。然而,对于 YOLOv2,我们想要一个更准确且速度仍然很快的检测器。我们不是扩大我们的网络,而是简化网络,然后使表示更容易学习。我们将过去工作中的各种想法与我们自己的新颖概念结合起来,以提高 YOLO 的性能。结果总结见表 2。在这里插入图片描述

批量归一化。

批量归一化可显着提高收敛性,同时消除对其他形式正则化的需要 [7]。通过在 YOLO 中的所有卷积层上添加批量归一化,我们的 mAP 提高了 2% 以上。批量归一化还有助于规范模型。通过批量归一化,我们可以从模型中删除 dropout,而不会过度拟合。

高分辨率分类器。

所有最先进的检测方法都使用在 ImageNet [16] 上预训练的分类器。

从 AlexNet 开始,大多数分类器对小于 256 × 256 的输入图像进行操作 [8]。最初的YOLO以224×224训练分类器网络,并将分辨率提高到448进行检测。这意味着网络必须同时切换到学习对象检测和调整到新的输入分辨率。

对于 YOLOv2,我们首先在 ImageNet 上以全 448 × 448 分辨率微调分类网络 10 个 epoch。这使得网络有时间调整其滤波器,以便在更高分辨率的输入上更好地工作。然后我们在检测时微调生成的网络。这个高分辨率分类网络使我们的 mAP 增加了近 4%。

有锚框的卷积。

YOLO 使用卷积特征提取器顶部的全连接层直接预测边界框的坐标。Faster R-CNN 不是直接预测坐标,而是使用精心挑选的先验来预测边界框 [15]。 Faster R-CNN 中的区域提议网络 (RPN) 仅使用卷积层来预测锚框的偏移量和置信度。由于预测层是卷积层,因此 RPN 会预测特征图中每个位置的这些偏移量。预测偏移量而不是坐标可以简化问题并使网络更容易学习。

我们从 YOLO 中删除了全连接层,并使用锚框来预测边界框。首先,我们消除一个池化层,以使网络卷积层的输出具有更高分辨率。我们还缩小网络以在 416 输入图像上运行,而不是 448×448。我们这样做是因为我们希望特征图中有奇数个位置,因此只有一个中心单元。对象,尤其是大型对象,往往占据图像的中心,因此最好在中心有一个位置来预测这些对象,而不是四个都在附近的位置。 YOLO 的卷积层将图像下采样 32 倍,因此通过使用 416 的输入图像,我们得到 13 × 13 的输出特征图。

当我们转向锚框时,我们还将类预测机制与空间位置解耦,并预测每个锚框的类和对象性。在 YOLO 之后,对象性预测仍然预测真实情况和建议框的 IOU,并且类预测预测存在对象的情况下该类的条件概率。

使用锚框,我们的准确性会略有下降。YOLO 仅预测每张图像 98 个框,但使用锚框,我们的模型可以预测超过 1000 个框。如果没有锚框,我们的中间模型的 mAP 为 69.5,召回率为 81%。使用锚框,我们的模型获得了 69.2 mAP,召回率为 88%。尽管 mAP 下降,但召回率的增加意味着我们的模型还有更大的改进空间。

维度簇。

在将锚框与 YOLO 一起使用时,我们遇到了两个问题。首先,盒子尺寸是手工挑选的。网络可以学习适当地调整框,但如果我们为网络选择更好的先验,我们可以使网络更容易学习预测良好的检测。

如果我们使用带有欧氏距离的标准 k 均值,较大的框比较小的框会产生更多的错误。然而,我们真正想要的是能够获得良好 IOU 分数的先验,该分数与盒子的大小无关。因此,对于我们的距离度量,我们使用:在这里插入图片描述
我们对不同的 k 值运行 k 均值,并绘制具有最接近质心的平均 IOU,请参见图 2。我们选择 k = 5 作为模型复杂性和高召回率之间的良好权衡。簇质心与手工挑选的锚框有显着不同。短而宽的盒子较少,而高而薄的盒子较多。在这里插入图片描述
表 1 中我们将我们的聚类策略最接近的先验和精心挑选的锚框的平均 IOU 进行比较。仅 5 个先验时,质心的表现与 9 个锚框类似,平均 IOU 为 61.0和60.9。如果我们使用 9 个质心,我们会看到平均 IOU 更高。这表明使用 k 均值生成边界框以更好的表示方式启动模型,并使任务更容易学习。
在这里插入图片描述

直接位置预测。

当将锚框与 YOLO 一起使用时,我们遇到第二个问题:模型不稳定,特别是在早期迭代期间。大多数不稳定性来自于预测盒子的 (x, y) 位置。在区域提议网络中,网络预测值 tx 和 ty,并且 (x, y) 中心坐标计算如下:在这里插入图片描述
例如,预测 tx = 1 会将框向右移动锚框的宽度,预测 tx = -1 会将其向左移动相同的量。

此处请参考《faster RCNN》:

“对于边界框回归,我们采用以下 4 个坐标的参数化[5]:在这里插入图片描述
其中 x、y、w 和 h 表示框的中心坐标及其宽度和高度。变量 x、xa 和 x ∗ 分别代表预测框、锚框和真实框(y、w、h 也同样)。这可以被认为是边界框回归锚框到附近的地面实况框。”

该公式不受约束,因此任何锚框都可以在图像中的任何点结束,无论预测该框的位置如何。通过随机初始化,模型需要很长时间才能稳定以预测合理的偏移量。

我们没有预测偏移量,而是遵循 YOLO 的方法并预测相对于网格单元位置的位置坐标。这将真实值限制在 0 和 1 之间。我们使用逻辑激活来将网络的预测限制在这个范围内。

网络在输出特征图中的每个单元预测 5 个边界框。网络为每个边界框预测 5 个坐标:tx、ty、tw、th 和 to。如果单元格从图像左上角偏移 (cx, cy) 并且先验边界框的宽度和高度为 pw, ph,则预测对应于:在这里插入图片描述
在这里插入图片描述

由于我们限制了位置预测,因此参数化更容易学习,从而使网络更加稳定。使用维度聚类并直接预测边界框中心位置,与使用锚框的版本相比,YOLO 提高了近 5%。

细粒度特征。

这种修改后的 YOLO 可预测 13 × 13 特征图上的检测。虽然这对于大型对象来说已经足够了,但它可能会受益于更细粒度的特征来定位较小的对象。 Faster R-CNN 和 SSD 都在网络中的各种特征图上运行其提案网络以获得一系列分辨率。我们采用不同的方法,只需添加一个直通层,以 26 × 26 分辨率引入早期层的特征。

直通层通过将相邻特征堆叠到不同的通道而不是空间位置,将高分辨率特征与低分辨率特征连接起来,类似于 ResNet 中的恒等映射。这将 26 × 26 × 512 特征图变成了 13 × 13 × 2048特征图,可以与原始特征连接。我们的检测器运行在这个扩展的特征图之上,以便它可以访问细粒度的特征。这带来了 1% 的适度性能提升。

多尺度培训。

原始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、高帧率视频或多视频流。

3. Faster

我们希望检测准确,但我们也希望它快速。大多数检测应用(例如机器人或自动驾驶汽车)都依赖于低延迟预测。为了最大限度地提高性能,我们从头开始将 YOLOv2 设计得很快。

大多数检测框架依赖 VGG-16 作为基本特征提取器 [17]。 VGG-16 是一个强大、准确的分类网络,但它过于复杂。 VGG-16 的卷积层需要 306.9 亿次浮点运算才能以 224 × 224 分辨率处理单个图像。

YOLO框架使用基于Googlenet架构的自定义网络[19]。该网络比 VGG-16 更快,前向传递仅使用 85.2 亿次操作。但其准确率比VGG16稍差。对于 224 × 224 下的单裁剪、top-5 准确率,YOLO 的自定义模型在 ImageNet 上的准确率达到 88.0%,而 VGG-16 的准确率为 90.0%。

Darknet-19。

我们提出了一种新的分类模型作为 YOLOv2 的基础。我们的模型建立在网络设计的先前工作以及该领域的常识的基础上。与 VGG 模型类似,我们主要使用 3 × 3 滤波器,并在每个池化步骤后将通道数量加倍 [17]。继 Network in Network (NIN) 的工作之后,我们使用全局平均池化进行预测,并使用 1 × 1 滤波器来压缩 3 × 3 卷积之间的特征表示 [9]。我们使用批量归一化来稳定训练,加速收敛,并对模型进行正则化[7]。

我们的最终模型称为 Darknet-19,具有 19 个卷积层和 5 个最大池层。完整描述请参见表 6。Darknet-19 仅需要 55.8 亿次运算来处理图像,却在 ImageNet 上实现了 72.9% 的 top-1 准确率和 91.2% 的 top-5 准确率。
在这里插入图片描述

分类训练。

我们使用 Darknet 神经网络框架,在标准 ImageNet 1000 类分类数据集上训练网络 160 个时期,使用随机梯度下降,起始学习率为 0.1,多项式速率衰减为 4 次方,权重衰减为 0.0005,动量为 0.9 [13]。在训练过程中,我们使用标准的数据增强技巧,包括随机裁剪、旋转以及色调、饱和度和曝光变化。

如上所述,在对 224 × 224 的图像进行初始训练后,我们以更大的尺寸 448 微调我们的网络。对于这种微调,我们使用上述参数进行训练,但仅训练 10 个时期,并以 10−3 的学习率开始。在这种更高分辨率下,我们的网络实现了 76.5% 的 top-1 准确率和 93.3% 的 top-5 准确率。

检测训练。

我们通过删除最后一个卷积层来修改此网络以进行检测,并添加三个带有 1024 个滤波器的 3 × 3 卷积层,每个卷积层后面跟着一个最终的 1 × 1 卷积层,其中包含我们检测所需的输出数量。对于 VOC,我们预测 5 个框,每个框有 5 个坐标,每个框有 20 个类别,因此有 125 个过滤器。我们还从最后的 3 × 3 × 512 层到倒数第二个卷积层添加了一个直通层,以便我们的模型可以使用细粒度特征。

我们将网络训练了 160 个时期,起始学习率为 10−3 ,在 60 和 90 个时期除以 10。我们使用 0.0005 的权重衰减和 0.9 的动量。我们使用与 YOLO 和 SSD 类似的数据增强,包括随机裁剪、颜色偏移等。我们在 COCO 和 VOC 上使用相同的训练策略。

4. Stronger

我们提出了一种对分类和检测数据进行联合训练的机制。我们的方法使用标记为检测的图像来学习特定于检测的信息,例如边界框坐标预测和对象性以及如何对常见对象进行分类。它使用仅具有类标签的图像来扩展它可以检测的类别数量。

在训练期间,我们混合来自检测和分类数据集的图像。当我们的网络看到标记为检测的图像时,我们可以基于完整的 YOLOv2 损失函数进行反向传播。当它看到分类图像时,我们仅从架构的分类特定部分反向传播损失。

这种方法提出了一些挑战。检测数据集只有常见的对象和通用标签,例如“狗”或“船”。分类数据集具有更广泛、更深层次的标签。 ImageNet 拥有一百多个品种的狗,包括“诺福克梗”、“约克夏梗”和“贝灵顿梗”。如果我们想在两个数据集上进行训练,我们需要一种连贯的方法来合并这些标签。

大多数分类方法都使用跨所有可能类别的 softmax 层来计算最终的概率分布。使用 softmax 假设类别是互斥的。这带来了组合数据集的问题,例如,您不希望使用此模型组合 ImageNet 和 COCO,因为这些类“诺福克梗”和“狗”并不相互排斥。

我们可以使用多标签模型来组合不假设互斥的数据集。这种方法忽略了我们所知道的有关数据的所有结构,例如所有 COCO 类都是互斥的。

层次分类。

ImageNet 标签取自 WordNet,这是一个构建概念及其关联方式的语言数据库 [12]。在WordNet中,“诺福克梗”和“约克夏梗”都是“梗”的下位词,“梗”是“猎犬”的一种,“狗”的一种,“犬”的一种,等等。分类假设标签采用扁平结构,但是对于组合数据集,结构正是我们所需要的。

WordNet 的结构是有向图,而不是树,因为语言很复杂。例如,“狗”既是“犬科动物”的一种,又是“家养动物”的一种,它们都是 WordNet 中的同义词集。我们没有使用完整的图结构,而是通过根据 ImageNet 中的概念构建层次树来简化问题。

为了构建这棵树,我们检查 ImageNet 中的视觉名词,并查看它们通过 WordNet 图到根节点(在本例中为“物理对象”)的路径。许多同义词集在图中只有一条路径,因此我们首先将所有这些路径添加到我们的树中。然后,我们迭代地检查我们留下的概念,并添加尽可能少地生长树的路径。因此,如果一个概念有两条到根的路径,其中一条路径会向我们的树添加三个边,而另一条路径只会添加一条边,那么我们会选择较短的路径。

最终的结果是WordTree,一个视觉概念的层次模型。为了使用 WordTree 进行分类,我们在给定同义词集的情况下,预测该同义词集的每个下义词概率在每个节点的条件概率。例如,在“terrier”节点我们预测:在这里插入图片描述
如果我们想计算特定节点的绝对概率,我们只需沿着树到根节点的路径并乘以条件概率即可。因此,如果我们想知道一张图片是否是诺福克梗,我们可以计算:在这里插入图片描述
出于分类目的,我们假设图像包含一个对象:P r(物理对象) = 1。

为了验证这种方法,我们在使用 1000 类 ImageNet 构建的 WordTree 上训练 Darknet-19 模型。为了构建 WordTree1k,我们添加了所有中间节点,将标签空间从 1000 扩展到 1369。在训练期间,我们将真实标签传播到树上,这样,如果图像被标记为“诺福克梗犬”,它也会被标记为“诺福克梗犬”。 “狗”和“哺乳动物”等。为了计算条件概率,我们的模型预测了 1369 个值的向量,并计算了同一概念的下位词的所有 sysnset 上的 softmax,请参见图 5。在这里插入图片描述
使用与之前相同的训练参数,我们的分层 Darknet-19 实现了 71.9% 的 top-1 准确率和 90.4% 的 top-5 准确率。尽管添加了 369 个额外概念并让我们的网络预测树结构,但我们的准确性仅略有下降。以这种方式执行分类也有一些好处。对于新的或未知的对象类别,性能会适度下降。例如,如果网络看到一只狗的图片,但不确定它是什么类型的狗,它仍然会以高置信度预测“狗”,但在下位词中分布的置信度较低。

该配方也适用于检测。现在,我们不再假设每个图像都有一个对象,而是使用 YOLOv2 的对象预测器来给出 P r(物理对象)的值。检测器预测边界框和概率树。我们向下遍历树,在每次分割时采用最高置信路径,直到达到某个阈值并预测该对象类别。

数据集与WordTree的组合。

我们可以使用 WordTree 以合理的方式将多个数据集组合在一起。我们只需将数据集中的类别映射到树中的同义词集。图 6 显示了使用 WordTree 组合来自 ImageNet 和 COCO 的标签的示例。WordNet 极其多样化,因此我们可以在大多数数据集上使用这种技术。
在这里插入图片描述
在这里插入图片描述

联合分类和检测。

现在我们可以使用 WordTree 组合数据集,我们可以训练我们的分类和检测联合模型。我们想要训练一个超大规模的检测器,因此我们使用 COCO 检测数据集和完整 ImageNet 版本中的前 9000 个类别创建组合数据集。我们还需要评估我们的方法,以便添加 ImageNet 检测挑战中尚未包含的任何类。该数据集对应的 WordTree 有 9418 个类。 ImageNet 是一个更大的数据集,因此我们通过对 COCO 进行过采样来平衡数据集,这样 ImageNet 只会大 4:1 倍。

我们在 ImageNet 检测任务上评估 YOLO9000。ImageNet 的检测任务与 COCO 共享 44 个对象类别,这意味着 YOLO9000 只能看到大多数测试类别的分类数据。 YOLO9000 总体获得 19.7 mAP,在不相交的 156 个对象类上获得 16.0 mAP,而这些对象类从未见过任何标记的检测数据。该 mAP 高于 DPM 取得的结果,但 YOLO9000 是在仅部分监督的不同数据集上进行训练的 [4]。它还同时实时检测 9000 个其他类别。

YOLO9000 可以很好地学习新的动物物种,但在学习服装和设备等类别方面却遇到了困难。新动物更容易学习,因为客观性预测很好地概括了 COCO 中的动物。相反,COCO 没有针对任何类型服装的边界框标签,仅针对人,因此 YOLO9000 很难对“太阳镜”或“泳裤”等类别进行建模。

5. Conclusion

YOLO9000是一个实时框架,通过联合优化检测和分类来检测超过9000个对象类别。我们使用 WordTree 来组合来自不同来源的数据,并使用联合优化技术在 ImageNet 和 COCO 上同时进行训练。 YOLO9000 是缩小检测和分类之间数据集大小差距的重要一步。

我们的许多技术都适用于对象检测之外。我们的 ImageNet WordTree 表示为图像分类提供了更丰富、更详细的输出空间。使用分层分类的数据集组合在分类和分割领域将很有用。多尺度训练等训练技术可以为各种视觉任务带来好处。

对于未来的工作,我们希望使用类似的技术进行弱监督图像分割。我们还计划使用更强大的匹配策略来改进我们的检测结果,以便在训练期间为分类数据分配弱标签。计算机视觉拥有大量的标记数据。我们将继续寻找将不同来源和结构的数据整合在一起的方法,以建立更强大的视觉世界模型。

《YOLOv3: An Incremental Improvement》2018

摘要

我们推出了 YOLO 的一些更新!我们做了一些小的设计更改以使其变得更好。我们还训练了这个相当强大的新网络。它比上次大一点,但更准确。不过速度还是很快的,不用担心。在 320 × 320 分辨率下,YOLOv3 的运行时间为 22 毫秒,mAP 为 28.2,与 SSD 一样准确,但速度快三倍。当我们查看旧的 0.5 IOU mAP 检测指标时,YOLOv3 相当不错。它在 Titan X 上用时 51 毫秒实现了 57:9 AP50,而 RetinaNet 在 198 毫秒内实现了 57:5 AP50,性能相似,但速度快了 3.8 倍。与往常一样,所有代码都在线位于 https://pjreddie.com/yolo/。

1. Introduction

2. The Deal

YOLOv3 的处理方式是这样的:我们主要从其他人那里获取好的想法。我们还训练了一个比其他网络更好的新分类器网络。我们将带您从头开始了解整个系统,以便您能够理解这一切。在这里插入图片描述

2.1. Bounding Box Prediction

遵循 YOLO9000,我们的系统使用维度簇作为锚框来预测边界框 [15]。网络为每个边界框预测 4 个坐标:tx、ty、tw、th。如果单元格从图像左上角偏移 (cx; cy) 并且先验边界框的宽度和高度为 pw、ph,则预测对应于:在这里插入图片描述
在训练过程中,我们使用误差平方和损失。如果某些坐标预测的地面实况是 t^ * 我们的梯度是地面实况值(从地面实况框计算)减去我们的预测: t^ * − t* 。通过对上面的方程求逆可以很容易地计算出这个真实值。

YOLOv3 使用逻辑回归预测每个边界框的客观性得分。如果先验边界框与地面实况对象的重叠程度超过任何其他先验边界框,则该值应该为 1。如果先验边界框不是最好的,但确实与地面实况对象重叠超过某个阈值,我们将忽略预测,如下[Faster RCNN]。我们使用阈值0.5。与[Faster RCNN]不同,我们的系统只为每个地面实况对象分配一个先验边界框。如果先验边界框未分配给地面实况对象,则不会导致坐标或类预测损失,只会导致对象性损失。
在这里插入图片描述

2.2. Class Prediction

每个框使用多标签分类来预测边界框可能包含的类。我们不使用 softmax,因为我们发现它对于良好的性能来说是不必要的,而是简单地使用独立的逻辑分类器。在训练过程中,我们使用二元交叉熵损失进行类预测。

当我们转向更复杂的领域(例如开放图像数据集 [7])时,这个公式会有所帮助。在此数据集中,有许多重叠的标签(即“女人”和“人”)。使用 softmax 会假设每个框都只有一个类,但情况通常并非如此。多标签方法可以更好地对数据进行建模。

2.3. Predictions Across Scales

YOLOv3 预测 3 个不同尺度的框。我们的系统使用与特征金字塔网络类似的概念从这些尺度中提取特征[8]。从我们的基本特征提取器中,我们添加了几个卷积层。最后一个预测 3-d 张量编码边界框、对象性和类预测。在我们使用 COCO [10] 的实验中,我们在每个尺度上预测 3 个框,因此对于 4 个边界框偏移、1 个对象预测和 80 个类别预测,张量为 N × N × [3 ∗ (4 + 1 + 80)]。

接下来,我们从前 2 层获取特征图,并将其上采样 2 倍。我们还从网络的早期获取特征图,并使用串联将其与我们的上采样特征合并。这种方法使我们能够从上采样的特征中获得更有意义的语义信息,并从早期的特征图中获得更细粒度的信息。然后,我们添加更多的卷积层来处理这个组合特征图,并最终预测一个类似的张量,尽管现在大小是原来的两倍。

我们再次执行相同的设计来预测最终规模的框。因此,我们对第三个尺度的预测受益于所有先前的计算以及网络早期的细粒度特征。

我们仍然使用 k 均值聚类来确定边界框先验。我们只是任意选择 9 个簇和 3 个尺度,然后在尺度上均匀地划分簇。在COCO数据集上,9个簇分别为:(10×13);(16×30);(33×23);(30×61);(62×45);(59×119);(116×90) ;(156×198);(373×326)。

2.4. Feature Extractor

我们使用新的网络来执行特征提取。我们的新网络是 YOLOv2、Darknet-19 中使用的网络和新奇的残差网络之间的混合方法。我们的网络使用连续的 3 × 3 和 1 × 1 卷积层,但现在也有一些快捷连接,并且尺寸明显更大。它有 53 个卷积层,所以我们称之为……等等……Darknet-53!
在这里插入图片描述
这个新网络比 Darknet19 更强大,但仍然比 ResNet-101 或 ResNet-152 更高效。以下是一些 ImageNet 结果:
在这里插入图片描述
每个网络都使用相同的设置进行训练,并在 256×256、单裁剪精度下进行测试。运行时间是在 Titan X 上以 256 × 256 的分辨率测量的。因此,Darknet-53 的性能与最先进的分类器相当,但浮点运算更少,速度更快。 Darknet-53 比 ResNet-101 更好,速度快 1.5 倍。 Darknet-53 与 ResNet-152 具有相似的性能,并且速度快 2 倍。

Darknet-53 还实现了每秒测量的最高浮点运算。这意味着网络结构可以更好地利用 GPU,使其评估效率更高,从而速度更快。这主要是因为 ResNet 的层数太多,而且效率不高。

2.5. Training

我们仍然在完整图像上进行训练,没有硬负片挖掘或任何类似的东西。我们使用多尺度训练、大量数据增强、批量归一化以及所有标准的东西。我们使用 Darknet 神经网络框架进行训练和测试 [14]。

3. How We Do

YOLOv3 相当不错!请参阅表 3。就 COCO 奇怪的平均 AP 指标而言,它与 SSD 变体相当,但速度快 3 倍。但在这个指标上,它仍然落后于 RetinaNet 等其他模型。
在这里插入图片描述

然而,当我们查看 IOU= 0.5(或图表中的 AP50)的 mAP 的“旧”检测指标时,YOLOv3 非常强大。它几乎与 RetinaNet 相当,并且远高于 SSD 变体。这表明 YOLOv3 是一个非常强大的检测器,擅长为物体生成像样的盒子。然而,随着 IOU 阈值的增加,性能显着下降,这表明 YOLOv3 很难让框与对象完美对齐。

过去,YOLO 在处理小物体时遇到了困难。然而,现在我们看到这种趋势发生了逆转。通过新的多尺度预测,我们看到 YOLOv3 具有相对较高的 APS 性能。然而,它在中等和较大尺寸物体上的性能相对较差。 需要更多调查才能查明真相。

当我们在 AP50 指标上绘制准确度与速度的关系时(见图 5(3)),我们发现 YOLOv3 比其他检测系统具有显着优势。也就是说,它更快更好。
在这里插入图片描述

4. Things We Tried That Didn’t Work

在开发 YOLOv3 时,我们尝试了很多东西。很多都没有效果。这是我们能记住的东西。

锚框x, y 偏移预测。

我们尝试使用普通的锚框预测机制,您可以使用线性激活将 x,y 偏移量预测为框宽度或高度的倍数。我们发现这种公式降低了模型的稳定性并且效果不佳。

线性 x,y 预测而不是逻辑。

我们尝试使用线性激活来直接预测 x,y 偏移量而不是逻辑激活。这导致 mAP 下降了几个点。

焦点损失。

我们尝试使用焦点损失。它使我们的 mAP 下降了约 2 点。 YOLOv3 可能已经对焦点损失试图解决的问题具有鲁棒性,因为它具有单独的对象预测和条件类预测。因此,对于大多数例子来说,类别预测没有损失?或者其他的东西?我们并不完全确定。

双 IOU 阈值和真值分配。

Faster RCNN 在训练期间使用两个 IOU 阈值。如果预测与真实值重叠 0.7,则为正例;如果预测与真实值重叠 [.3−.7],则被忽略;对于所有真实值对象,小于 0.3 的预测为负例。我们尝试了类似的策略,但没有得到好的结果。

我们非常喜欢我们当前的表述,它似乎至少处于局部最优。其中一些技术可能最终会产生良好的结果,也许它们只需要一些调整来稳定训练。

5. What This All Means

YOLOv3 是一个很好的检测器。它很快,而且很准确。在 0.5 到 0.95 IOU 指标之间的 COCO 平均 AP 上,它并不那么好。但它在 0.5 IOU 的旧检测指标上非常好。

为什么我们要改变指标?最初的 COCO 论文只有这样一句话:“一旦评估服务器完成,将添加对评估指标的全面讨论”。 Russakovsky 等人报告称,人类很难区分 0.3 和 0.5 的 IOU!“训练人类目视检查边界框IOU 为 0.3 并将其与 IOU 0.5 区分开来是非常困难的。” [18] 如果人类很难区分两者之间的差异,那么这有什么关系呢?

但也许更好的问题是:“既然我们有了这些探测器,我们该如何处理它们呢?”很多做这项研究的人都在谷歌和 Facebook。

我想至少我们知道这项技术掌握在良好的手中,并且绝对不会被用来收集您的个人信息并将其出售给……等等,您是说这正是它的用途?哦。

好吧,其他大量资助视觉研究的人是军队,他们从来没有做过任何可怕的事情,比如用新技术杀死很多人哦等等…1

我非常希望大多数使用计算机视觉的人只是用它来做快乐、好事,比如计算国家公园中斑马的数量 [13],或者跟踪他们的猫在他们的房子里徘徊 [19] ]。但计算机视觉的使用已经受到质疑,作为研究人员,我们有责任至少考虑我们的工作可能造成的危害,并想出减轻危害的方法。我们欠世界太多。

最后,不要@我。 (因为我终于退出了Twitter)。

《YOLOv4: Optimal Speed and Accuracy of Object Detection》2020

Abstract

据说有大量功能可以提高卷积神经网络(CNN)的准确性。需要在大型数据集上对这些功能的组合进行实际测试,并对结果进行理论论证。某些功能专门针对某些模型和某些问题进行操作,或者仅针对小规模数据集;而某些功能,例如批量归一化和残差连接,适用于大多数模型、任务和数据集。我们假设此类通用特征包括加权残差连接(WRC)、跨阶段部分连接(CSP)、跨小批量归一化(CmBN)、自对抗训练(SAT)和 Mish 激活。我们使用新功能:WRC、CSP、CmBN、SAT、Mish 激活、Mosaic 数据增强、CmBN、DropBlock 正则化和 CIoU 损失,并将其中一些功能结合起来以实现最先进的结果:43.5% AP(65.7) % AP50),用于 MS COCO 数据集,在 Tesla V100 上实时速度为 ∼65 FPS。源代码位于 https://github.com/AlexeyAB/darknet。

1. Introduction

大多数基于CNN的对象检测器很大程度上仅适用于推荐系统。例如,通过城市摄像机搜索空闲停车位是由慢速精确模型执行的,而汽车碰撞预警则与快速不精确模型相关。提高实时对象检测器的准确性使得它们不仅可以用于提示生成推荐系统,还可以用于独立的流程管理和减少人工输入。传统图形处理单元(GPU)上的实时对象检测器操作允许它们以可承受的价格大量使用。最精确的现代神经网络不能实时运行,并且需要大量的GPU进行大批量的训练。我们通过创建一个在传统GPU上实时运行的CNN来解决这些问题,并且训练只需要一个传统GPU。

这项工作的主要目标是在生产系统中设计快速运行的对象检测器并优化并行计算,而不是低计算量理论指标(BFLOP)。我们希望设计的对象可以很容易地训练和使用。例如,任何使用常规GPU进行训练和测试的人都可以实现实时、高质量和令人信服的对象检测结果,如图1所示的YOLOv4结果。我们的贡献总结如下:在这里插入图片描述
1.我们开发了一个高效且强大的物体检测模型。它使得每个人都可以使用 1080 Ti 或 2080 Ti GPU 来训练超快速且准确的物体检测器。

  1. 我们在检测器训练期间验证了最先进的 Bag-of-Freebies(免费物品包) 和 Bag-of-Specials(特价物品包) 对目标检测方法的影响。

3.我们修改了最先进的方法,使它们更加有效并且适合单GPU训练,包括CBN [89],PAN [49],SAM [85]等。

2. Related work

2.1. Object detection models

现代检测器通常由两部分组成:在 ImageNet 上预先训练的主干和用于预测对象的类别和边界框的头部。对于那些在 GPU 平台上运行的检测器,它们的主干可以是 VGG [68]、ResNet [26]、ResNeXt [86] 或 DenseNet [30]。对于那些在 CPU 平台上运行的检测器,它们的主干可以是 SqueezeNet [31]、MobileNet [28, 66, 27, 74] 或 ShuffleNet [97, 53]。对于头部,通常分为两种,即一级物体检测器和两级物体检测器。最具代表性的两阶段目标检测器是R-CNN [19]系列,包括faster R-CNN [18]、faster R-CNN [64]、R-FCN [9]和Libra R-CNN [58] 。也可以使两级目标检测器成为无锚目标检测器,例如 RepPoints [87]。对于一级目标检测器,最有代表性的模型是 YOLO [61,62,63]、SSD [50] 和 RetinaNet [45]。近年来,开发了无锚的一级物体检测器。这类检测器有CenterNet [13]、CornerNet [37, 38]、FCOS [78]等。近年来发展的目标检测器经常在backbone和head之间插入一些层,这些层通常用于收集特征图来自不同阶段。我们可以将其称为物体探测器的颈部。通常,颈部由多个自下而上的路径和多个自上而下的路径组成。配备这种机制的网络包括特征金字塔网络(FPN)[44]、路径聚合网络(PAN)[49]、BiFPN[77]和NAS-FPN[17]。
在这里插入图片描述

除了上述模型之外,一些研究人员将重点放在直接构建新的主干网(DetNet [43],DetNAS [7])或新的整个模型(SpineNet [12],HitDetector [20])用于对象检测。

综上所述,一个普通的物体检测器由几个部分组成:在这里插入图片描述

2.2. Bag of freebies

通常,传统的物体检测器是离线训练的。因此,研究人员总是喜欢利用这一优势,开发更好的训练方法,使物体检测器在不增加推理成本的情况下获得更好的精度。我们将这些仅改变训练策略或仅增加训练成本的方法称为“免费赠品袋”。对象检测方法经常采用并满足赠品包定义的方法是数据增强。数据增强的目的是增加输入图像的可变性,使得设计的目标检测模型对从不同环境获得的图像具有更高的鲁棒性。例如,光度畸变和几何畸变是两种常用的数据增强方法,它们肯定有利于目标检测任务。在处理光度失真时,我们调整图像的亮度、对比度、色调、饱和度和噪声。对于几何变形,我们添加随机缩放、裁剪、翻转和旋转。

上面提到的数据增强方法都是逐像素调整,调整区域的所有原始像素信息都被保留。此外,一些从事数据增强的研究人员将重点放在模拟对象遮挡问题上。他们在图像分类和目标检测方面取得了良好的成果。例如,随机擦除[100]和剪切[11]可以随机选择图像中的矩形区域并填充随机值或补值零。至于捉迷藏[69]和网格掩模[6],它们随机或均匀地选择图像中的多个矩形区域并将它们替换为全零。如果类似的概念应用于特征图,则有 DropOut [71]、DropConnect [80] 和 DropBlock [16] 方法。此外,一些研究人员提出了使用多个图像一起进行数据增强的方法。例如,MixUp [92]使用两个图像以不同的系数比例相乘和叠加,然后用这些叠加的比例调整标签。至于CutMix[91],它将裁剪后的图像覆盖到其他图像的矩形区域,并根据混合区域的大小调整标签。除了上述方法之外,风格迁移 GAN [15]也用于数据增强,这种使用可以有效减少 CNN 学习到的纹理偏差。

与上面提出的各种方法不同,其他一些 bag of freebies 方法致力于解决数据集中的语义分布可能存在偏差的问题。在处理语义分布偏差问题时,一个非常重要的问题是不同类之间存在数据不平衡的问题,而在两级物体探测器中这个问题往往通过硬难例挖掘[72]或在线难例挖掘[67]来解决。但示例挖掘方法不适用单级物体检测器,因为这种检测器属于密集预测架构。因此Lin等人[45]提出了focal loss来处理各类之间存在的数据不平衡问题。另一个非常重要的问题是,很难用one-hot硬表示来表达不同类别之间的关联程度的关系。在执行标记时经常使用这种表示方案。

[Rethinking the inception architecture for computer vision]中提出的标签平滑是将硬标签转换为软标签进行训练,这可以使模型更加鲁棒。为了获得更好的软标签,Islam等人[Label refinement network for coarse-to-fine semantic segmentation]引入了知识蒸馏的概念来设计标签细化网络。

最后一袋免费赠品是边界框(BBox)回归的目标函数。传统的物体检测器通常使用均方误差(MSE)直接对BBox的中心点坐标和高宽进行回归,即{xcenter、ycenter、w、h}或左上点和右下点,即,{x 左上、y 左上、x 右下、y 右下}。对于anchor-based方法,就是估计相应的偏移量,例如{xcenter_offset, ycenter_off set, woffset, hoffset} 和 {xtop_left_offset, ytop_left_offset, xbottom_right_offset,ybottom_right_offset}。然而,直接估计BBox各点的坐标值,是将这些点视为自变量,而实际上并没有考虑物体本身的完整性。为了更好地处理这个问题,一些研究人员最近提出了 IoU 损失[90],其中考虑了预测 BBox 区域和真实 BBox 区域的覆盖范围。 IoU损失计算过程将通过与groundtruth执行IoU来触发BBox的四个坐标点的计算,然后将生成的结果连接成整个代码。由于IoU是尺度不变的表示,它可以解决传统方法计算{x、y、w、h}的l1或l2损失时,损失会随着尺度而增大的问题。最近,一些研究人员不断改进 IoU 损失。例如,GIoU损失[65]除了覆盖区域之外还包括物体的形状和方向。他们提出寻找能够同时覆盖预测BBox和groundtruth BBox的最小面积BBox,并用这个BBox作为分母来代替原来在IoU损失中使用的分母。至于DIoU损失[99],它另外考虑了物体中心的距离,而CIoU损失[99]则同时考虑了重叠区域、中心点之间的距离和纵横比。 CIoU可以在BBox回归问题上取得更好的收敛速度和精度。

2.3. Bag of specials

对于那些只增加少量推理成本但可以显着提高目标检测准确性的插件模块和后处理方法,我们将其称为“bag of specials”。一般来说,这些插件模块是为了增强模型中的某些属性,比如扩大感受野、引入注意力机制、或者加强特征整合能力等,而后处理是一种筛选模型预测结果的方法。

可用于增强感受野的常见模块有 SPP [25]、ASPP [5] 和 RFB [47]。 SPP模块起源于空间金字塔匹配(SPM)[39],SPM最初的方法是将特征图分割成几个d×d相等的块,其中d可以是{1, 2,3,···},从而形成空间金字塔,然后提取词袋特征。 SPP 将 SPM 集成到 CNN 中,并使用 max-pooling 操作代替 bag-of-word 操作。由于He等人[25]提出的SPP模块将输出一维特征向量,因此在全卷积网络(FCN)中应用是不可行的。因此,在 *YOLOv3 [63] 的设计中,Redmon 和 Farhadi 将 SPP 模块改进为最大池化输出与内核大小 k × k 的串联,其中 k = {1,5,9,13},stride等于1。*在这种设计下,相对较大的k×k maxpooling有效地增加了骨干特征的感受野。添加改进版本的SPP模块后,YOLOv3-608在MS COCO目标检测任务上以0.5%的额外计算量为代价将AP50提升了2.7%。ASPP[5]模块与改进的SPP模块在操作上的差异主要是从原来的k×k内核大小、步幅等于1的最大池化到几个3×3内核大小、膨胀比等于k、在扩张卷积运算中步幅等于 1。RFB模块是利用多个k×k核的扩张卷积,扩张比等于k,步长等于1,以获得比ASPP更全面的空间覆盖。 RFB [47]仅花费 7% 的额外推理时间即可将 MS COCO 上 SSD 的 AP50 提高 5.7%。

物体检测中经常使用的注意力模块主要分为通道注意力和点注意力,这两种注意力模型的代表是挤压和激励(SE)[29]和空间注意力模块(SAM)[ 85],分别。虽然SE模块可以将ResNet50在ImageNet图像分类任务中的能力提高1% top-1精度,而代价只是增加2%的计算量,但在GPU上通常会增加10%左右的推理时间,所以更适合用在移动设备上。但对于SAM来说,只需要付出0.1%的额外计算,就可以在ImageNet图像分类任务上将ResNet50-SE提高0.5%的top-1精度。最重要的是,它根本不会影响 GPU 的推理速度。

在特征集成方面,早期的实践是使用跳跃连​​接[51]或超列[22]将低级物理特征集成到高级语义特征。随着FPN等多尺度预测方法的流行,人们提出了许多集成不同特征金字塔的轻量级模块。此类模块包括 SFAM [98]、ASFF [48] 和 BiFPN [77]。 SFAM的主要思想是使用SE模块对多尺度级联特征图执行通道级别重新加权。至于ASFF,它使用softmax作为逐点级别重新加权,然后添加不同尺度的特征图。在BiFPN中,提出了多输入加权残差连接来执行尺度级重新加权,然后添加不同尺度的特征图。

在深度学习的研究中,一些人把重点放在寻找好的激活函数上。一个好的激活函数可以让梯度更高效地传播,同时不会造成太多额外的计算成本。 2010年,Nair和Hinton[56]提出ReLU来基本上解决传统tanh和sigmoid激活函数中经常遇到的梯度消失问题。随后,LReLU [54]、PReLU [24]、ReLU6 [28]、Scaled Exponential Linear Unit (SELU) [35]、Swish [59]、hard-Swish [27] 和 Mish [55] 等,其中也被用来解决梯度消失问题。 LReLU和PReLU的主要目的是解决ReLU在输出小于零时梯度为零的问题。至于ReLU6和hard-Swish,它们是专门为量化网络设计的。为了对神经网络进行自归一化,提出了 SELU 激活函数来满足该目标。需要注意的一点是 Swish 和 Mish 都是连续可微的激活函数。

基于深度学习的目标检测中常用的后处理方法是NMS,它可以用来过滤那些对同一目标预测效果不好的BBox,只保留响应较高的候选BBox。 NMS尝试改进的方式与优化目标函数的方法是一致的。 NMS提出的原始方法没有考虑上下文信息,因此Girshick等人[19]在R-CNN中添加了分类置信度得分作为参考,并根据置信度得分的顺序,贪婪NMS按照从高分到低分的顺序进行。对于软NMS[1],它考虑了具有IoU分数的贪婪NMS中对象的遮挡可能导致置信度分数下降的问题。 DIoU NMS[99]开发者的思路是在软NMS的基础上,将中心点距离的信息添加到BBox筛选过程中。值得一提的是,由于上述后处理方法都没有直接引用捕获的图像特征,因此在后续开发anchor-free方法时不再需要进行后处理。

3. Methodology

基本目标是神经网络在生产系统中的快速运行速度和并行计算的优化,而不是低计算量理论指标(BFLOP)。我们提供两种实时神经网络选项:

• 对于 GPU,我们在卷积层中使用少量组 (1 - 8):CSPResNeXt50 / CSPDarknet53
• 对于 VPU - 我们使用分组卷积,但我们避免使用挤压和激励 (SE) 块 - 具体包括以下模型:EfficientNet-lite / MixNet [76] / GhostNet [21] / MobileNetV3

3.1. Selection of architecture

我们的目标是在输入网络分辨率、卷积层数量、参数数量(滤波器大小² * 滤波器 * 通道/组)和层输出(滤波器)数量之间找到最佳平衡。例如,我们的大量研究表明,在 ILSVRC2012 (ImageNet) 数据集上的对象分类方面,CSPResNext50 比 CSPDarknet53 要好得多 [10]。然而,相反,在 MS COCO 数据集上检测对象方面,CSPDarknet53 比 CSPResNext50 更好[46]。

下一个目标是选择额外的块来增加感受野,以及针对不同检测器级别的不同主干级别的参数聚合的最佳方法:例如FPN、PAN、ASFF、BiFPN。

对于分类而言最佳的参考模型并不总是对于检测器来说是最佳的。与分类器相比,检测器需要以下条件:

• 更高的输入网络尺寸(分辨率) - 用于检测多个小尺寸物体
• 更多层 - 用于更高的感受野以覆盖输入网络尺寸的增加
• 更多参数 - 使模型具有更大的能力来检测单个图像中不同尺寸的多个物体

假设而言,我们可以假设应该选择具有更大感受野尺寸(具有更多数量的卷积层3×3)和更多参数的模型作为主干。表1显示了CSPResNeXt50、CSPDarknet53和EfficientNet B3的信息。 CSPResNext50仅包含16个3×3的卷积层、425×425的感受野和20.6 M的参数,而CSPDarknet53包含29个3×3的卷积层、725×725的感受野和27.6 M的参数。这一理论论证以及我们的大量实验表明,CSPDarknet53 神经网络是两者中作为检测器主干的最佳模型。在这里插入图片描述
不同大小的感受野的影响总结如下:
• 达到对象大小 - 允许查看整个对象
• 达到网络大小 - 允许查看对象周围的上下文
• 超出网络大小——增加图像点与最终激活之间的连接数

我们在 CSPDarknet53 上添加了 SPP 块,因为它显着增加了感受野,分离出最重要的上下文特征,并且几乎不会降低网络运行速度。我们使用 PANet 作为不同检测器级别的不同骨干级别的参数聚合方法,而不是 YOLOv3 中使用的 FPN。

最后,我们选择CSPDarknet53主干、SPP附加模块、PANet路径聚合颈和YOLOv3(基于锚点)头作为YOLOv4的架构。

未来我们计划大幅扩展检测器的 Bag of Freebies (BoF) 内容,理论上可以解决一些问题并提高检测器的精度,并以实验方式依次检查每个特征的影响。

我们不使用跨 GPU 批量归一化(CGBN 或 SyncBN)或昂贵的专用设备。这使得任何人都可以在传统的图形处理器上重现我们最先进的结果,例如GTX 1080Ti 或 RTX 2080Ti。

3.2. Selection of BoF and BoS

为了改进目标检测训练,CNN 通常使用以下内容:
在这里插入图片描述
至于训练激活函数,由于PReLU和SELU训练起来比较困难,而ReLU6是专门为量化网络设计的,因此我们从候选列表中删除了上述激活函数。在再正则化的方法中,发表DropBlock的人将他们的方法与其他方法进行了详细的比较,他们的正则化方法胜出很多。因此,我们毫不犹豫地选择了DropBlock作为我们的正则化方法。至于归一化方法的选择,由于我们专注于仅使用一个GPU的训练策略,因此不考虑syncBN。

3.3. Additional improvements

为了使设计的检测器更适合在单GPU上训练,我们进行了如下额外的设计和改进:

• 我们引入了一种新的数据增强Mosaic方法和自对抗训练(SAT) • 我们在应用遗传算法时选择最佳的超参数
• 我们修改了一些现有方法,使我们的设计适合高效的训练和检测 - 修改的 SAM、修改的 PAN 和交叉小批量归一化 (CmBN)

Mosaic 代表了一种新的数据增强方法,混合了 4 个训练图像。因此混合了 4 个不同的上下文,而 CutMix 仅混合 2 个输入图像。这允许检测正常上下文之外的对象。此外,批量归一化还计算每层 4 个不同图像的激活统计数据。这显着减少了对大批量大小的需求。
在这里插入图片描述
自我对抗训练 (SAT) 还代表了一种新的数据增强技术,可在 2 个前向和后向阶段运行。在第一阶段,神经网络改变原始图像而不是网络权重。通过这种方式,神经网络对自身执行对抗性攻击,改变原始图像以造成图像上没有所需对象的欺骗。在第二阶段,训练神经网络以正常方式检测修改后的图像上的对象。

CmBN 代表 CBN 的修改版本,如图 4 所示,定义为 Cross mini-Batch Normalization (CmBN)。这仅收集单个批次内的小批次之间的统计信息。
在这里插入图片描述
我们将 SAM 从空间关注修改为点关注,并将 PAN 的快捷连接替换为串联,分别如图 5 和图 6 所示。
在这里插入图片描述

3.4. YOLOv4

在本节中,我们将详细阐述 YOLOv4 的细节。
在这里插入图片描述
YOLO v4 使用:
• 用于主干的 Bag of Freebies (BoF):CutMix 和 Mosaic 数据增强、DropBlock 正则化、类标签平滑
• 用于主干的 Bag of Specials (BoS):Mish 激活、跨阶段部分连接 (CSP)、多输入加权残差连接(MiWRC)
• 用于检测器的免费包(BoF):CIoU 损失、CmBN、DropBlock 正则化、马赛克数据增强、自我对抗训练、消除网格敏感性、对单个地面实况使用多个锚点、余弦退火调度程序 [ 52],最优超参数,随机训练形状
• 用于检测器的特殊包 (BoS):Mish 激活、SPP 块、SAM 块、PAN 路径聚合块、DIoU-NMS

4. Experiments

我们测试了不同训练改进技术对 ImageNet (ILSVRC 2012 val) 数据集上分类器准确性的影响,然后测试了 MS COCO (test-dev 2017) 数据集上检测器准确性的影响。

4.1. Experimental setup

ImageNet图像分类实验中,默认超参数如下:训练步数为8,000,000;批量大小和小批量大小分别为 128 和 32;采用多项式衰减学习率调度策略,初始学习率0.1;预热步数为1000;动量和权重衰减分别设置为0.9和0.005。我们所有的 BoS 实验都使用相同的超参数作为默认设置,而在 BoF 实验中,我们额外添加了 50% 的训练步骤。在 BoF 实验中,我们验证了 MixUp、CutMix、Mosaic、Bluring 数据增强和标签平滑正则化方法。在BoS实验中,我们比较了LReLU、Swish和Mish激活函数的效果。所有实验均使用 1080 Ti 或 2080 Ti GPU 进行训练。

在MS COCO目标检测实验中,默认超参数如下:训练步数为500,500;采用步长衰减学习率调度策略,初始学习率为0.01,在40万步和45万步时分别乘以因子0.1;动量和权重衰减分别设置为0.9和0.0005。所有架构都使用单个 GPU 以 64 的批量大小执行多尺度训练,而小批量大小为 8 或 4,具体取决于架构和 GPU 内存限制。除了使用遗传算法进行超参数搜索实验外,其他实验均使用默认设置。遗传算法使用 YOLOv3-SPP 进行 GIoU 损失训练,并搜索 300 个 epoch 的 min-val 5k 集。我们采用搜索学习率 0.00261、动量 0.949、分配真实值的 IoU 阈值 0.213 和损失归一化器 0.07 进行遗传算法实验。我们验证了大量的BoF,包括网格敏感性消除、马赛克数据增强、IoU阈值、遗传算法、类标签平滑、跨小批量归一化、自对抗训练、余弦退火调度器、动态小批量大小、DropBlock、优化锚点,不同类型的 IoU 损失。我们还对各种 BoS 进行了实验,包括 Mish、SPP、SAM、RFB、BiFPN 和 Gaussian YOLO [8]。对于所有实验,我们仅使用一个 GPU 进行训练,因此没有使用诸如syncBN 等优化多个 GPU 的技术。

4.2. Influence of different features on Classifier training

首先,我们研究不同功能对分类器训练的影响;具体来说,类标签平滑的影响、不同数据增强技术的影响、双边模糊、MixUp、CutMix 和 Mosaic,如 Fugure 7 所示,以及不同激活的影响,例如 Leaky-ReLU(默认)、Swish和Mish。
在这里插入图片描述
在我们的实验中,如表 2 所示,通过引入 CutMix 和 Mosaic 数据增强、类标签平滑和 Mish 激活等功能,分类器的准确性得到了提高。因此,我们用于分类器训练的 BoFbackbone(免费赠品袋)包括以下内容:CutMix 和 Mosaic 数据增强以及类标签平滑。此外,我们使用 Mish 激活作为补充选项,如表 2 和表 3 所示。
在这里插入图片描述

4.3. Influence of different features on Detector training

进一步的研究涉及不同的 Bag-of-Freebies(BoF-探测器)对检测器训练精度的影响,如表 4 所示。我们通过研究在不影响 FPS 的情况下提高检测器精度的不同特征来显着扩展 BoF 列表:
在这里插入图片描述
S:消除网格敏感性方程 bx = σ(tx)+ cx; by = σ(ty)+cy,其中cx和cy始终为整数,在YOLOv3中用于评估对象坐标,因此,bx值接近cx或cx + 1值需要极高的tx绝对值。我们通过将 sigmoid 乘以超过 1.0 的因子来解决这个问题,从而消除了无法检测到物体的网格的影响。
在这里插入图片描述
在这里插入图片描述
M:马赛克数据增强 - 在训练期间使用 4 图像马赛克而不是单个图像
IT:IoU 阈值 - 对单个真值使用多个锚点 IoU(真值,锚点)> IoU 阈值
GA:遗传算法 - 使用遗传算法用于在前 10% 时间段的网络训练期间选择最佳超参数
LS:类标签平滑 - 使用类标签平滑进行 sigmoid 激活
CBN:CmBN - 使用交叉小批量归一化来收集整个批次内的统计数据,而不是收集单个小批量内的统计数据
CA:余弦退火调度程序 - 在正弦曲线训练期间改变学习率
DM:动态小批量大小 - 通过使用随机训练形状在小分辨率训练期间自动增加小批量大小
OA:优化锚点 - 使用优化锚点进行 512x512 网络分辨率的训练
GIoU、CIoU、DIoU、MSE - 使用不同的损失算法进行有界框回归

进一步的研究涉及不同的 Bag-of-Specials(BoS-检测器)对检测器训练精度的影响,包括 PAN、RFB、SAM、Gaussian YOLO (G) 和 ASFF,如表 5 所示。在我们的实验中,检测器得到使用 SPP、PAN 和 SAM 时可获得最佳性能。
在这里插入图片描述

4.4.不同主干网和预训练权重对检测器训练的影响

我们进一步研究了不同骨干模型对检测器精度的影响,如表 6 所示。我们注意到,具有最佳分类精度的模型在检测器精度方面并不总是最好的。
在这里插入图片描述

首先,虽然使用不同特征训练的 CSPResNeXt50 模型的分类精度比 CSPDarknet53 模型更高,但 CSPDarknet53 模型在目标检测方面表现出更高的精度。

其次,使用 BoF 和 Mish 进行 CSPResNeXt50 分类器训练提高了其分类精度,但进一步应用这些预训练权重进行检测器训练会降低检测器精度。然而,使用 BoF 和 Mish 进行 CSPDarknet53 分类器训练可以提高分类器和使用该分类器预训练权重的检测器的准确性。最终结果是主干 CSPDarknet53 比 CSPResNeXt50 更适合检测器。

我们观察到,由于各种改进,CSPDarknet53 模型表现出了更大的提高探测器精度的能力。

4.5.不同小批量大小对检测器训练的影响

最后,我们分析了使用不同小批量大小训练的模型获得的结果,结果如表7所示。从表7的结果我们发现,添加BoF和BoS训练策略后,小批量大小对探测器的性能几乎没有影响。这个结果表明,引入BoF和BoS后,不再需要使用昂贵的GPU进行训练。换句话说,任何人都可以仅使用传统的 GPU 来训练优秀的检测器。
在这里插入图片描述

5. Results

与其他最先进的目标检测器获得的结果的比较如图 8 所示。我们的 YOLOv4 位于帕累托最优曲线上,在速度和精度方面都优于最快和最准确的检测器。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于不同的方法使用不同架构的 GPU 进行推理时间验证,因此我们在常用的 Maxwell、Pascal 和 Volta 架构的 GPU 上运行 YOLOv4,并将其与其他最先进的方法进行比较。表8列出了使用Maxwell GPU的帧率比较结果,可以是GTX Titan X(Maxwell)或Tesla M40 GPU。表9列出了使用Pascal GPU的帧率比较结果,可以是Titan X(Pascal)、Titan Xp、GTX 1080 Ti或Tesla P100 GPU。表10列出了使用Volta GPU的帧率比较结果,可以是Titan Volta或Tesla V100 GPU。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. Conclusions

我们提供最先进的检测器,比所有可用的替代检测器更快 (FPS) 和更准确(MS COCO AP50···95 和 AP50)。所描述的检测器可以在具有 8-16 GB-VRAM 的传统 GPU 上进行训练和使用,这使其广泛使用成为可能。单级锚定检测器的最初概念已经证明了其可行性。我们验证了大量的功能,并选择使用其中的一些功能来提高分类器和检测器的准确性。这些功能可以用作未来研究和开发的最佳实践。

YOLOv5

【YOLO系列】YOLOv5超详细解读(源码详解+入门实践+改进)

《YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors》

《YOLOv7:可训练的免费赠品袋为实时物体检测器设置了新的最先进技术》

摘要

实时目标检测是计算机视觉中最重要的研究课题之一。随着有关架构优化和训练优化的新方法不断被开发,我们发现了在处理这些最新的最先进方法时产生的两个研究主题。为了解决这些主题,我们提出了一种可训练的免费赠品袋导向解决方案。我们将灵活高效的训练工具与所提出的架构和复合缩放方法相结合。YOLOv7 在 5 FPS 到 120 FPS 范围内的速度和精度都超过了所有已知的目标检测器,并且在 GPU V100 上 30 FPS 或更高的所有已知实时目标检测器中具有最高的精度 56.8% AP。源代码发布于 https://github.com/WongKinYiu/yolov7。

1.简介

实时目标检测是计算机视觉中非常重要的主题,因为它通常是计算机视觉系统中的必要组成部分。例如,多目标跟踪[90, 91]、自动驾驶[17, 39]、机器人技术[34, 55]、医学图像分析[33, 44]等。执行实时目标检测的计算设备是通常是一些移动CPU或GPU,以及各种神经处理单元(NPU)。例如,Apple神经引擎(Apple)、神经计算棒(Intel)、Jetson AI边缘设备(Nvidia)、边缘TPU(Google)、神经处理引擎(Qualcomm)、AI处理单元(MediaTek)、和AI SoC(Kneron),都是NPU。一些边缘设备专注于加速不同的操作,例如普通卷积、深度卷积或 MLP 操作。在本文中,我们提出的实时物体检测器主要希望它能够同时支持移动GPU和从边缘到云端的GPU设备。

近年来,实时物体检测器仍在针对不同的边缘设备进行开发。例如,MCUNet[46,47]和NanoDet[51]的发展重点是生产低功耗单芯片并提高边缘CPU的推理速度。至于YOLOX[20]和YOLOR[79]等方法,他们专注于提高各种GPU的推理速度。最近,实时目标检测器的发展主要集中在高效架构的设计上。至于可以在CPU上使用的实时目标检测器[51,81,82,86],它们的设计主要基于MobileNet[26,27,63],ShuffleNet[52,89]或GhostNet[24] 。另一种实时目标检测器是为GPU[20,79,94]开发的,它们大多使用ResNet[25]、DarkNet[60]或DLA[85],然后使用CSPNet[77]策略来优化架构。本文提出的方法的发展方向与当前实时目标检测器的发展方向不同。除了架构优化之外,我们提出的方法还将重点关注训练过程的优化。我们的重点将是一些优化的模块和优化方法,这些模块和优化方法可以加强训练成本以提高目标检测的准确性,但不会增加推理成本。我们将这些模块和优化方法称为可训练的免费赠品袋。

最近,模型重新参数化[11,12,28]和动态标签分配[16,19,40]已成为网络训练和目标检测中的重要主题。主要是在上述新概念提出之后,目标检测器的训练演化出了许多新的问题。在本文中,我们将介绍我们发现的一些新问题,并设计有效的方法来解决这些问题。对于模型重参数化,我们利用梯度传播路径的概念分析了适用于不同网络层的模型重参数化策略,并提出了有计划的重参数化模型。此外,当我们发现使用动态标签分配技术时,具有多个输出层的模型的训练会产生新的问题。即:“如何为不同分支的输出分配动态目标?”针对这个问题,我们提出了一种新的标签分配方法,称为从粗到细引导标签分配。

本文的贡献总结如下:(1)我们设计了几种可训练的bag-of-freebies方法,使得实时目标检测可以在不增加推理成本的情况下大大提高检测精度; (2)对于目标检测方法的演变,我们发现了两个新问题,即重新参数化模块如何替换原始模块,以及动态标签分配策略如何处理对不同输出层的分配。此外,我们还提出了解决这些问题所产生的困难的方法; (3)我们为实时目标检测器提出了“扩展”和“复合缩放”方法,可以有效地利用参数和计算; (4)我们提出的方法可以有效减少最先进的实时目标检测器的大量参数和计算量,并且具有更快的推理速度和更高的检测精度。

2.相关工作

2.1 实时目标探测器

目前最先进的实时目标检测器主要基于 YOLO [58-60] 和 FCOS [73, 74],分别是 [2, 20, 22, 51, 76, 79, 83]。能够成为最先进的实时目标检测器通常需要以下特性:(1)更快更强的网络架构; (2)更有效的特征整合方法[8,21,29,36,43,56,71,94]; (3)更准确的检测方法[66,73,74]; (4)更鲁棒的损失函数[5,53,54,61,92,93]; (5)更高效的标签分配方法[16,19,40,80,96]; (6)更高效的训练方法。在本文中,我们不打算探索需要额外数据或大型模型的自监督学习或知识蒸馏方法。相反,我们将针对与上述(4)、(5)和(6)相关的最先进方法衍生的问题,设计新的可训练的免费赠品袋方法。

2.2 模型重新参数化

模型重新参数化技术[3,9–13,18,23,28,30,32,68,72,75]在推理阶段将多个计算模块合并为一个。模型重参数化技术可以看作是一种集成技术,我们可以将其分为两类,即模块级集成和模型级集成。模型级重新参数化以获得最终的推理模型有两种常见做法。一种是用不同的训练数据训练多个相同的模型,然后对多个训练好的模型的权重进行平均。另一种是对不同迭代次数的模型权重进行加权平均。模块级重参数化是最近比较热门的研究问题。此类方法在训练时将一个模块拆分为多个相同或不同的模块分支,并在推理时将多个分支模块集成为完全等效的模块。然而,并非所有提出的重参数化模块都可以完美地应用于不同的架构。考虑到这一点,我们开发了新的重参数化模块,并针对各种架构设计了相关的应用策略。

2.3.模型缩放

模型缩放 [1, 14, 15, 49, 57, 69–71] 是一种放大或缩小已设计模型并使其适合不同计算设备的方法。模型缩放方法通常使用不同的缩放因子,如分辨率(输入图像的大小)、深度(层数)、宽度(通道数)、阶段(特征金字塔数),从而达到良好的交易效果-off 代表网络参数量、计算量、推理速度和准确性。网络架构搜索(NAS)是常用的模型扩展方法之一。 NAS可以自动从搜索空间中搜索合适的缩放因子,而无需定义过于复杂的规则。 NAS 的缺点是需要非常昂贵的计算才能完成模型缩放因子的搜索。在[14]中,研究人员分析了缩放因子与参数和操作量之间的关系,试图直接估计一些规则,从而获得模型缩放所需的缩放因子。通过查阅文献,我们发现几乎所有模型缩放方法都独立分析单个缩放因子,甚至复合缩放类别中的方法也独立优化缩放因子。其原因是大多数流行的 NAS 架构处理的缩放因子相关性不是很强。我们观察到,所有基于级联的模型,例如 DenseNet [31] 或 VoVNet [38],当这些模型的深度缩放时,都会改变某些层的输入宽度。由于所提出的架构是基于级联的,我们必须为此模型设计一种新的复合缩放方法。

3. 架构

3.1.扩展的高效层聚合网络

在这里插入图片描述

在大多数关于设计高效架构的文献中,主要考虑的只是参数数量、计算量和计算密度。 Ma等人[52]从内存访问成本的特点出发,分析了输入/输出通道比、架构的分支数量以及逐元素操作对网络推理速度的影响。 Dollar´等人[14]在进行模型缩放时还考虑了激活,即更多地考虑卷积层输出张量中的元素数量。图 2 (b) 中 CSPVoVNet [76] 的设计是 VoVNet [38] 的变体。除了考虑上述基本设计问题外,CSPVoVNet [76]的架构还分析了梯度路径,以使不同层的权重能够学习更多样的特征。上述梯度分析方法使推断更快、更准确。图 2 © 中的 ELAN [78] 考虑了以下设计策略——“如何设计高效的网络?”。他们得出了一个结论:通过控制最长最短梯度路径,更深的网络可以有效地学习和收敛。在本文中,我们提出了基于ELAN的扩展ELAN(E-ELAN),其主要架构如图2(d)所示。

无论梯度路径长度和大规模ELAN中计算块的堆叠数量如何,它都达到了稳定状态。如果无限地堆叠更多的计算块,这种稳定状态可能会被破坏,参数利用率就会下降。所提出的E-ELAN利用expand、shuffle、merge基数来实现在不破坏原有梯度路径的情况下不断增强网络的学习能力。在架构方面,E-ELAN仅改变了计算块的架构,而过渡层的架构完全不变。我们的策略是使用组卷积来扩展计算块的通道和基数。我们将对计算层的所有计算块应用相同的组参数和通道乘数。然后,每个计算块计算出的特征图将根据设定的组参数g被洗牌成g组,然后将它们连接在一起。此时,每组特征图中的通道数将与原始架构中的通道数相同。最后,我们添加 g 组特征图来执行合并基数。除了保持原有的ELAN设计架构之外,E-ELAN还可以引导不同组的计算模块学习更多样的特征。

3.2.基于串联的模型的模型缩放

模型缩放的主要目的是调整模型的一些属性,生成不同尺度的模型,以满足不同推理速度的需求。例如,EfficientNet [69] 的缩放模型考虑了宽度、深度和分辨率。至于scaled-YOLOv4[76],其缩放模型是调整阶段数。在[14]中,Dollar´等人分析了vanilla卷积和群卷积在进行宽度和深度缩放时对参数量和计算量的影响,并据此设计了相应的模型缩放方法。上述方法主要应用于PlainNet或ResNet等架构中。当这些架构执行放大或缩小时,每一层的入度和出度都不会改变,因此我们可以独立分析每个缩放因子对参数量和计算量的影响。然而,如果将这些方法应用于基于串联的架构,我们会发现当对深度进行放大或缩小时,紧接在基于串联的计算块之后的翻译层的入度会减小或增加,如图3(a)和(b)所示。

从上述现象可以推断,对于基于级联的模型,我们不能单独分析不同的缩放因子,而必须一起考虑。以深度放大为例,这样的动作会导致过渡层的输入通道和输出通道之间的比例发生变化,这可能会导致模型的硬件使用率下降。因此,我们必须为基于串联的模型提出相应的复合模型缩放方法。当我们缩放计算块的深度因子时,我们还必须计算该块的输出通道的变化。然后,我们对过渡层进行相同变化量的宽度因子缩放,结果如图3©所示。我们提出的复合缩放方法可以保持模型在初始设计时所具有的属性并保持最佳结构。

4.可训练的免费赠品袋

4.1.有计划的重新参数化模型

尽管RepConv[12]在VGG[65]上取得了优异的性能,但当我们直接将其应用于ResNet[25]和DenseNet[31]等非普通架构时,其精度会显着降低。我们使用梯度流传播路径来分析重参数化卷积应如何与不同网络结合。我们还相应地设计了计划重参数化模型。

RepConv 实际上在一个卷积层中结合了 3×3 卷积、1×1 卷积和恒等连接。在分析了RepConv和不同架构的组合和相应性能后,我们发现RepConv中的恒等连接破坏了ResNet中的残差和DenseNet中的级联,这为不同的特征图提供了更多多样性的梯度。基于上述原因,我们使用无恒等连接的RepConv(RepConvN)来设计计划重参数化模型的架构。在我们的想法中,当带有残差或级联的卷积层被重新参数化卷积替换时,不应该有恒等连接。图 4 显示了我们设计的“计划重参数化模型”如何应用于 PlainNet 和 ResNet 的示例。至于完整计划的基于残差模型和基于级联模型的重参数化模型实验,将在消融研究部分中介绍。在这里插入图片描述

4.2.粗用于辅助,细用于引导损失

深度监督[37]是一种用于训练深度网络的技术。其主要思想是在网络的中间层添加额外的辅助头,并以辅助损失为指导的浅层网络权重。即使对于通常收敛良好的 ResNet [25] 和 DenseNet [31] 等架构,深度监督 [45,48,62,64,67,80,84,95] 仍然可以显着提高模型在许多任务上的性能。图 5 (a) 和 (b) 分别显示了“无”和“有”深度监督的对象检测器架构。在本文中,我们将负责最终输出的头称为引导头,而用于辅助训练的头称为辅助头。
在这里插入图片描述

6.结论

在本文中,我们提出了一种新的实时目标检测器架构和相应的模型缩放方法。此外,我们发现目标检测方法的演变过程产生了新的研究主题。在研究过程中,我们发现了重参数化模块的替换问题和动态标签分配的分配问题。为了解决这个问题,我们提出了可训练的免费赠品袋方法来提高目标检测的准确性。基于上述,我们开发了YOLOv7系列目标检测系统,该系统获得了最先进的结果。

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值