YOLOv6: A Single-Stage Object Detection Framework for IndustrialApplications翻译解读

图 1:最先进的高效物体检测器的比较。给出了延迟和吞吐量(批量大小为 32)以供方便参考。除了量化模型使用 TensorRT 8 之外,所有模型均使用 TensorRT 7 进行测试。

摘要

多年来,YOLO 系列实际上已成为高效物体检测的行业级标准。 YOLO社区蓬勃发展,丰富了其在众多硬件平台和丰富场景中的应用。在这份技术报告中,我们力求将其极限推向新的高度,以坚定不移的行业应用心态向前迈进。考虑到真实环境中对速度和准确性的不同要求,我们广泛研究了工业界或学术界的最新目标检测进展。具体来说,我们大量吸收了最近的网络设计、训练策略、测试技术、量化和优化方法的思想。在此基础上,我们整合思想和实践,构建一套不同规模的可部署网络,以适应多样化的用例。在 YOLO 作者的慷慨许可下,我们将其命名为 YOLOv6。我们还热烈欢迎用户和贡献者进一步增强。

为了了解性能,我们的 YOLOv6-N 在 NVIDIA Tesla T4 GPU 上以 1234 FPS 的吞吐量在 COCO 数据集上达到了 35.9% AP。 YOLOv6-S 在 495 FPS 下达到 43.5% AP,优于同规模的其他主流检测器(YOLOv5-S、YOLOX-S 和 PPYOLOE-S)。我们的量化版本 YOLOv6-S 甚至在 869 FPS 下带来了最先进的 43.3% AP。此外,与推理速度相似的其他检测器相比,YOLOv6-M/L 还实现了更好的准确率性能(即 49.5%/52.3%)。我们仔细进行了实验来验证每个组件的有效性。我们的代码可在 https://github.com/meituan/YOLOv6 获取。

1.介绍

YOLO系列因其在速度和准确性之间的出色平衡而成为工业应用中最流行的检测框架。 YOLO系列的开创性工作是YOLOv1-3[32-34],它开辟了单级检测器的新道路,并伴随着后来的实质性改进。 YOLOv4[1]将检测框架重新组织成几个独立的部分(backbone、neck和head),并验证了当时的bag-of-freebies和bag-ofspecials,设计了一个适合在单GPU上训练的框架。目前,YOLOv5 [10]、YOLOX [7]、PPYOLOE [44] 和 YOLOv7 [42] 都是高效检测器部署的竞争候选者。不同尺寸的模型通常通过缩放技术获得。

在本报告中,我们凭经验观察到激励我们重新设计 YOLO 框架的几个重要因素:(1)RepVGG [3] 的重新参数化是一种高级技术,但在检测中尚未得到充分利用。我们还注意到,RepVGG 块的简单模型扩展变得不切实际,为此我们认为小型和大型网络之间的网络设计的优雅一致性是不必要的。普通的单路径架构对于小型网络来说是更好的选择,但对于较大的模型,参数的指数增长和单路径架构的计算成本使其不可行; (2)基于重参数化的检测器的量化也需要细致的处理,否则在训练和推理过程中由于其异构配置而导致性能下降将很难处理。  (3)以前的工作[7,10,42,44]往往不太关注部署,其延迟通常在V100等高成本机器上进行比较。与真实的服务环境相比,硬件上存在差距。通常,Tesla T4 等低功耗 GPU 成本较低,并且提供相当好的推理性能。 (4)考虑到架构差异,标签分配和损失函数设计等高级领域特定策略需要进一步验证; (5)对于部署,我们可以容忍训练策略的调整,提高准确性性能但不增加推理成本,例如知识蒸馏。

考虑到上述观察,我们诞生了 YOLOv6,它在准确性和速度方面实现了迄今为止的最佳权衡。我们在图 1 中展示了 YOLOv6 与类似规模的其他同行的比较。为了提高推理速度而不降低太多性能,我们研究了最先进的量化方法,包括训练后量化(PTQ)和量化感知训练( QAT),并将它们容纳在YOLOv6中以实现部署就绪网络的目标。

我们总结YOLOv6的主要方面如下:

我们重塑了一系列不同规模的网络,为不同场景的工业应用量身定制。

不同规模的架构会有所不同,以实现最佳的速度和准确性权衡,其中小型模型具有普通的单路径主干,而大型模型则构建在高效的多分支块上。

• 我们为YOLOv6 注入了自蒸馏策略,在分类任务和回归任务上都执行。同时,我们动态调整来自教师和标签的知识,以帮助学生模型在所有训练阶段更有效地学习知识。

• 我们广泛验证了标签分配、损失函数和数据增强技术的先进检测技术,并有选择地采用它们以进一步提高性能。

• 我们借助 RepOptimizer [2] 和逐通道蒸馏 [36] 改革了检测量化方案,从而实现了快速且准确的检测器,其 COCO AP 为 43.3%,批量大小的吞吐量为 869 FPS共 32 个。

2.方法

YOLOv6的改进设计由以下组件组成:网络设计、标签分配、损失函数、数据增强、行业方便的改进以及量化和部署:

网络设计:Backbone:与其他主流架构相比,我们发现RepVGG [3]主干在类似的推理速度下在小型网络中配备了更多的特征表示能力,但由于爆炸性增长,它很难扩展以获得更大的模型参数和计算成本。在这方面,我们将 RepBlock [3] 作为我们小型网络的构建块。对于大型模型,我们修改了一个更高效的 CSP [43] 块,名为 CSPStackRep Block。 Neck:YOLOv6的Neck采用了继YOLOv4和YOLOv5之后的PAN拓扑[24]。我们使用 RepBlocks 或 CSPStackRep Blocks 增强颈部以获得 RepPAN。 Head:我们简化了解耦头,使其更加高效,称为高效解耦头。

标签分配:我们通过大量实验评估了YOLOv6上标签分配策略[5,7,18,48,51]的最新进展,结果表明TAL[5]更有效且训练友好。

损失函数:主流的anchor-free目标检测器的损失函数包括分类损失、框回归损失和对象损失。对于每个损失,我们使用所有可用的技术进行系统地实验,最终选择 VariFocal Loss [50] 作为我们的分类损失,选择 SIoU [8]/GIoU [35] Loss 作为我们的回归损失。

行业方便的改进:我们引入了额外的常见实践和技巧来提高性能,包括自蒸馏和更多的训练周期。对于自蒸馏,分类和框回归分别由教师模型监督。得益于 DFL [20],盒回归的精炼成为可能。此外,软标签和硬标签的信息比例通过余弦衰减动态下降,这有助于学生在训练过程中的不同阶段选择性地获取知识。另外,我们在评估时遇到了没有添加额外灰色边框而导致性能受损的问题,为此我们提供了一些补救措施。

量化和部署:为了解决基于量化重参数化模型的性能下降问题,我们使用 RepOptimizer [2] 训练 YOLOv6 以获得 PTQ 友好的权重。我们进一步采用带有通道蒸馏[36]和图优化的QAT来追求极限性能。我们的量化 YOLOv6-S 达到了新的最先进水平,AP 为 42.3%,吞吐量为 869 FPS(批量大小 = 32)。

2.1网络设计

一级物体检测器一般由以下部分组成:脊柱、颈部和头部。主干网主要决定特征表示能力,同时其设计也对推理效率有着至关重要的影响,因为它承载着很大一部分计算成本。颈部用于聚合低级物理特征与高级语义特征,然后构建各级金字塔特征图。头部由多个卷积层组成,它根据颈部组装的多级特征来预测最终的检测结果。从结构的角度来看,它可以分为基于锚的和无锚的,或者更确切地说,参数耦合头和参数解耦头。

在YOLOv6中,基于硬件友好的网络设计原则[3],我们提出了两个可缩放的可重参数化的骨干和颈部以适应不同尺寸的模型,以及具有混合通道策略的高效解耦头。 YOLOv6的整体架构如图2所示。

2.1.1骨干网络

如上所述,主干网络的设计对检测模型的有效性和效率有很大影响。之前的研究表明,多分支网络 [13, 14, 38, 39] 通常可以比单路径网络 [15, 37] 实现更好的分类性能,但通常会导致并行度的降低并导致并行度的增加推理延迟。相反,像 VGG [37] 这样的普通单路径网络具有高并行性和更少内存占用的优势,从而带来更高的推理效率。最近在 RepVGG [3] 中,提出了一种结构重新参数化方法,将训练时多分支拓扑与推理时简单架构解耦,以实现更好的速度精度权衡。

受上述工作的启发,我们设计了一个高效的可重参数化主干,表示为 EfficientRep。对于小型模型,在训练阶段,主干的主要组成部分是RepBlock,如图3(a)所示。在推理阶段,每个 RepBlock 通过 ReLU 激活函数转换为 3 × 3 卷积层堆栈(表示为 RepConv),如图 3(b)所示。

通常,3×3 卷积在主流 GPU 和 CPU 上进行了高度优化,并且具有更高的计算密度。因此,EfficientRep Backbone充分利用了硬件的计算能力,从而显着降低了推理延迟,同时增强了表示能力。

然而,我们注意到,随着模型容量的进一步扩大,单路径普通网络中的计算成本和参数数量呈指数级增长。

为了在计算负担和准确性之间实现更好的权衡,我们修改了 CSPStackRep 块来构建中型和大型网络的主干。如图3(c)所示,CSPStackRep Block由三个1×1卷积层和一个子块堆栈组成,子块由两个带有残差连接的RepVGG块[3]或RepConv(分别在训练或推理时)组成。此外,采用跨级部分(CSP)连接来提高性能,而无需过多的计算成本。与CSPRepResStage[45]相比,它具有更简洁的外观,并考虑了准确性和速度之间的平衡。

然而,我们注意到,随着模型容量的进一步扩大,单路径普通网络中的计算成本和参数数量呈指数级增长。

为了在计算负担和准确性之间实现更好的权衡,我们修改了 CSPStackRep 块来构建中型和大型网络的主干。如图3(c)所示,CSPStackRep Block由三个1×1卷积层和一个子块堆栈组成,子块由两个带有残差连接的RepVGG块[3]或RepConv(分别在训练或推理时)组成。此外,采用跨级部分(CSP)连接来提高性能,而无需过多的计算成本。与CSPRepResStage[45]相比,它具有更简洁的外观,并考虑了准确性和速度之间的平衡。

图 3:(a) RepBlock 由一堆 RepVGG 块组成,在训练时具有 ReLU 激活。 (b) 在推理时间内,RepVGG 块转换为 RepConv。 (c) CSPStackRep 块包含三个 1×1 卷积层和在具有残差连接的 ReLU 激活之后的双 RepConv 子块堆栈。

2.1.2 Neck

在实践中,多个尺度的特征集成已被证明是目标检测的关键且有效的部分[9,21,24,40]。我们采用 YOLOv4 [1] 和 YOLOv5 [10] 改进的 PAN 拓扑 [24] 作为我们检测颈的基础。此外,我们将YOLOv5中使用的CSPBlock替换为RepBlock(针对小模型)或CSPStackRep Block(针对大模型),并相应调整宽度和深度。 YOLOv6 的颈部表示为 Rep-PAN。

2.1.3 Head

高效解耦头:YOLOv5的检测头是一个耦合头,在分类和定位分支之间共享参数,而FCOS[41]和YOLOX[7]中的对应部分解耦两个分支,并引入了额外的两个3×3卷积层在每个分支中以提高性能。

在YOLOv6中,我们采用混合通道策略来构建更高效的解耦头。具体来说,我们将中间 3×3 卷积层的数量减少到只有一个。头部的宽度由脊柱和颈部的宽度乘数共同缩放。这些修改进一步降低了计算成本,以实现更低的推理延迟。

Anchor-free检测器因其更好的泛化能力和解码预测结果的简单性而脱颖而出。其后处理的时间成本大大降低。无锚检测器有两种类型:基于锚点的 [7, 41] 和基于关键点的 [16, 46, 53]。在YOLOv6中,我们采用基于锚点的范式,其框回归分支实际上预测从锚点到边界框四个边的距离。

2.2标签分配

标签分配负责在训练阶段将标签分配给预定义的锚点。之前的工作提出了各种标签分配策略,从简单的基于 IoU 的策略和内部真实方法 [41] 到其他更复杂的方案 [5,7,18,48,51]。

SimOTA:OTA [6]将目标检测中的标签分配视为最优传输问题。它从全局角度为每个真实对象定义正/负训练样本。 SimOTA [7] 是 OTA [6] 的简化版本,减少了额外的超参数并保持了性能。 YOLOv6早期版本采用SimOTA作为标签分配方法。然而,在实践中,我们发现引入SimOTA会减慢训练过程。而陷入不稳定训练的情况也不少见。因此,我们希望有 SimOTA 的替代品。

任务对齐学习:任务对齐学习(TAL)首先在TOOD[5]中提出,其中设计了分类分数和预测框质量的统一度量。 IoU 被替换为这个指标来分配对象标签。在一定程度上缓解了任务(分类和框回归)错位的问题。

TOOD 的另一个主要贡献是关于任务对齐头(T 型头)。 T-head 堆叠卷积层来构建交互特征,在其之上使用任务对齐预测器(TAP)。 PP-YOLOE[45]改进了Thead,用轻量级的ESE注意力替换T-head中的层注意力,形成ET-head。然而,我们发现 ET-head 会降低我们模型中的推理速度,并且不会带来任何精度增益。因此,我们保留了高效解耦头的设计。

此外,我们观察到TAL可以比SimOTA带来更多的性能提升并稳定训练。因此,我们采用 TAL 作为 YOLOv6 中默认的标签分配策略。

2.3损失函数

物体检测包含两个子任务:分类和定位,对应两个损失函数:分类损失和框回归损失。对于每个子任务,近年来提出了各种损失函数。

在本节中,我们将介绍这些损失函数并描述如何为 YOLOv6 选择最佳损失函数。

2.3.1 分类损失

提高分类器的性能是优化检测器的关键部分。 Focal Loss[22]对传统的交叉熵损失进行了修改,以解决正例与负例之间、困难样本与易样本之间的类不平衡问题。为了解决训练和推理之间质量估计和分类使用不一致的问题,质量焦点损失(QFL)[20]进一步扩展了焦点损失,将分类分数和定位质量的联合表示用于分类监督。而 VariFocal Loss (VFL) [50] 源于 Focal Loss [22],但它对正样本和负样本的处理不对称。通过考虑不同重要程度的正样本和负样本,它平衡了来自两个样本的学习信号。 Poly Loss [17]将常用的分类损失分解为一系列加权多项式基。它在不同的任务和数据集上调整多项式系数,通过实验证明比交叉熵损失和焦点损失更好。

我们在 YOLOv6 上评估所有这些高级分类损失,最终采用 VFL [50]。

2.3.2 盒子回归损失

框回归损失提供了精确定位边界框的重要学习信号。 L1损失是早期作品中原始的框回归损失。逐渐地,各种精心设计的框回归损失如雨后春笋般涌现,例如 IoU 系列损失[8,11,35,47,52,52]和概率损失[20]。

IoU-series Loss:IoU loss [47]将预测框的四个边界作为一个整体进行回归。由于其与评价指标的一致性,已被证明是有效的。 IoU有多种变体,如GIoU[35]、DIoU[52]、CIoU[52]、α-IoU[11]和SIoU[8]等,形成相关的损失函数。我们在这项工作中对 GIoU、CIoU 和 SIoU 进行了实验。其中SIoU应用于YOLOv6-N和YOLOv6-T,而其他则使用GIoU。

概率损失:分布焦点损失(DFL)[20]将盒子位置的底层连续分布简化为离散概率分布。它考虑了数据中的模糊性和不确定性,而不引入任何其他强先验,这有助于提高框定位精度,特别是当真实框的边界模糊时。在DFL基础上,DFLv2[19]开发了一个轻量级子网络来利用分布统计数据和真实定位质量之间的密切相关性,从而进一步提高检测性能。然而,DFL 通常会比一般框回归输出多 17 倍的回归值,从而导致大量开销。额外的计算成本极大地阻碍了小模型的训练。而 DFLv2 由于额外的子网络进一步增加了计算负担。在我们的实验中,DFLv2 在我们的模型上带来了与 DFL 类似的性能增益。因此,我们在YOLOv6-M/L中只采用DFL。实验细节可以在第 3.3.3 节中找到。

2.3.3 目标损失

目标损失:首先在 FCOS [41] 中提出,用于降低低质量边界框的分数,以便在后处理中将其过滤掉。它也被用在YOLOX [7]中来加速收敛并提高网络精度。作为像 FCOS 和 YOLOX 这样的无锚框架,我们已经尝试将对象丢失引入 YOLOv6。不幸的是,它并没有带来太多积极的影响。详细信息在第 3 节中给出。

2.4行业方便的改进

以下技巧可以在实际实践中使用。

它们并不是为了公平比较,而是稳定地产生性能增益,而不需要太多繁琐的工作。

2.4.1 更多训练轮数

经验结果表明,随着训练时间的增加,检测器的性能不断提高。我们将训练持续时间从 300 epoch 延长到 400 epoch 以达到更好的收敛性。

2.4.2 自蒸馏

为了进一步提高模型精度,同时不引入太多额外的计算成本,我们应用经典知识蒸馏技术来最小化教师和学生预测之间的 KL 散度。我们将老师限制为学生本身,但经过预先训练,因此我们称之为自我蒸馏。请注意,KL 散度通常用于衡量数据分布之间的差异。然而,目标检测中有两个子任务,其中只有分类任务可以直接利用基于KL散度的知识蒸馏。感谢 DFL 损失 [20],我们也可以在框回归上执行它。知识蒸馏损失可以表示为:

其中 p cls t 和 p cls s 分别是教师模型和学生模型的类别预测,相应地 p reg t 和 p reg s 是框回归预测。总体损失函数现在表述为:

其中 Ldet 是使用预测和标签计算的检测损失。引入超参数α来平衡两个损失。训练初期,老师的软标签更容易学习。随着训练的继续,学生的表现将与老师相匹配,这样硬标签就会对学生有更多帮助。在此之上,我们将余弦权重衰减应用于α,以动态调整来自教师的硬标签和软标签的信息。我们进行了详细的实验来验证自蒸馏对 YOLOv6 的影响,这将在第 3 节中讨论。

2.4.3 图像的灰色边框

我们注意到,在 YOLOv5 [10] 和 YOLOv7 [42] 的实现中评估模型性能时,每个图像周围都有半步灰色边框。虽然没有添加有用的信息,但它有助于检测图像边缘附近的对象。这个技巧也适用于 YOLOv6。

然而,额外的灰色像素明显降低了推理速度。没有灰色边框,YOLOv6的性能会恶化,[10, 42]中的情况也是如此。

我们假设该问题与马赛克增强中的灰色边框填充有关 [1, 10]。进行了在最后一个时期关闭马赛克增强的实验[7](又名淡入淡出策略)以进行验证。对此,我们改变灰色边框的面积,并将带有灰色边框的图像直接调整为目标图像大小。

结合这两种策略,我们的模型可以保持甚至提高性能,而不会降低推理速度。

2.5量化与部署

对于工业部署,通常的做法是采用量化来进一步加快运行时间,而不会影响太多性能。训练后量化(PTQ)仅使用较小的校准集直接量化模型。而量化感知训练 (QAT) 通过访问训练集进一步提高性能,通常与蒸馏结合使用。然而,由于YOLOv6中大量使用重新参数化块,以前的PTQ技术无法产生高性能,而在训练和推理过程中匹配假量化器时很难结合QAT。我们在这里展示部署过程中的陷阱和解决方案。

2.5.1 重新参数化优化器

RepOptimizer [2] 提出在每个优化步骤进行梯度重新参数化。该技术还很好地解决了基于重新参数化的模型的量化问题。因此,我们以这种方式重建 YOLOv6 的重新参数化块,并使用 RepOptimizer 对其进行训练以获得 PTQ 友好的权重。特征图的分布很大程度上变窄了(例如图4,B.1中更多),这极大地有利于量化过程,结果参见第3.5.1节。

图 4:使用 RepOptimizer 训练的 YOLOv6-S 的激活分布得到改善。

2.5.2 敏感性分析

我们通过将量化敏感操作部分转换为浮点计算来进一步提高 PTQ 性能。为了获得灵敏度分布,常用的有几个指标:均方误差(MSE)、信噪比(SNR)和余弦相似度。通常为了进行比较,人们可以选择输出特征图(在激活某一层之后)来计算有或没有量化的这些指标。作为替代方案,也可以通过打开和关闭特定层的量化来计算验证 AP [29]。

我们在使用 RepOptimizer 训练的 YOLOv6-S 模型上计算所有这些指标,并选择前 6 个敏感层以浮动方式运行。完整的敏感性分析图表可在 B.2 中找到。

2.5.3 通过通道蒸馏进行量化感知训练

如果 PTQ 不足,我们建议采用量化感知训练(QAT)来提高量化性能。为了解决训练和推理过程中假量化器不一致的问题,有必要在RepOptimizer的基础上构建QAT。此外,在YOLOv6框架内采用了通道蒸馏[36](后来称为CW Distill),如图5所示。这也是一种自蒸馏方法,其中教师网络是FP32精度的学生本身。请参阅第 3.5.1 节中的实验。

图 5:QAT 中 YOLOv6 逐通道蒸馏的示意图。

3. 实验

3.1实施细节

我们使用与 YOLOv5 [10] 相同的优化器和学习计划,即学习率具有动量和余弦衰减的随机梯度下降(SGD)。还利用了热身、分组权重衰减策略和指数移动平均线 (EMA)。我们在[1,7,10]之后采用了两种强大的数据增强(Mosaic [1,10]和Mixup [49])。超参数设置的完整列表可以在我们发布的代码中找到。我们在 COCO 2017 [23] 训练集上训练我们的模型,并在 COCO 2017 验证集上评估准确性。除非另有说明,我们的所有模型均在 8 个 NVIDIA A100 GPU 上进行训练,并且速度性能是在具有 TensorRT 版本 7.2 的 NVIDIA Tesla T4 GPU 上测量的。附录 A 演示了使用其他 TensorRT 版本或其他设备测量的速度性能。

3.2比较

考虑到这项工作的目标是为工业应用构建网络,我们主要关注部署后所有模型的速度性能,包括吞吐量(批量大小为1或32时的FPS)和GPU延迟,而不是FLOPs或参数的数量。我们将 YOLOv6 与 YOLO 系列其他最先进的检测器进行比较,包括 YOLOv5 [10]、YOLOX [7]、PPYOLOE [45] 和 YOLOv7 [42]。请注意,我们使用 TensorRT 在同一 Tesla T4 GPU 上测试了具有 FP16 精度的所有官方模型的速度性能 [28]。根据其开源代码和权重,在输入大小为416和640时重新评估YOLOv7-Tiny的性能。结果如表1和图1所示。与YOLOv5-N/YOLOv7-Tiny(输入size=416),我们的 YOLOv6-N 分别显着提升了 7.9%/2.6%。它还在吞吐量和延迟方面具有最佳的速度性能。与YOLOX-S/PPYOLOE-S相比,YOLOv6-S可以将AP提高3.0%/0.4%,速度更高。我们将 YOLOv5-S 和 YOLOv7-Tiny(输入大小=640)与 YOLOv6-T 进行比较,我们的方法在批量大小为 1 的情况下准确率提高了 2.9%,速度提高了 73/25 FPS。YOLOv6-M 比 YOLOv5-M 性能高出 4.2%相似速度下AP更高,在更高速度下比YOLOX-M/PPYOLOE-M高2.7%/0.6% AP。此外,它比 YOLOv5-L 更准确、更快。在相同延迟约束下,YOLOv6-L 比 YOLOX-L/PPYOLOE-L 准确率提高 2.8%/1.1%。

我们还通过用 ReLU 替换 SiLU(表示为 YOLOv6-L-ReLU)来提供更快的 YOLOv6-L 版本。

它实现了 51.7% 的 AP,延迟为 8.8 ms,在精度和速度上均优于 YOLOX-L/PPYOLOE-L/YOLOv7。

3.3消融研究

3.3.1 网络

主干和颈部 我们探讨了单路径结构和多分支结构对主干和颈部的影响,以及 CSPStackRep Block 的通道系数(记为 CC)。本部分描述的所有模型均采用TAL作为标签分配策略,VFL作为分类损失,GIoU和DFL作为回归损失。

结果如表2所示。我们发现不同规模的模型的最佳网络结构应该得出不同的解决方案。

对于YOLOv6-N,单路径结构在精度和速度方面都优于多分支结构。虽然单路径结构比多分支结构具有更多的 FLOP 和参数,但由于相对较低的内存占用和更高的并行度,它可以运行得更快。对于YOLOv6-S,两种块样式带来相似的性能。当涉及较大的模型时,多分支结构在精度和速度上取得了更好的性能。最后,我们为YOLOv6-M选择通道系数为2/3的多分支,为YOLOv6-L选择通道系数为1/2的多分支。

此外,我们研究了颈部宽度和深度对 YOLOv6-L 的影响。表3的结果表明,在相似速度下,细颈的性能比宽浅颈的性能好0.2%。

表 1:COCO 2017 val. 上与其他 YOLO 系列检测器的比较FPS 和延迟是在 Tesla T4 上与 TensorRT 相同的环境中以 FP16 精度测量的。我们所有的模型都经过 300 个 epoch 的训练,无需预训练或任何外部数据。我们模型的准确性和速度性能都是在 640×640 的输入分辨率下进行评估的。‘+”表示采用了所提出的自蒸馏方法。 ‘*’表示通过官方代码对发布的模型重新评估的结果。

卷积层和激活函数的组合YOLO系列采用了多种激活函数,ReLU[27]、LReLU[25]、Swish[31]、SiLU[4]、Mish[26]等。在这些激活函数中,SiLU 是使用最多的。一般来说,SiLU 具有更好的精度,并且不会造成太多额外的计算成本。然而,当涉及到工业应用时,尤其是部署具有 TensorRT [28] 加速的模型时,ReLU 由于融合为卷积而具有更大的速度优势。

表 2:backbone和neck的消融研究。这里的YOLOv6L配备了ReLU。

此外,我们进一步验证了RepConv/普通卷积(记为Conv)和ReLU/SiLU/LReLU组合在不同规模网络中的有效性,以实现更好的权衡。如表 4 所示,带有 SiLU 的 Conv 在准确度上表现最好,而 RepConv 和 ReLU 的组合实现了更好的权衡。我们建议用户在延迟敏感的应用程序中采用 RepConv 和 ReLU。我们选择在YOLOv6-N/T/S/M中使用RepConv/ReLU组合以获得更高的推理速度,并在大型模型YOLOv6-L中使用Conv/SiLU组合来加速训练并提高性能。

表 3:YOLOv6-L 颈部设置的消融研究。选择 SiLU 作为激活函数。

表 4:不同类型卷积层(表示为 Conv.)和激活层(表示为 Act.)组合的消融研究。

杂项设计:我们还基于YOLOv6-N对2.1节提到的其他网络部分进行了一系列的消融。我们选择 YOLOv5-N 作为基线,并逐步添加其他组件。结果如表 5 所示。首先,使用解耦头(表示为 DH),我们的模型精度提高了 1.4%,但时间成本增加了 5%。其次,我们验证了无锚范式比基于锚的范式快 51%,因为它的预定义锚数量少了 3 倍,这导致输出的维度更少。此外,骨干(EfficientRep Backbone)和颈部(Rep-PAN颈部)的统一修改,记为EB+RN,带来3.6%的AP提升,运行速度提升21%。最后,优化的解耦头(混合通道,HC)在精度和速度上分别带来了 0.2% AP 和 6.8% FPS 的提升。

3.3.2 标签分配

在表6中,我们分析了主流标签分配策略的有效性。实验在YOLOv6N上进行。正如预期的那样,我们观察到 SimOTA 和 TAL 是最好的两种策略。与ATSS相比,SimOTA可以提高AP 2.0%,TAL比SimOTA带来0.5%的AP提升。考虑到TAL的稳定训练和更好的准确性表现,我们采用TAL作为我们的标签分配策略。

此外,TOOD[5]的实现采用ATSS[51]作为早期训练时期的预热标签分配策略。我们也保留了预热策略并进一步做了一些探索。详细信息如表7所示,我们可以发现,在不进行预热或通过其他策略(即SimOTA)进行预热的情况下,也可以达到类似的性能。

表 5:以增量方式对所有网络设计进行消融研究。 FPS 在 Tesla T4 GPU 上以 FP16 精度和批量大小 = 32 进行测试

表 6:标签分配方法的比较。

表 7:预热阶段标签分配方法的比较。

3.3.3 损失函数

在目标检测框架中,损失函数由分类损失、框回归损失和可选的目标损失组成,可以表示为:

其中Lcls、Lreg和Lobj是分类损失、回归损失和对象损失。 λ 和 µ 是超参数。

在本小节中,我们将评估 YOLOv6 上的每个损失函数。除非另有说明,YOLOv6-N、YOLOv6-S 和 YOLOv6-M 的基准分别为 35.0%、42.9% 和 48.0% 使用 TAL、Focal Loss 和 GIoU Loss 进行训练。

表 8:分类损失函数的消融研究。

分类损失:我们在 YOLOv6-N/S/M 上实验了 Focal Loss [22]、Poly loss [17]、QFL [20] 和 VFL [50]。从表8中可以看出,与Focal Loss相比,VFL在YOLOv6-N/S/M上分别带来了0.2%/0.3%/0.1%的AP改进。我们选择VFL作为分类损失函数。

回归损失:IoU 系列和概率损失函数都在 YOLOv6-N/S/M 上进行了实验。

YOLOv6N/S/M 中使用了最新的 IoU 系列损失。表9中的实验结果表明,SIoU Loss在YOLOv6-N和YOLOv6-T上表现优于其他,而CIoU Loss在YOLOv6-M上表现更好。

对于概率损失,如表10所示,引入DFL可为YOLOv6-N/S/M分别获得0.2%/0.1%/0.2%的性能增益。然而,对于小模型来说,推理速度受到很大影响。因此,DFL仅在YOLOv6-M/L中引入。

目标损失:目标损失也在YOLOv6上进行了实验,如表11所示。从表11中我们可以看到对象丢失对YOLOv6-N/S/M网络有负面影响,其中在YOLOv6-上AP最大下降1.1% N。负增益可能来自于 TAL 中对象分支与其他两个分支之间的冲突。具体来说,在训练阶段,使用预测框和真实框之间的 IoU 以及分类分数共同构建一个度量作为分配标签的标准。然而,引入的对象分支将需要对齐的任务数量从两个扩展为三个,这显然增加了难度。根据实验结果和分析,YOLOv6 中丢弃了对象损失。

表 9:IoU 系列框回归损失函数的消融研究。分类损失是 VFL [50]。

表 10:概率损失函数的消融研究。

表 11:目标损失的有效性。

3.4.行业方便的改进

更多训练纪元 在实践中,更多训练纪元是进一步提高准确性的简单而有效的方法。我们的小模型训练 300 和 400 个 epoch 的结果如表 12 所示。我们观察到,较长 epoch 的训练使 YOLOv6-N、T、S 的 AP 分别提高了 0.4%、0.6%、0.5%。考虑到可接受的成本和产生的增益,这表明 400 个 epoch 的训练是 YOLOv6 更好的收敛方案。

自蒸馏:我们在 YOLOv6L 上进行了详细的实验来验证所提出的自蒸馏方法。从表13中可以看出,仅在分类分支上应用自蒸馏可以带来0.4%的AP改进。此外,我们简单地对框回归任务进行自蒸馏,AP 增加了 0.3%。权重衰减的引入使模型的 AP 提高了 0.6%。

图像的灰色边框在2.4.3节中,我们介绍了一种在没有额外灰色边框的情况下解决性能下降问题的策略。实验结果如表14所示。在这些实验中,YOLOv6-N和YOLOv6-S训练了400个epoch,YOLOv6-M训练了300个epoch。可以观察到,去除灰色边框时,在没有马赛克褪色的情况下,YOLOv6-N/S/M的准确率降低了0.4%/0.5%/0.7%。而采用Mosaic衰落时,性能下降变为0.2%/0.5%/0.5%,从中我们发现,一方面,性能下降的问题得到了缓解。另一方面,无论我们是否填充灰色边框,小模型(YOLOv6-N/S)的准确性都会提高。此外,我们将输入图像限制为 634×634,并在边缘周围添加 3 个像素宽的灰色边框(更多结果可以在附录 C 中找到)。采用这种策略,最终图像的大小是预期的 640×640。

表14中的结果表明,YOLOv6-N/S/M的最终性能甚至提高了0.2%/0.3%/0.1%,最终图像尺寸从672减小到640。

表14:在没有额外灰色边框的情况下解决性能下降问题的策略的实验结果。

3.5量化结果

我们以 YOLOv6-S 为例来验证我们的量化方法。以下实验针对两个版本。基线模型训练了 300 个 epoch。

3.5.1 PTQ

使用 RepOptimizer 训练模型时,平均性能得到显着提高,请参见表 15。RepOptimizer 通常更快且几乎相同。

表 15:使用 RepOptimizer 训练的 YOLOv6 的 PTQ 性能。

3.5.2 QAT

对于 v1.0,我们将假量化器应用于从第 2.5.2 节获得的非敏感层来执行量化感知训练,并将其称为部分 QAT。我们将结果与表 16 中的完整 QAT 进行比较。部分 QAT 可以提高准确性,但吞吐量略有下降。

由于在 v2.0 版本中删除了量化敏感层,我们直接在使用 RepOptimizer 训练的 YOLOv6-S 上使用完整的 QAT。我们通过图优化消除插入的量化器,以获得更高的精度和更快的速度。我们在表 17 中比较了 PaddleSlim [30] 的基于蒸馏的量化结果。请注意,我们的 YOLOv6-S 的量化版本是最快且最准确的,另请参见图 1。

表16:YOLOv6-S(v1.0)在不同设置下的QAT性能。

表 17:YOLOv6-S (v2.0) 与其他量化检测器相比的 QAT 性能。 ‘*’:基于 v1.0 版本。 ‘y’:我们在 Tesla T4 上使用 TensorRT 8 进行测试,批量大小为 1 和 32。

4.结论

简而言之,考虑到持续的工业需求,我们提出了 YOLOv6 的当前形式,仔细检查了最新的物体检测器组件的所有进步,同时灌输了我们的想法和实践。结果在准确性和速度上都超过了其他可用的实时检测器。为了方便工业部署,我们还为YOLOv6提供了定制的量化方法,使检测器开箱即用。我们衷心感谢学术界和工业界的精彩想法和努力。未来,我们将继续扩展该项目,以满足更高的标准和更苛刻的场景。


  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值