yolov6用于工业应用的单级目标检测框架

yolov6:用于工业应用的单级目标检测框架

摘要:

多年来,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%)。我们仔细地进行了实验,以验证每个组件的有效性。

1.介绍

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

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

考虑到上述观察结果,我们带来了 YOLOv6 的诞生,它在准确性和速度方面实现了迄今为止最好的权衡。我们在图 1 中展示了 YOLOv6 与其他类似规模的同行的比较。为了在不降低性能的情况下提高推理速度,我们研究了前沿的量化方法,包括训练后量化 (PTQ) 和量化感知训练 ( QA T),并将它们容纳在 YOLOv6 中,以实现部署就绪网络的目标。
在这里插入图片描述

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

我们重新设计了一系列不同规模的网络,为不同场景的工业应用量身定制。不同规模的架构各不相同,以实现最佳的速度和准确性权衡,其中小型模型具有普通的单路径骨干网,而大型模型则建立在高效的多分支块。

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

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

我们在 RepOptimizer [2] 和通道蒸馏 [36] 的帮助下改革了检测量化方案,这导致了一个具有 43.3% COCO AP 和 869 FPS 吞吐量的永远快速和准确的检测器,批量大小为32.

2.方法

YOLOv6 的改造设计包括以下组件,网络设计、标签分配、损失函数、数据扩充、行业便利的改进以及量化和部署:

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

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

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

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

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

2.1.网络设计

一个单级目标检测器一般由以下部分组成:主干、颈部和头部。主干网主要决定特征表示能力,同时其设计对推理效率有关键影响,因为它承担了很大一部分计算成本。颈部用于聚合具有高级语义特征的低级物理特征,然后在各个级别构建金字塔特征图。头部由多个卷积层组成,它根据颈部组装的多级特征预测最终检测结果。从结构的角度来看,它可以分为anchorbased和anchor-free,或者更确切地说是parameter-coupled head和parameter-decoupled head。在 YOLOv6 中,基于硬件友好的网络设计原则 [3],我们提出了两个可缩放的可重新参数化主干和颈部以适应不同尺寸的模型,以及一个采用混合通道策略的高效解耦头。 YOLOv6的整体架构如图2所示。
在这里插入图片描述

2.1.1 主干网络

如上所述,骨干网络的设计对检测模型的有效性和效率有很大的影响。以前,已经表明多分支网络通常可以比单路径网络实现更好的分类性能,但通常伴随着并行性的降低并导致增加推理延迟。相反,像 VGG这样的普通单路径网络利用了高并行性和较少内存占用的优势,从而提高了推理效率。最近在 RepVGG中,提出了一种结构重新参数化方法,以将训练时间多分支拓扑与推理时间平面架构分离,以实现更好的速度准确性权衡

受上述工作的启发,我们设计了一个高效的可重新参数化的主干,表示为 EfficientRep。对于小型模型,主干的主要组成部分是训练阶段的 RepBlock,如图 3 (a) 所示。并且每个 RepBlock 在推理阶段被转换为具有 ReLU 激活函数的 3×3 卷积层(表示为 RepConv)的堆栈,如图 3(b)所示。通常 3×3 卷积在主流 GPU 上得到高度优化,并且CPU,它享有更高的计算密度。因此,EfficientRep Backbone 充分利用了硬件的计算能力,从而显着降低了推理延迟,同时增强了表示能力。
在这里插入图片描述

2.1.2 颈部

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

2.1.3 头部

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

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

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

2.2.标签分配

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

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

Task alignment learning(任务对其学习) 任务对齐学习 (Task Alignment Learning, TAL) 最早在 TOOD [5] 中提出,其中设计了分类分数和预测框质量的统一度量。 IoU 被这个度量取代以分配对象标签。在一定程度上缓解了任务(分类和框回归)错位的问题。

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

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

2.3.损失函数

目标检测包含两个子任务:分类和定位,对应两个损失函数:分类损失和框回归损失。对于每个子任务,近年来都有各种损失函数。在本节中,我们将介绍这些损失函数并描述我们如何为 YOLOv6 选择最佳损失函数。

2.3.1 分类损失

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

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

2.3.2 框回归损失

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

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

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

2.3.3 目标损失

Object loss 最早是在 FCOS [41] 中提出的,**目的是降低低质量边界框的得分,以便在后处理中将其过滤掉。**它也被用于 YOLOX [7] 以加速收敛并提高网络精度。作为像 FCOS 和 YOLOX 一样的 anchor-free 框架,我们在 YOLOv6 中尝试了 object loss。不幸的是,它并没有带来很多积极的影响。详细信息在第 3 节中给出。

2.4 工业友好型改进

以下技巧可在实际实践中使用。它们并非旨在进行公平比较,而是无需太多乏味的努力即可稳定地提高性能

2.4.1 更多的训练回合

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

2.4.2 自蒸馏

为了在不引入太多额外计算成本的情况下进一步提高模型准确性,我们应用经典知识蒸馏技术来最小化教师和学生预测之间的 KL-divergence。我们将教师限制为学生本身,但经过预训练,因此我们称之为自我蒸馏。请注意,KL 散度通常用于衡量数据分布之间的差异。然而,目标检测中有两个子任务,其中只有分类任务可以直接利用基于 KL-divergence 的知识蒸馏。由于 DFL 损失 [20],我们也可以在框回归上执行它。知识蒸馏损失可以表示为:
L K D = K L ( p t c l s ∣ ∣ p s c l s ) + K L ( p t r e g ∣ ∣ p s r e g ) L_{KD}=KL({p_{t}}^{cls}||{p_{s}}^{cls}) + KL({p_{t}}^{reg}||{p_{s}}^{reg}) LKD=KL(ptcls∣∣pscls)+KL(ptreg∣∣psreg)
其中 L d e t L_{det} Ldet是使用预测和标签计算的检测损失。引入超参数α来平衡两个损失。在训练初期,老师的软标签更容易学习。随着训练的继续,学生的表现将与老师相匹配,这样硬标签将对学生有更多帮助。在此基础上,我们将余弦权重衰减应用于 α 以动态调整来自硬标签和来自教师的软标签的信息。我们进行了详细的实验来验证自蒸馏对 YOLOv6 的影响,这将在第 3 节中讨论。

2.4.3 图片灰度边框

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

然而,额外的灰色像素明显降低了推理速度。没有灰色边框,YOLOv6 的性能会下降,[10, 42] 中也是如此。我们假设该问题与 Mosaic 增强中的灰色边框填充有关 [1, 10]。在最后一个时期 [7](又名淡化策略)期间关闭马赛克增强的实验用于验证。在这方面,我们改变了灰色边框的区域,并将带有灰色边框的图像直接调整为目标图像大小。结合这两种策略,我们的模型可以在不降低推理速度的情况下保持甚至提升性能。

2.5. 量化和部署

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

2.5.1重新参数化优化器

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

2.5.2 敏感性分析

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

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

2.5.3 使用通道蒸馏的量化感知训练

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

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]、PPY OLOE [45] 和 YOLOv7 [42]。请注意,我们在具有 TensorRT [28] 的同一 Tesla T4 GPU 上测试了所有具有 FP16 精度的官方模型的速度性能。 YOLOv7-Tiny 的性能根据他们的开源代码和权重在输入大小为 416 和 640 时重新评估。结果如表 1 和图 1 所示。与 YOLOv5-N/YOLOv7-Tiny(输入size=416)相比,我们的 YOLOv6-N 分别显着提升了 7.9%/2.6%。它还在吞吐量和延迟方面具有最佳速度性能。与 YOLOX-S/PPYOLOE-S 相比,YOLOv6-S 可以提高 3.0%/0.4% 的 AP,速度更快。我们将 YOLOv5-S 和 YOLOv7-Tiny(输入大小 = 640)与 YOLOv6-T 进行比较,我们的方法精度提高 2.9%,批处理大小为 1 时速度提高 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。**它以 8.8 毫秒的延迟实现了 51.7% 的 AP,在准确性和速度上都优于 YOLOX-L/PPYOLOE-L/YOLOv7。
在这里插入图片描述

3.3 消融研究

3.3.1 网络

骨干和颈部 我们探讨了单路径结构和多分支结构对骨干和颈部的影响,以及 CSPStackRep Block 的通道系数(表示为 CC)。这部分描述的所有模型都采用 TAL 作为标签分配策略,VFL 作为分类损失,GIoU 和 DFL 作为回归损失。结果如表 2 所示。我们发现不同尺寸的模型的最佳网络结构应该是提出不同的解决方案。
在这里插入图片描述

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

此外,我们研究了颈部宽度和深度对 YOLOv6-L 的影响。表 3 中的结果表明,在相同速度下,细长颈部的性能比宽浅颈部好 0.2%。
在这里插入图片描述

卷积层和激活函数的结合 YOLO系列采用了广泛的激活函数,ReLU[27]、LReLU[25]、Swish[31]、SiLU[4]、Mish[26]等。在这些激活函数中,SiLU 是使用最多的。一般来说,SiLU 具有更好的准确性,并且不会导致过多的额外计算成本。然而,当涉及到工业应用时,尤其是部署具有 TensorRT [28] 加速的模型时,ReLU 因其融合到卷积中而具有更大的速度优势。此外,我们进一步验证了 RepConv/普通卷积(表示为 Conv)和 ReLU/SiLU/LReLU 的组合在不同规模的网络中的有效性,以实现更好的权衡。如表 4 所示,使用 SiLU 的 Conv 在准确性上表现最好,而 RepConv 和 ReLU 的组合实现了更好的权衡。我们建议用户在对延迟敏感的应用程序中采用 RepConv 和 ReLU。我们选择在 YOLOv6-N/T/S/M 中使用 RepConv/ReLU 组合以获得更高的推理速度,并在大型模型 YOLOv6-L 中使用 Conv/SiLU 组合来加速训练并提高性能。
在这里插入图片描述

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

3.3.2 标签分配

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

此外,TOOD [5] 的实现采用 ATSS [51] 作为早期训练时期的热身标签分配策略。我们还保留了预热策略,并对其进行了进一步的探索。详情如表 7 所示,我们可以发现在没有预热或通过其他策略(即 SimOTA)预热的情况下,它也可以达到类似的性能。
在这里插入图片描述

3.3.3 损失函数

在目标检测框架中,损失函数由分类损失、框回归损失和可选对象损失组成,可以表述如下:
L d e t = L c l s + λ L r e g + μ L o b j L_{det}=L_{cls} + \lambda L_{reg} + \mu L_{obj} Ldet=Lcls+λLreg+μLobj
其中 L c l s L_{cls} Lcls L r e g L_{reg} Lreg L o b j L_{obj} Lobj 是分类损失、回归损失和对象损失。 λ 和 µ 是超参数。

在本小节中,我们评估 YOLOv6 上的每个损失函数。除非另有说明,否则 YOLOv6-N、YOLOv6-S 和 YOLOv6-M 的基线分别为 35.0%、42.9% 和 48.0% trained with TAL、Focal Loss 和 GIoU Loss

分类损失 我们在 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 中的实验结果表明,对于 YOLOv6-N 和 YOLOv6-T,SIoU Loss 优于其他,而 CIoU Loss 在 YOLOv6-M 上表现更好。
在这里插入图片描述

对于概率损失,如表10所列,引入DFL可以分别为YOLOv6-N/S/M获得0.2%/0.1%/0.2%的性能增益。但是,对于小模型,推理速度会受到很大影响。因此,DFL 仅在 YOLOv6-M/L 中引入。
在这里插入图片描述

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

3.4 工业方面的改进

更多的训练回合 在实践中,更多的训练时期是进一步提高准确性的简单有效的方法。我们的小型模型训练了 300 和 400 个时期的结果如表 12 所示。我们观察到,对于 YOLOv6-N、T、S,更长时期的训练显着提高了 AP 0.4%、0.6%、0.5%。考虑到可接受的成本和产生的增益,它表明训练 400 个 epochs 是 YOLOv6 更好的收敛方案
在这里插入图片描述

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

灰色图片边框 在 2.4.3 节中,我们介绍了一种策略来解决没有额外灰色边框的性能下降问题。实验结果如表 14 所示。在这些实验中,YOLOv6-N 和 YOLOv6-S 训练了 400 个时期,YOLOv6-M 训练了 300 个时期。可以观察到YOLOv6-N/S/M在去除灰色边框时准确率降低了0.4%/0.5%/0.7%且没有Mosaic fading。而采用马赛克衰落时,性能下降为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时。
在这里插入图片描述

3.5量化结果

我们以YOLOv6-S为例验证了我们的量化方法。下面的实验是在两个版本上进行的。基线模型被训练了300个epoch。

3.5.1 PTQ

当使用RepOptimizer训练模型时,平均性能得到了显著提高,见表15。RepOptimizer通常更快,而且几乎相同。
在这里插入图片描述

3.5.2 QAT

对于v1.0,我们**将伪量化器应用于从2.5.2节获得的非敏感层来进行量化感知训练,并将其称为部分QAT。**我们将结果与表16中的完整QAT进行比较。部分QAT带来了更好的准确性,但吞吐量略有降低。
在这里插入图片描述

由于在2.0版中去除了量化敏感层,我们直接在用RepOptimizer训练的YOLOv6-S上使用完整的QA T。我们通过图优化消除插入量化器,以获得更高的精度和更快的速度。我们比较了表17中PaddleSlim[30]基于蒸馏的量化结果。请注意,我们的YOLOv6-S量化版本是最快和最准确的,也见图1。
在这里插入图片描述

4.总结

简而言之,考虑到持续的工业需求,我们提出了YOLOv6,仔细检查了物体探测器组件的所有最新进展,同时灌输了我们的思想和实践。结果在精度和速度上都超过了其他实时探测器。为了方便工业部署,我们还为YOLOv6提供了定制的量化方法,使快速检测器开箱即用。我们衷心感谢学术界和产业界的智慧和努力。在未来,我们将继续扩大这个项目,以满足更高的标准和更苛刻的场景。
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值