1.Introduction
在论文中,作者通过实证观察了几个促使我们重新提供YOLO框架的重要因素: (1)从RepVGG [3]中重新参数化是一种优越的技术,在检测中尚未得到很好的利用。我们还注意到,对RepVGG块进行简单的模型缩放变得不切实际,因此我们认为小型网络和大型网络之间的网络设计的优雅一致性是不必要的。普通单路结构对于小型网络是更好的选择,但对于较大的模型,参数的指数增长和单路结构的计算成本使其不可行;(2)基于再参数化的检测器的量化也需要细致的处理,否则在训练和推理过程中由于其异构配置而难以处理性能下降。 (3)[7,10,42,44]以前的工作往往对部署的关注较少,其延迟通常在像V100这样的高成本机器上进行比较。在真正的服务环境中,存在着硬件差距。通常,像Tesla T4这样的低功耗gpu成本更低,并提供了相当好的推理性能。(4)先进的领域特定策略,如标签分配和损失函数设计,需要进一步验证考虑架构的差异;(5)对于部署,我们可以容忍训练策略的调整,提高精度性能,但不增加推理成本,如知识蒸馏。
考虑到上述的观察结果,我们引入了YOLOv6的诞生,它在准确性和速度方面完成了迄今为止最好的权衡。我们在图1中展示了YOLOv6与其他同行的比较。为了在不降低性能的情况下提高推理速度,我们研究了尖端的量化方法,包括训练后量化(PTQ)和量化感知训练(QAT),并在YOLOv6中适应它们,以实现可部署的网络的目标。
主要贡献如下:
我们为不同场景下的工业应用量定制了一系列不同规模的网络。不同规模的架构有所不同,以实现最佳的速度和准确性的权衡,其中小模型以普通的单路径主干为特征,而大模型建立在高效的多分支块上。
我们对YOLOv6注入了一个自蒸馏策略,同时执行了分类任务和回归任务。同时,我们动态调整来自教师和标签的知识,以帮助学生模型在所有训练阶段更有效地学习知识。
我们广泛地验证了先进的标签分配检测技术、损失函数和数据增强技术,并有选择性地采用它们来进一步提高性能。
我们在重新优化器[2]和通道蒸馏[36]的帮助下改革了定量检测方案,得到了一个不断快速和准确的探测器,COCO AP为43.3%,批量为32的吞吐量为869 FPS。
2. Method
YOLOv6的翻新设计包括以下组件:网络设计、标签分配、损失函数、数据增强、行业方便的改进、量化和部署:
Network Design: Backbone: 与其他主流架构相比,我们发现RepVGG [3]骨干在小型网络中以相似的推理速度具有更多的特征表示能力,而由于参数和计算成本的爆炸性增长,很难进行缩放以获得更大的模型。在这方面,我们将RepBlock [3]作为我们的小型网络的基石。对于大型模型,我们修改了一个更有效的CSP [43]块,名为CSPStackRep Block 。颈部:YOLOv6的颈部在YOLOv4和YOLOv5之后采用PAN拓扑[24]。我们在颈部使用RepBlocks或CSPStackRepBlocks并命名为RepPAN。头:我们简化了头部结构,使其更有效率,称为Effificient Decoupled Head.。
Label Assignment: 我们通过大量实验评估了YOLOv6上标签分配策略[5,7,18,48,51]的最新进展,结果表明TAL [5]更有效,更对训练友好。
Loss Function: 主流无锚目标检测器的损失函数包括分类损失、预测框回归损失和置信度损失。对于每一个损失,我们系统地用所有可用的技术进行实验,最终选择VariFocal Loss[50]作为我们的分类损失,并选择SIoU [8]/GIoU [35]损失作为我们的回归损失。
Industry-handy improvements: 我们引入了额外的常见实践和技巧来提高性能,包括自蒸馏和更多的训练时代。对于自蒸馏,分类和预测框回归分别由教师模型监督。多亏了DFL [20],预测框回归的蒸馏成为可能。此外,通过余弦衰减动态降低软标签和硬标签中的信息比例,有助于学生在训练过程中在不同阶段选择性地获取知识。此外,我们还遇到了在评估时没有添加额外的灰色边界的性能受损的问题,为此我们提供了一些补救措施。
Quantization and deployment: 为了解决对基于再参数化的模型进行量化时的性能下降,我们使用RepOptimizer[2]训练YOLOv6,以获得对PTQ友好的权重。我们进一步采用QAT与通道级蒸馏[36]和图优化,以追求极端的性能。我们的量化的YOLOv6-S达到了42.3%的AP和869 FPS的吞吐量(batch_size=32)。
2.1. Network Design
单阶段物体探测器通常由以下几个部分组成:主干、颈部和头部。主干网主要决定了特征表示能力,而其设计由于计算成本较大,对推理效率的影响很大。颈部用于将低级的物理特征与高级的语义特征进行聚合,然后在所有层次上建立金字塔形特征映射。头部由几个卷积层组成,并根据颈部组装的多层次特征来预测动态检测结果。从结构的角度来看,它可以分为基于锚头和无锚头,或者是参数耦合头和参数解耦头。
在YOLOv6中,基于硬件友好的网络设计[3]的原则,我们提出了两个缩放的可再参数化的骨干和颈,以适应不同大小的模型,以及一个有效的解耦与混合通道策略的头。YOLOv6的整体架构如图2所示。
2.1.1 Backbone
多分支网络[13,14,38,39]通常比单路径网络[15,37]具有更好的分类性能,但它往往伴随着并行性的降低,并导致推理延迟的增加。相反,像VGG [37]这样的普通单路网络具有高并行性和更少的内存占用的优点,从而获得了更高的推理效率。最近在RepVGG [3]中,提出了一种结构重参数化方法,将训练时间的多分支拓扑与推理时间的平面架构解耦,以实现更好的速度精度权衡。
受上述工作的启发,我们设计了一个高效的可重新参数化的骨干,称为EffificientRep。对于小模型,训练阶段骨干的主要成分是RepBlock,如图3 (a).所示在推理阶段,每个RepBlock转换为3×3卷积层(表示为RepConv),具有ReLU激活函数,如图3 (b).所示通常,3×3卷积在主流gpu和cpu上得到了高度优化,并且它具有更高的计算密度。因此,高效的代表骨干网充分利用了硬件的计算能力,从而显著降低了推理延迟,同时提高了表示能力。
然而,随着模型容量的进一步扩大,单路网络中的计算成本和参数数量呈指数级增长。为了更好地实现计算负担和准确性之间的权衡,我们修改了CSPStackRep块来构建中大型网络的主干。如图3 (c)所示,CSPStackRepBlock由三个1×1卷积层和一堆由两个RepVGGBlock[3]或RepConv(分别在训练或推理时)组成,具有残差连接。此外,采用跨阶段部分(CSP)连接,在不增加计算成本的情况下提高性能。
2.1.2 Neck
采用YOLO v4和YOLO v5的PAN结构,将RepBlock(用于小型模型)或CSPStackRep块替换为YOLOv5中使用的CSPBlock),并相应地调整宽度和深度。YOLOv6的颈部被表示为Rep-PAN.。
2.1.3 Head
Effificient decoupled head YOLOv5的检测头是一个耦合头,分类和定位分支共享参数,而FCOS [41]和YOLOX [7]的检测头将两个分支解耦,并在每个分支中额外引入两个3×3卷积层来提高性能。
在YOLOv6中,我们采用了一种混合信道策略来构建一个更有效的解耦头。具体来说,我们将中间的3个×3卷积层的数量减少到只有一个。头部的宽度由主干和颈部的宽度乘数共同缩放。这些修改进一步降低了计算成本,以实现更低的推理延迟。
Anchor-free 无锚定检测器因其更好的泛化能力和解码预测结果的简单性而脱颖而出。其后处理的时间成本大大降低了。无锚点探测器有两种类型的无锚点检测器:基于锚点的[7,41]和基于关键点的[16,46,53]。在YOLOv6中,我们采用了基于锚点的范式,其框回归分支实际上预测了从锚点到边界框四边的距离。
2.2. Label Assignment
标签分配负责在训练阶段为预定义的锚点分配标签。先前的工作提出了各种标签分配策略,从简单的基于iou的策略和内部地面真值方法[41]到其他更复杂的方案[5,7,18,48,51]。
SimOTA OTA [6]认为目标检测中的标签分配是一个最优的传输问题。它从全局的角度为每个地面真实对象定义了正/负的训练样本。SimOTA [7]是OTA [6]的一个简化版本,它减少了额外的超参数并保持了性能。在YOLOv6的早期版本中,使用了SimOTA作为标签分配方法。然而,在实践中,我们发现引入SimOTA会减慢培训过程。而且经常陷入不稳定的训练。因此,我们希望有一个替代SimOTA。
Task alignment learning 任务对齐学习(TAL)首次在TOOD [5]中提出,其中设计了一个统一的分类分数和预测框质量的统一度量。用此度量替换IoU以分配对象标签。在一定程度上,缓解了任务(分类和预测框回归)的错位问题。
TOOD的另一个主要贡献是关于任务状头(T-head)。T-head堆栈卷积层来构建交互式特性,在此之上使用了任务对齐预测器(TAP)。PP-YOLOE [45]用轻量级ESE注意取代T-head的层注意,形成ET-head。然而,我们发现ET-head会恶化我们模型的推理速度,它没有精度增益。因此,我们保留了我们的高效解耦头的设计。
此外,我们观察到TAL比SimOTA带来更多的性能改善,稳定训练。因此,我们在YOLOv6中采用TAL作为默认的标签分配策略。
2.3. Loss Functions
对象检测包含两个子任务:分类和定位,对应于两个损失函数:分类损失和预测框回归损失。对于每个子任务,近年来都有各种不同的损失函数。在本节中,我们将介绍这些损失函数,并描述我们如何为YOLOv6选择最佳的损失函数。
2.3.1 Classifification Loss
提高分类器的性能是优化检测器的关键部分。Focal Loss[22]改进了传统的交叉熵损失,解决了正负样本或硬易样本之间的类不平衡问题。为了解决训练和推理之间质量估计和分类使用不一致的问题,Quality Focal Loss(QFL)[20]进一步扩展了Focal Loss,并将分类评分和定位质量联合表示出来进行分类监督。而VariFocal Loss (VFL)来源于Focal Loss[22],但它不对称地处理正样本和负样本。通过考虑不同重要程度的正样本和负样本,它平衡了来自两个样本的学习信号。Poly Loss[17]将常用的分类损失分解为一系列加权多项式基。它在不同的任务和数据集上调整多项式系数,通过实验证明了其优于交叉熵损失和焦点损失。
我们评估了YOLOv6上的所有这些高级分类损失,并最终采用了VFL [50]。
2.3.2 Box Regression Loss
预测框回归损失提供了重要的学习信号精确的定位边界框。L1损失是早期工作中原始的 预测框回归损失。逐渐地,各种设计良好的 预测框回归损失已经出现,如iou系列损失[8,11,35,47,52,52]和概率损失[20]。
IoU-series Loss IoU损失[47]回归了一个预测框作为一个整体单位的四个边界。由于它与评价度量的一致性,它已被证明是有效的。IoU有许多变体,如GIoU [35]、DIoU [52]、CIoU [52]、α-IoU [11]和SIoU [8]等,形成了相关的损失函数。我们用GIoU、CIoU和SIoU进行了实验。而SIOU应用于YOLOv6-N和YOLOv6-T,而其他的则使用GIoU。
Probability Loss 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
Object loss首先是在FCOS [41]中提出的,以降低质量的边界框的得分,以便在后处理中可以过滤掉它们。它也被用于YOLOX [7]来加速收敛和提高网络精度。作为像FCOS和YOLOX这样的无锚框架,我们尝试在YOLOv6中丢失对象。不幸的是,它并没有带来许多积极的影响。详情见第3节。
2.4. Industry-handy improvements
2.4.1 More training epochs
实验结果表明,训练时间越长,探测器就具有进步的性能。我们将训练从300个epochs延长到400个epochs,以达到更好的收敛性。
2.4.2 Self-distillation
为了进一步提高模型的准确性,同时不引入太多额外的计算成本,我们采用经典的知识蒸馏技术来最小化教师模型和学生模型之间预测的KL散度。我们限制教师模型是预先训练的学生模型,因此我们称之为自我蒸馏。请注意,kl-散度通常用于度量数据分布之间的差异。然而,在目标检测中有两个子任务,其中只有分类任务可以直接利用基于kl-散度的知识精馏。由于DFL损失[20],我们也可以在预测框回归上执行它。知识蒸馏损失可以表述为:
其中和分别为教师模型和学生模型的类别预测,因此
其中,Ldet是用预测和标签计算出的检测损失。引入超参数α来平衡两个损失。在训练的早期阶段,从教师模型那里得到的软标签更容易学习。随着训练的继续,学生模型的表现将与教师模型相匹配,这样硬标签将对学生更有帮助。在此基础上,我们将余弦权值衰减应用于α,以动态调整来自教师的硬标签和软标签的信息。
2.4.3 Gray border of images
我们注意到,在评估YOLOv5 [10]和YOLOv7 [42]实现中的模型性能时,在每个图像周围都设置了一个半步幅的灰色边界。虽然没有添加任何有用的信息,但它有助于检测图像边缘附近的物体。这个技巧也适用于YOLOv6。
然而,额外的灰度像素明显降低了推理速度。如果没有灰色边框,YOLOv6的性能就会恶化,[10,42]也是如此。我们假设该问题与Mosaic augmentation[1,10]中的灰色边界填充有关。实验在关闭mosaic增强在最后的epochs[7](又名。褪色策略)进行验证。在这方面,我们改变了灰度边界的面积,并将具有灰度边界的图像的大小直接调整为目标图像的大小。结合这两种策略,我们的模型可以保持甚至提高性能,而不降低推理速度。
2.5. Quantization and Deployment
对于工业部署,通常的做法是采用量化以进一步加快运行时,而不会影响太多性能。训练后量化(PTQ)直接用一个小的校准集对模型进行量化。而量化感知训练(QAT)进一步提高了对训练集的访问的性能,这通常与蒸馏联合使用。然而,由于在YOLOv6中大量使用重新参数化块,以前的PTQ技术不能产生高性能,而在训练和推理过程中匹配假量化器时,很难合并QAT。我们在这里展示了在部署期间的陷阱和我们的解决方法。
2.5.1 Reparameterizing Optimizer
RepOptimizer[2]在每个优化步骤中提出梯度重新参数化。该技术也能很好地解决了基于再参数化的模型的量化问题。因此,我们以这种方式重建了YOLOv6的重新参数化块,并使用重新优化器对其进行训练,以获得对PTQ友好的权值。特征图的分布很窄(如图4,B.1),这大大有利于量化过程,结果见第3.5.1节。
2.5.2 Sensitivity Analysis
我们通过将量化敏感操作部分转换为浮点计算,进一步提高了PTQ的性能。为了获得灵敏度分布,我们常用了几个指标,即均方误差(MSE)、信噪比(SNR)和余弦相似度。通常,为了进行比较,可以选择输出特征映射(在激活某一层之后)来计算有量化和没有量化的这些度量。作为一种替代方法,它也可以通过开关特定层[29]的量化来计算验证AP。
我们在使用重新优化器训练的YOLOv6-S模型上计算所有这些指标,并选择前6个敏感层,以浮动形式运行。敏感性分析的完整图表见B.2。
2.5.3 Quantization-aware Training with Channel-wise Distillation
在PTQ不足的情况下,我们建议涉及量化感知训练(QAT)来提高量化性能。为了解决在训练和推理过程中假量化器的不一致性问题,有必要在重新优化器上建立QAT。此外,在YOLOv6框架内采用了通道蒸馏[36](后来称为CW蒸馏),如图5所示。这也是一种自蒸馏的方法,其中教师网络是在fp32精度上的学生模型。参见第3.5.1节中的实验。
3. Experiments
3.1. Implementation Details
采用YOLO v5相同的设置
3.2. Comparisons
将YOLOv6与其他最先进的YOLO系列探测器进行了比较
3.3. Ablation Study
3.3.1 Network
Backbone and neck 我们探讨了单支结构和多分支结构对backbone和neck的影响,以及CSPStackRepBlock的通道系数。本部分中描述的所有模型都采用TAL作为标签分配策略,VFL作为分类损失,在DFL下的GIoU作为回归损失。结果如表2所示。我们发现,对于不同大小的模型,最优的网络结构应该提出不同的解决方案。
对于YOLOv6-N,单路结构在精度和速度方面都优于多分支结构。尽管单路径结构比多分支结构具有更多的flop和参数,但由于相对较低的内存占用和较高程度的并行性,它可以运行得更快。对于YOLOv6-S,这两种块风格带来了相似的性能。对于较大的模型,多分支结构在精度和速度上都具有更好的性能。最后,我们选择了YOLOv6-M的信道系数为2/3,YOLOv6-L的信道系数为1/2的多分支。
此外,我们还进一步验证了RepConv/普通卷积(记为Conv)和ReLU/SiLU/LReLU组合在不同大小的网络中的有效性,以实现更好的权衡。如表4所示,与SiLU的Conv的精度最好,而RepConv和ReLU的组合实现更好的权衡。我们建议用户在延迟敏感应用程序中使用ReLU的RepConv。我们选择在YOLOv6-N/T/S/M中使用RepConv/ReLU组合来获得更高的推理速度,并在大型模型YOLOv6-L中使用Conv/SiLU组合来加速训练和提高性能。
Miscellaneous design 我们还在YOLOv6-N的基础上,对第2.1节中提到的其他网络部分进行了一系列的消融处理。我们选择YOLOv5-N作为基线,并逐步添加其他组件。结果如表5所示。首先,使用解耦头(表示为DH),我们的模型的精度提高了1.4%,时间成本增加了5%。其次,我们验证了无锚定范式比基于锚定的锚定范式快51%,这导致输出的维数更低。此外,对主干(EffificientRep Backbone) 和颈部(Rep-PAN neck),的统一修改,表示为EB+RN,AP改善3.6%,运行速度快21%。最后,优化后的解耦磁头(混合通道,HC)在精度和速度上分别提高了0.2%的AP和6.8%的FPS。
3.3.2 Label Assignment
在表6中,我们分析了主流标签分配策略的有效性。在YOLOv6- N上进行了实验。正如预期的那样,我们观察到SimOTA和TAL是最好的两种策略。与ATSS相比,SimOTA可以提高AP2.0%,TALSimOTA的AP高0.5%。考虑到TAL的稳定训练和更好的准确性性能,我们采用TAL作为我们的标签分配策略。
此外,TOOD [5]的实施在早期训练时期采用ATSS [51]作为warm-up标签分配策略。我们也保留了warm-up策略,并对此进行了进一步的探索。细节如表7所示,我们可以发现,如果没有warm-up或通过其他策略(即SimOTA)进行热身,它也可以达到类似的性能。
3.3.3 Loss functions
在目标检测框架中,损失函数由分类损失、预测框回归损失和可选对象损失组成,可以表述为:
其中,Lcls、Lreg和Lobj分别为分类损失、回归损失和目标损失。λ和µ都是超参数。
在本小节中,我们评估YOLOv6上的每个损失函数。除非另有说明,YOLOv6-N、YOLOv6-S和YOLOv6-M的基线分别为35.0%、42.9%和48.0%的TAL、Focal损失和GIoU损失训练。
Classifification 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作为分类损失函数。
Regression Loss 在YOLOv6-N/S/M上实验了iou系列损失和概率损失函数。
YOLOv6的N/S/M损耗。表9中的实验结果显示,在YOLOv6-N和YOLOv6-T上的SIoU损失优于其他损失,而CIoU损失在YOLOv6-M上的表现更好。
对于概率损失,如表10所示,引入DFL可以分别获得YOLOv6-N/S/M的0.2%/0.1%/0.2%性能增益。然而,对小模型的推理速度影响很大。因此,DFL只在YOLOv6-M/L中引入。
Object Loss 使用YOLOv6也进行了Object Loss 实验,如表11所示。从表11可以看出,目标损失对YOLOv6-N/S/M网络有负面影响,其中YOLOv6-N的最大下降幅度为1.1% AP。负增益可能来自于TAL中对象分支和其他两个分支之间的冲突。具体来说,在训练阶段,使用预测框和地面真实框之间的IoU以及分类分数来联合建立一个度量作为分配标签的标准。然而,引入的对象分支将要对齐的任务数量从2扩展到3,这显然增加了难度。根据实验结果和分析,在YOLOv6中丢弃物体损失。
3.4. Industry-handy improvements
More training epochs 在实践中,更多的训练时代是进一步提高准确性的一种简单而有效的方法。我们的小模型训练了300和400个时代的结果如表12所示。我们观察到,YOLOv6-N、T、S在较长时期的训练中,使AP分别提高了0.4%、0.6%和0.5%。考虑到可接受的成本和产生的增益,这表明400个时代的训练对于YOLOv6是一个更好的收敛方案。
Self-distillation 我们在YOLOv6- L上进行了详细的实验来验证所提出的自蒸馏方法。如表13所示,仅在分类分支上应用自蒸馏可以提高0.4%的AP。此外,我们简单地在预测框回归任务上执行自蒸馏,使AP增加0.3%。权重衰减的引入使模型提高了0.6%的AP。
Gray border of images 在第2.4.3节中,我们引入了一种策略来解决没有额外灰度边界的性能退化问题。实验结果如表14所示。在这些实验中,YOLOv6-N和YOLOv6-S进行了400个时代训练,YOLOv6-M进行了300个训练。可以观察到,YOLOv6-N/S/M的精度当不采用采用Mosaic增强时(在去除灰色边界),性能下降了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的最终性能更准确,最终图像尺寸从672减少到640。
3.5. Quantization Results
我们以YOLOv6-S为例,验证了我们的量化方法。下面的实验是在这两个版本上进行的。基线模型被训练了300个epochs。
3.5.1 PTQ
当使用RepOptimizer训练模型时,平均性能显著提高,见表15。RepOptimizer通常更快,几乎相同。
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。
文章出处登录后可见!