YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications(2022.9)



原文地址
源代码

Abstract

多年来,YOLO系列实际上已成为高效目标检测的行业标准。YOLO社区蓬勃发展,丰富了其在众多硬件平台和丰富场景中的使用

在这份技术报告中,我们努力将其极限推向一个新的水平,以坚定不移的心态为行业应用向前迈进。考虑到现实环境中对速度和准确性的不同要求,我们广泛研究了来自工业界或学术界的最新目标检测进展。具体来说,我们大量吸收了最近网络设计、训练策略、测试技术、量化和优化方法的思想

在此基础上,我们整合了我们的思想和实践,构建了一套部署就绪的网络,以适应各种规模的用例。在YOLO作者的慷慨许可下,我们将其命名为YOLOv6

我们的YOLOv6-N在COCO数据集上以1234 FPS的吞吐量在NVIDIA Tesla T4 GPU上达到35.9%的AP。YOLOv6-S以495 FPS的速度达到43.5%的AP,优于同等规模的其他主流探测器(YOLOv6-S, yoloox - s和PPYOLOE-S)。我们的全化版YOLOv6-S甚至带来了最先进的43.3% AP和869 FPS。此外,YOLOv6-M/L在推理速度相似的情况下,也取得了比其他检测器更好的准确率(49.5%/52.3%)。我们仔细地进行了实验,以验证每个成分的有效性

1.Introduction

以前的工作

YOLO系列已成为工业应用中最流行的检测框架,因为它在速度和精度之间取得了良好的平衡
YOLO系列的先驱作品是YOLOv1-3,在后续的实质性改进中开辟了一阶段检测器的新道路
YOLOv4将检测框架重组为几个独立的部分(骨干,颈部和头部),并在当时验证了bag-of-freebies和bag-of-specials,以设计适合在单个GPU上训练的框架
目前,YOLOv5 , YOLOX , PPYOLOE和YOLOv7都是高效探测器的竞争候选人,不同尺寸的模型通常通过缩放技术获得

存在的问题

在本报告中,我们从经验上观察到促使我们更新YOLO框架的几个重要因素:
(1)来自RepVGG的重新参数化是一种尚未在检测中得到很好利用的优越技术。我们还注意到,对于RepVGG块,简单的模型缩放变得不切实际,因此我们认为小型和大型网络之间的网络设计的优雅一致性是不必要的,对于小型网络,简单的单路径架构是更好的选择,但对于大型模型,单路径架构的参数和计算成本的指数增长使其不可行

(2)基于重参数化的检测器的量化也需要细致的处理,否则在训练和推理过程中由于其异构配置而导致的性能下降将难以处理

(3)以前的工作往往不太关注部署,其延迟通常在V100等高成本机器上进行比较。当涉及到真正的服务环境时,存在硬件差距。通常,像Tesla T4这样的低功耗gpu成本更低,并且提供相当好的推理性能

(4)考虑到体系结构的差异性,标签分配和损失函数设计等高级领域特定策略需要进一步验证

(5)对于部署,我们可以容忍训练策略的调整,以提高精度性能,但不增加推理成本,例如知识蒸馏

解决

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

YOLOv6的主要方面总结如下

  1. 我们重新设计了一系列不同规模的网络,为不同场景的工业应用量身定制不同规模的架构不同,以实现最佳的速度和精度权衡,其中小模型具有简单的单路径主干,而大模型构建在高效的多分支块上
  2. 我们在YOLOv6中注入了一种自蒸馏策略,同时执行分类任务和回归任务。同时,我们动态调整来自老师和标签的知识,帮助学生模型在所有训练阶段更有效地学习知识
  3. 我们广泛地验证了标签分配、损失函数和数据增强技术的先进检测技术,并有选择地采用它们来进一步提高性能
  4. 我们在RepOptimizer和channel-wise蒸馏的帮助下,对检测的量化方案进行了改革,这使得检测器具有43.3%的COCO AP和869 FPS的吞吐量,批量大小为32

2.Method

YOLOv6的重新设计包括以下部分:网络设计、标签分配、损失函数、数据增强、行业方便的改进以及量化和部署
Network Design:
Backbone:与其他主流架构相比,我们发现在相似的推理速度下,RepVGG骨干网在小型网络中具有更强的特征表示能力,但由于参数和计算成本的爆炸式增长,它很难扩展到更大的模型。在这方面,我们将RepBlock作为我们小型网络的构建块对于大型模型,我们修改了一个更有效的CSP块,命名为CSPStackRep块
Neck:YOLOv6的颈部遵循YOLOv4和YOLOv5,采用PAN拓扑,我们用RepBlocks或CSPStackRep Blocks增强颈部,使其具有Rep-PAN
Head:我们简化了解耦头,使其更高效,称为高效解耦头

Label Assignment:我们通过大量实验评估了YOLOv6上标签分配策略的最新进展,结果表明TAL更有效,更适合训练

Loss Function:主流无锚目标检测器的损失函数中包含分类损失,盒回归损失和对象损失。对于每一种损失,我们系统地用所有可用的技术进行实验,最终选择VariFocal loss作为我们的分类损失,SIoU /GIoU loss作为我们的回归损失

Industry-handy improvements: 我们介绍了额外的常见做法和技巧,以提高性能,包括自蒸馏和更多的训练epoch

Quantization and deployment:为了解决量化重参数化模型的性能下降问题,我们使用RepOpti- mizer训练YOLOv6以获得PTQ友好权值,然后,我们采用QAT与通道式蒸馏和图形优化来追求极致的性能。我们量化的YOLOv6-S达到了42.3% AP和869 FPS吞吐量(批大小=32)的新水平

2.1.Network Design

单阶段目标探测器一般由以下部分组成:骨干、颈部和头部。骨干结构主要决定特征表示能力,同时骨干结构的设计对推理效率有着关键的影响,骨干结构承载着很大一部分的计算成本利用颈部将低层次的物理特征与高层次的语义特征聚合在一起,构建各层次的金字塔特征图头部由多个卷积层组成,并根据颈部组合的多层次特征预测最终检测结果。从结构的角度来看,它可以分为基于锚的和无锚的,或者更确切地说,是参数耦合的头和参数解耦的头

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

YOLOv6框架(N和S所示),注意对于M/L, RepBlocks被替换为CSPStackRep

2.1.1 Backbone

如上所述,骨干网的设计对检测模型的有效性和效率有很大的影响先前已有研究表明,多分支网络通常比单路径网络可以获得更好的分类性能,但往往伴随着并行性的降低和推理延迟的增加。相反,像VGG这样的普通单路径网络具有高并行性和较少内存占用的优点,从而获得更高的推理效率
最近,在RepVGG中提出了一种结构重参数化方法,将训练时间的多分支拓扑与推理时间的平面结构解耦,以达到更好的速度和精度权衡
受上述工作的启发,我们设计了一个高效的可重新参数化的主干,称为EfficientRep
对于小型模型,在训练阶段,主干的主要组成部分是Rep- Block,如图3 (a)所示。在推理阶段,每个RepBlock被转换为具有ReLU激活函数的3× 3卷积层(表示为RepConv)堆栈,如图3 (b)所示。通常a 3×3convolution在主流gpu和cpu上进行了高度优化,具有更高的计算密度,因此,EffentRep Backbone充分利用了硬件的计算能力,在显著降低推理延迟的同时增强了表示能力

(a) RepBlock由一堆RepVGG块组成,在训练时具有ReLU激活。(b)在推断时间内,RepVGG块被转换为RepConv
© CSPStackRep Block包括三个1×1convolutional层和一堆双RepConvs子块,这些子块跟随ReLU激活并带有残留连接

然而,我们注意到,随着模型容量的进一步扩大,单路径平面网络的计算成本和参数数量呈指数增长。为了在计算负担和精度之间实现更好的权衡,我们修改了CSPStackRep块来构建大中型网络的骨干。如图3 ©所示,CSPStackRep Block由三个1×1卷积层和一堆子块组成,子块由两个RepVGG块或RepConv(分别在训练或推断时)组成,并具有残差连接。此外,采用了跨级部分(CSP)连接,在不增加计算成本的情况下提高了性能。与CSPRepResStage相比,它具有更简洁的前景,并考虑了准确性和速度之间的平衡

2.1.2 Neck

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

2.1.3 Head

Efficient decoupled head:YOLOv5的检测头是一个在分类和定位分支之间共享参数的耦合头,而FCOS[41]和YOLOX[7]的检测头对两个分支进行解耦,并且在每个分支中额外引入两个3×3convolutional层以提高性能
在YOLOv6中,我们采用混合信道策略来构建更高效的解耦头。具体来说,我们将中间3×3convolutional层的数量减少到只有一个,头部的宽度由脊柱和颈部的宽度乘数共同缩放。这些修改进一步降低了计算成本,以实现更低的推理延迟

Anchor-free:无锚点检测器以其较好的泛化能力和简单的译码预测结果而脱颖而出,其后处理的时间成本大大减少。无锚点检测器有两种类型:基于锚点的和基于关键点的。在YOLOv6中,我们采用基于锚点的范式,其盒回归分支实际上预测了锚点到边界框四面的距离

2.2. Label Assignment

标签分配负责在训练阶段将标签分配给预定义的anchor
SimOTAOTA认为目标检测中的标签分配是一个最优传输问题。它从全局角度定义了每个ground-truth对象的正/负训练样本SimOTA是OTA的简化版本,它减少了额外的超参数并保持了性能
在实践中,我们发现引入SimOTA会减慢训练过程,而且陷入不稳定训练的情况并不少见。因此,我们需要一个SimOTA的替代品

Task alignment learning:
任务对齐学习(Task Alignment Learning, TAL)在2010年首次提出,其中设计了分类分数和预测盒质量的统一度量IoU被这个度量代替,用来分配对象标签,在一定程度上缓解了任务(分类和盒回归)不对齐的问题
Tood的另一个主要贡献是关于任务对齐头(T-head)。t头堆叠卷积层来构建交互特征,在其上使用任务对齐预测器(TAP)。PP-YOLOE改善t型头将t型头中的分层注意替换为轻量的ESE注意,形成et型头。然而,我们发现ET-head会降低模型的推理速度,并且没有精度增益。因此,我们保留了高效解耦头的设计

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

2.3. Loss Functions

目标检测包含分类和定位两个子任务,分别对应分类损失和盒回归损失两个损失函数

2.3.1 Classification Loss

提高分类器的性能是优化检测器的关键部分
焦点损失[22]对传统的交叉熵损失进行了改进,解决了正样本与负样本、难样本与易样本之间的类不平衡问题
为了解决训练和推理在质量估计和分类中使用不一致的问题质量焦点损失(quality Focal Loss, QFL)[20]进一步扩展了焦点损失,将分类分数和定位质量联合表示用于分类中的监督。

VariFocal Loss (VFL)[50]来源于Focal Loss[22],但它对阳性和阴性样本的处理是不对称的。通过考虑不同重要程度的正样本和负样本,它平衡了两个样本的学习信号
Poly Loss[17]将常用的分类损失分解为一系列加权多项式基。通过实验证明,该方法可以在不同的任务和数据集上调整多项式系数,优于交叉熵损失和焦点损失
我们在YOLOv6上评估所有这些高级分类损失,最终采用VFL

2.3.2 Box Regression Loss

盒回归损失为精确定位边界盒提供了重要的学习信号。L1损失为早期作品中原始的盒回归损失。各种设计良好的箱形回归损失逐渐涌现,如IoU-series损失[8,11,35,47,52,52]和概率损失
IoU-series Loss:IoU损失[47]将预测框的四个边界作为一个整体进行回归。该方法与评价指标一致,证明了其有效性。IoU有多种变体,如GIoU[35]、DIoU[52]、CIoU[52]、α-IoU[11]、SIoU[8]等,形成相应的损失函数。在这项工作中,我们对GIoU, CIoU和SIoU进行了实验。YOLOv6-N和YOLOv6-T使用SIoU,其他使用GIoU

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

2.3.3 Object Loss

在FCOS[41]中首次提出了目标损失,以降低低质量边界框的分数,以便在后处理中过滤掉它们。它也被用于YOLOX,以加速收敛和提高网络精度。作为像FCOS和YOLOX一样的无锚框架,我们在YOLOv6中尝试了对象损失,它并没有带来很多积极的影响

2.4.Industry-handy improvements

下面的技巧是可以在实际练习中使用的,它们的目的不是为了公平的比较,而是稳定地产生性能提高,而不需要太多乏味的努力

2.4.1 More training epochs

实验结果表明,随着训练时间的增加,检测器的性能逐渐提高。我们将训练时间从300次延长到400次,以达到更好的收敛性

2.4.2 Self-distillation

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

其中PCLSTPCLS分别为教师模型和学生模型的班级预测,pregt和pregs分别为箱回归预测

整体损失函数现表示为

其中Ldet是用预测和标签计算的检测损失。引入超参数α来平衡两种损失

2.4.3 Gray border of images

我们注意到在评估YOLOv5[10]和YOLOv7[42]实现中的模型性能时,每个图像周围都放置了半步灰色边界。虽然没有添加有用的信息,但它有助于检测图像边缘附近的物体。这个技巧也适用于YOLOv6
然而,多余的灰度像素明显降低了推理速度没有灰色边界,YOLOv6的性能会下降,文献[10,42]也是如此
我们假设这个问题与mosaic增强中的灰色边界填充有关[1,10]。在最后时期关闭mosaic增强的实验b7进行验证。在这方面,我们改变灰色边缘的面积,并将灰色边缘的图像直接调整为目标图像大小
结合这两种策略,我们的模型可以在不降低推理速度的情况下保持甚至提高性能

2.5. Quantization and Deployment

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

2.5.1 Reparameterizing Optimizer

RepOptimizer[2]在每个优化步骤中提出梯度重新参数化,该技术还很好地解决了基于重参数化的模型的量化问题。因此,我们以这种方式重构YOLOv6的重参数化块,并使用RepOptimizer对其进行训练,以获得ptq友好的权重。feature map的分布被大大缩小(如图4,详见B.1),极大地有利于量化过程

2.5.2 Sensitivity Analysis

通过将量化敏感运算部分转换为浮点运算,进一步提高了PTQ性能。为了获得灵敏度分布,常用的指标有均方误差(MSE)、信噪比(SNR)和余弦相似度。通常,为了进行比较,可以选择输出特征映射(在激活某一层之后)来计算这些量化和不量化的度量

2.5.3 Quantization-aware Training with Channel-wise Distillation

在PTQ不足的情况下,我们建议加入量化感知训练(QAT)来提高量化性能。为了解决伪量化器在训练和推理过程中的不一致性问题,有必要在RepOptimizer上构建QAT。此外,在YOLOv6框架内调整了通道式蒸馏36,如图5所示。这也是一种自蒸馏方法,其中教师网络是fp32精度的学生本身

Experiments

我们使用与YOLOv5[10]相同的优化器和学习计划,即随机梯度下降(SGD),具有动量和余弦衰减的学习率。warmup,分组权重衰减策略和指数移动平均(EMA)也被使用。我们在[1,7,10]之后采用了两种强数据增强(Mosaic[1,10]和Mixup[49])

Conclusion

简而言之,考虑到持续的工业要求,我们提出了YOLOv6的当前形式,仔细检查了最新目标探测器组件的所有进步,同时灌输了我们的想法和实践。结果在准确性和速度上都超过了其他可用的实时检测器。为了方便工业部署,我们还为YOLOv6提供了定制的量化方法,提供了一个开箱即出的快速检测器

Appendix

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值