多年来,YOLO系列一直是高效物体检测的事实上的工业级标准。YOLO社区以压倒性的优势丰富了它在众多硬件平台和丰富场景中的应用。在这份技术报告中,我们努力把它的极限推到一个新的水平,以坚定不移的心态向行业应用迈进。考虑到现实环境中对速度和准确性的不同要求,我们广泛地研究了来自工业界或学术界的最新的物体检测进展。具体来说,我们大量吸收了最近的网络设计、训练策略、测试技术、量化和优化方法的思想。在此基础上,我们整合了我们的想法和实践,建立了一套不同规模的可部署的网络,以适应多样化的用例。在YOLO作者的慷慨许可下,我们将其命名为YOLOv6。我们也表示热烈欢迎用户和贡献者的进一步改进。对于性能的表现,我们的YOLOv6-N在COCO数据集上达到了35.9%的AP,在NVIDIA Tesla T4 GPU上的吞吐量为1234 FPS。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%)。我们仔细进行了实验来验证每个组件的有效性。
YOLO系列一直是工业应用中最受欢迎的检测框架,因为它在速度和精度之间有很好的平衡。YOLO系列的开创性工作是YOLOv1-3[32-34],它开辟了one-stage检测器的新道路,并在后来进行了大幅改进。YOLOv4[1]将检测框架重组为几个独立的部分(backbone, neck and head),并在当时验证了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)和量化感知训练(QAT),并将其纳入YOLOv6,以实现部署就绪的目标。网络的目标。
我们将YOLOv6的主要方面总结如下:
YOLOv6的重新设计由以下部分组成,网络设计、标签分配、损失函数、数据增强、适合工业界的改进,以及量化和部署:
一个单阶段目标检测器一般由以下部分组成:backbone、neck和head。主干部分主要决定了特征表示能力,同时,由于它承载了很大一部分计算成本,所以它的设计对推理效率有关键影响。neck用于将低层次的物理特征与高层次的语义特征聚合在一起,然后在各个层次建立金字塔特征图。头部由几个卷积层组成,它根据neck集合的多层次特征预测最终的检测结果。从结构上看,它可以分为 anchor-based 和 anchor-free的,或者说是参数耦合头和参数解耦头。
在YOLOv6中,基于硬件友好型网络设计的原则[3],我们提出了两个可扩展的可重新参数化的骨干和颈部,以适应不同规模的模型,以及一个高效的混合通道策略的解耦头。YOLOv6的整体结构如图2所示。
如上所述,骨干网络的设计对检测模型的有效性和效率有很大影响。以前的研究表明,多分支网络[13, 14, 38, 39]往往能比单路径网络[15, 37]取得更好的分类性能,但往往伴随着并行性的降低,导致推理延迟的增加。相反,像VGG[37]这样的普通单路径网络具有高并行性和较少内存占用的优势,导致更高的推理效率。最近在RepVGG[3]中,提出了一种结构上的重新参数化方法,将训练时的多分支拓扑结构与推理时的普通结构解耦,以实现更好的速度-准确度权衡。
受上述工作的启发, 我们设计了一个高效的可重参数化骨干网, 命名为EfficientRep. 对于小型模型, 骨干网的主要组成部分是训练阶段的Rep-Block, 如图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]相比,它有一个更简洁的前景,并考虑了准确性和速度之间的平衡。
在实践中,多尺度的特征整合已被证明是目标检测的一个关键和有效的部分[9, 21, 24, 40]。我们采用YOLOv4[1]和YOLOv5[10]中修改的PAN拓扑结构[24]作为我们检测颈部的基础。此外,我们用RepBlock(用于小模型)或CSPStackRep Block(用于大模型)取代YOLOv5中使用的CSPBlock,并相应调整宽度和深度。YOLOv6的颈部被表示为Rep-PAN。
高效的解耦头 YOLOv5的检测头是一个耦合头,其参数在分类和定位分支之间共享,而其在FCOS[41]和YOLOX[7]中的同类产品则将这两个分支解耦,并且在每个分支中引入额外的两个3×3卷积层以提高性能。在YOLOv6中,我们采用混合通道策略来建立一个更有效的解耦头。具体来说,我们将中间的3×3卷积层的数量减少到只有一个。头部的宽度由骨干和颈部的宽度乘数共同缩放。这些修改进一步降低了计算成本,以实现更低的推理延迟。
Anchor-free Anchor-free检测器因其更好的泛化能力和解码预测结果的简单性而脱颖而出。其后期处理的时间成本大大降低。有两种类型的Anchor-free检测器:基于锚点[7, 41]和基于关键点[16, 46, 53]。在YOLOv6中,我们采用了基于锚点的范式,其回归分支实际上预测了从锚点到box四边的距离。
标签分配负责在训练阶段将标签分配给预定义的锚点。以前的工作提出了各种标签分配策略,从简单的基于IoU的策略和里面的ground-truth方法[41]到其他更复杂的方案[5, 7, 18, 48, 51]。
SimOTA OTA[6]认为物体检测中的标签分配是一个最优传输问题。它从全局的角度为每个ground-truth目标定义了正/负的训练样本。SimOTA[7]是OTA[6]的简化版本,它减少了额外的超参数并保持了性能。在YOLOv6的早期版本中,SimOTA被用作标签分配方法。然而,在实践中,我们发现引入SimOTA会减慢训练过程。而且,陷入不稳定的训练也并不罕见。因此,我们渴望有一个替代SimOTA的方法。
任务对齐学习 任务对齐学习(TAL)最早是在TOOD[5]中提出的,其中设计了一个统一的分类分数和预测框质量的指标。IoU被这个度量所取代,用于分配对象标签。在一定程度上,任务(分类和箱体回归)不一致的问题得到了缓解。
TOOD的另一个主要贡献是关于任务对齐的头(T-head)。T-head堆叠卷积层以建立交互式特征,在此基础上使用任务对齐预测器(TAP)。PP-YOLOE[45]改进了T-head,用轻量级的ESE注意力取代了T-head中的层注意力,形成ET-head。然而,我们发现ET-head在我们的模型中会降低推理速度,而且没有准确性的提高。
因此,我们保留了Efficient解耦头的设计。此外,我们观察到TAL比SimOTA能带来更多的性能提升,并且能稳定训练。因此,我们在YOLOv6中采用TAL作为默认的标签分配策略。
物体检测包含两个子任务:分类和定位,对应于两个损失函数:分类损失和回归损失。对于每个子任务,近年来都有各种损失函数出现。在本节中,我们将介绍这些损失函数,并描述我们如何为YOLOv6选择最佳的损失函数。
提高分类器的性能是优化检测器的一个关键部分。Focal Loss[22]修改了传统的交叉熵损失,以解决正负样本之间或难易样本之间类别不平衡的问题。为了解决训练和推理之间质量估计和分类的不一致使用问题,质量Focal Loss(QFL)[20]进一步扩展了Focal Loss,对分类分数和分类监督的定位质量进行联合表示。而VariFocal Loss(VFL)[50]则源于Focal Loss[22],但它对正负样本的处理是不对称的。通过考虑正负样本的不同重要程度,它平衡了来自两个样本的学习信号。Poly Loss[17]将常用的分类损失分解为一系列的加权多项式基数。它在不同的任务和数据集上调整多项式系数,通过实验证明它比交叉熵损失和Focal Loss更好。
我们在YOLOv6上评估了所有这些高级分类损失,最终采用了VFL[50]。
回归损失提供了精确定位box边界的重要学习信号。L1损失是早期工作中最初的回归损失。逐渐地,各种精心设计的回归损失涌现出来,如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]将连续分布的box位置简化为离散的概率分布。它考虑了数据的模糊性和不确定性,而没有引入任何其他强的先验因素,这有助于提高box的定位精度,特别是当ground-truth boxes模糊时。在DFL的基础上,DFLv2[19]开发了一个轻量级的子网络,以利用分布统计和实际定位质量之间的密切关联,这进一步提高了检测性能。然而,DFL通常比一般的目标框回归多输出17倍的回归值,导致了大量的开销。额外的计算成本大大阻碍了小模型的训练。而DFLv2由于有了额外的子网络,进一步增加了计算负担。在我们的实验中,DFLv2在我们的模型上带来了与DFL相似的 在我们的模型上,DFLv2带来的性能增益与DFL相似。因此,我们 只在YOLOv6-M/L中采用DFL。实验细节可以在 可在第3.3.3节中找到。
物体损失最早是在FCOS[41]中提出的,用于降低低质量bounding boxes的得分,以便在后期处理中过滤掉它们。它也被用于YOLOX[7],以加速收敛并提高网络精度。作为一个像FCOS和YOLOX一样的anchor-free框架,我们已经在YOLOv6中尝试了object loss。不太幸运的是,它并没有带来很多好的效果。详细情况在第3节中给出。
下面的技巧是可以在实际操作中使用的。它们并不是为了进行公平的比较,而是在没有太多繁琐努力的情况下稳定地产生性能增益。
经验结果表明,随着训练时间的增加,检测器的性能也在不断进步。我们将训练时间从300 epochs延长到400 epochs,以达到一个 更好的收敛性。
为了进一步提高模型的准确性,同时不引入太多的额外计算成本,我们应用经典的知识蒸馏技术,使教师和学生的预测之间的KL-散度最小。我们把老师限定为学生本身,但进行了预训练,因此我们称之为自我蒸馏。请注意,KL-散度通常被用来衡量数据分布之间的差异。然而,在目标检测中有两个子任务,其中只有分类任务可以直接利用基于KL-散度的知识提炼。由于DFL损失[20]的存在,我们也可以在box回归上执行它。知识提炼损失 可以被表述为:
L KD = KL(p cls t ||p s ) + KL(p t ||p s ),
其中p cls t和p s分别是教师模型和学生模型的班级预测,相应地p reg t和p reg是盒式回归预测。现在,总体损失s函数被表述为:
L total = L det + αL KD ,
其中L det是用预测和标签计算的检测损失。引入超参数α是为了平衡两种损失。在训练的早期阶段,教师的软标签更容易学习。随着训练的继续,学生的表现将与教师相匹配,因此硬标签将更多地帮助学生。在此基础上,我们对α应用余弦权重衰减来动态调整来自硬标签和来自教师的软标签的信息。我们进行了详细的实验来验证YOLOv6的自我蒸馏的效果,这将在第3节讨论。
我们注意到,在评价YOLOv5[10]和YOLOv7[42]的实现中的模型性能时,每个图像周围都有一个半截灰色的边框。虽然没有增加有用的信息,但它有助于检测图像边缘附近的物体。这个技巧也适用于YOLOv6。然而,额外的灰色像素显然会降低推理速度。没有灰色边界,YOLOv6的性能就会下降,这也是[10, 42]的情况。我们推测,这个问题与Mosaic增强中的灰边填充有关[1, 10]。为了验证,我们进行了在最后一个epoch中关闭马赛克增强的实验[7](又称淡化策略)。在这方面,我们改变了灰色边框的面积,并将带有灰色边框的图像直接调整为目标图像的大小。结合这两种策略,我们的模型可以在不降低推理速度的情况下保持甚至提高性能。推理速度。
对于工业部署来说,通常的做法是采用量化来进一步加快运行时间,而不会对性能造成很大影响。训练后量化(PTQ)直接对模型进行量化,只需要一个小的校准集。而量化感知训练(QAT)通过访问训练集来进一步提高性能,通常与蒸馏法联合使用。然而,由于在YOLOv6中大量使用重新参数化块,以前的PTQ技术无法产生高性能,而在训练和推理过程中,当涉及到匹配假量化器时,很难纳入QAT。我们在这里展示了这些缺陷和我们 在部署过程中的补救措施。