YOLOv6:一种用于工业应用的单级目标检测框架
吸收了最近网络设计、训练策略、测试技术、量化和优化方法的思想。 构建一套不同规模的可部署网络,以适应多样化的用例。
我们的量化版本的YOLOv6-S甚至达到869fps时AP43.3%。
(1)RepVGG[3]的重新参数化未能充分利用,小型网络,普通单路径架构是更好的选择,但对于大型模型,参数的指数增长和单路径架构的计算成本使其不可行。
(2)基于再参数化的检测器的量化也需要细致的处理,否则,由于其在训练和推理期间的异构配置,很难处理性能退化。 (3)在低功耗T4 GPU上测试推理性能。 (4)先进的特定领域策略,如标签分配和损失函数设计,需要考虑架构差异进行进一步验证; (5)对于部署,我们可以容忍训练策略的调整,以提高准确性性能,但不增加推理成本,如知识蒸馏
研究了前沿量化方法,包括训练后量化(PTQ)和量化感知训练(QA T),并将其纳入YOLOV 6中,以实现部署就绪网络的目标。
主要工作
- 我们为不同场景中的工业应用量身定制了一系列不同规模的网络。不同规模的架构各不相同,以实现最佳的速度和精度权衡,其中小型模型采用简单的单路径主干,大型模型构建在高效的多分支块上。
- 我们给YOLOv6注入了自蒸馏策略,在分类任务和回归任务中都执行了。同时,我们动态调整来自教师和标签的知识,以帮助学生在所有培训阶段更有效地学习知识
- 我们广泛验证了标签分配、丢失函数和数据增强技术的先进检测技术,并有选择地采用它们以进一步提高性能。
- 我们在RepOptimizer[2]和通道蒸馏[36]的帮助下,对检测的量化方案进行了改革,这导致了一个具有43.3%COCO AP和869fps吞吐量的快速准确检测器,批量大小为32。
方法
YOLOv6的更新设计包括以下组件:网络设计、标签分配、丢失功能、数据增强、工业便利改进以及量化和部署:
骨干网络:RepVGG[3]主干网在小型网络中以类似的推理速度配备了更多的特征表示能力,但由于参数和计算成本的爆炸性增长,它很难缩放以获得更大的模型。 我们将RepBlock[3]作为小型网络的构建块。对于大型模型,我们修改了更有效的CSP[43]块,称为CSPStackRep块。
颈部:YOLOv6的颈部采用了跟随YOLOv4和YOLOv5的PAN拓扑[24]。我们使用RepBlocks或CSPStackRep块来增强颈部,使其具有RepPAN。
头部:我们简化了去耦头部,使其更高效,称为高效去耦头部Efficient Decoupled Head。
标签分配:我们通过大量实验评估了YOLOv6上标签分配策略[5,7,18,48,51]的最新进展,结果表明TAL[5]更有效,更便于训练。
损失函数:主流无锚目标检测器的损失函数包含分类损失, 盒回归损失和对象损失。对于每个损失,我们使用所有可用的技术进行了系统的实验,最后选择varifocal损失[50]作为我们的分类损失,选择SIoU[8]/GIoU[35]损失作为我们的回归损失。
工业便利的改进:我们介绍了其他常见做法和技巧,以提高性能,包括自蒸馏和更多的训练周期。 对于自蒸馏,分类和盒回归分别由教师模型监督。由于DFL[20],箱回归的蒸馏成为可能。 此外,软标签和硬标签的信息比例通过余弦衰减动态下降,这有助于学生在培训过程中的不同阶段选择性地获取知识。 此外,我们遇到了性能受损的问题,在评估时没有添加额外的灰色边界,为此我们提供了一些补救措施。
量化和部署:为了解决量化重参数化模型的性能下降,我们使用RepOpti- mizer[2]训练YOLOv6,以获得PTQ友好权重。我们进一步采用QA T和通道蒸馏[36]以及图优化来追求极端性能。我们的量化YOLOv6-S达到了42.3%的AP和869 FPS的吞吐量(批量大小=32)的新技术水平。
网络设计
主干主要决定特征表示能力,同时,其设计对推理效率有着至关重要的影响,因为它承担了大量的计算成本。
颈部用于将低层物理特征与高层语义特征聚合,然后在各级建立金字塔特征图。
头部由多个卷积层组成,并根据颈部组装的多级特征预测最终检测结果。
backbone
主干网络的设计对检测模型的有效性和效率有很大影响。
已经证明多分支网络[13、14、38、39]通常可以比单路径网络[15、37]实现更好的分类性能,但通常会降低并行性,并导致推理延迟增加。相反,像VGG[37]这样的普通单路径网络利用了高并行性和较少内存占用的优势,从而提高了推理效率。最近在RepVGG[3]中,提出了一种结构重新参数化方法,将训练时间多分支拓扑与推理时间平面结构解耦,以实现更好的速度-精度权衡。
此外,我们将YOLOv5中使用的CSPBlock替换为RepBlock(适用于小型模型)或CSPStackRep Block(用于大型模型),并相应调整宽度和深度。
受上述工作的启发,我们设计了一种高效的可重新参数化主干,称为高效主干。对于小型模型,主干的主要组成部分是训练阶段的RepBlock,如图3(a)所示。并且在推理阶段,每个RepBlock被转换为具有ReLU激活函数的3×3卷积层的堆叠(表示为RepConv),如图3(b)所示。通常,3×3卷积在主流GPU和CPU上高度优化,并且具有更高的计算密度。
高效的主干网充分利用了硬件计算能力
(a) RepBlock由一堆RepVGG块组成,在训练时具有ReLU激活。(b) 在推理期间,RepVGG块被转换为RepConv。(c) CSPStackRep块包括三个1×1卷积层和一个具有剩余连接的ReLU激活后的双Repconv子块堆栈
然而,我们注意到,随着模型容量的进一步扩展,单路径平面网络的计算成本和参数数量呈指数增长。为了更好地平衡计算负担和准确性,我们修改了CSPStackRep块以构建中大型网络的主干。如图3(c)所示,CSPStackRep块由三个1×1卷积层和由两个具有剩余连接的RepVGG块[3]或RepConv(分别在训练或推理时)组成的子块堆栈组成。此外,采用了跨级部分连接(CSP)来提高性能,而不需要过多的计算成本。与CSPRESSTAGE[45]相比,它具有更简洁的外观,并考虑了准确性和速度之间的平衡。
neck
在实践中,多尺度的特征整合已被证明是目标检测的关键和有效部分[9、21、24、40]。我们采用来自YOLOv4[1]和YOLOv5[10]的改进的PAN拓扑[24]作为我们检测颈的基础。YOLOv6的颈部表示为Rep PAN
Head
YOLOv5的检测头是一个耦合头,在分类和定位分支之间共享参数 FCOS[41]和YOLOX[7]中的对应部分将两个分支解耦,并在每个分支中引入另外两个3×3卷积层以提高性能。
在YOLOv6中,我们采用了一种混合信道策略,以构建更高效的去耦头。具体而言,我们将中间3×3卷积层的数量减少到只有一个。头部的宽度由骨干和颈部的宽度乘数共同缩放。这些修改进一步降低了计算成本,以实现更低的推断延迟。
anchor free 无锚点方法泛化能力更强,解码更简单。后处理耗时更少。
标签分配
TAL替换simOTA
标签分配负责在训练阶段将标签分配给预定义锚。先前的工作已经提出了各种标签分配策略,从简单的基于IoU的策略和gt方法[41]到其他更复杂的方案[5、7、18、48,51].
OTA[6]将目标检测中的标签分配视为最佳传输问题。它从全局角度定义了每个GT对象的正/负训练样本。SimOTA[7]是OTA[6]的简化版本,它减少了额外的超参数并保持了性能。在YOLOv6的早期版本中,SimOTA被用作标签分配方法。然而,在实践中,我们发现引入SimOTA会减慢训练过程。而且,陷入不稳定训练的情况并不罕见。因此,我们希望更换simOTA。
任务对齐学习(TAL)首先在TOOD[5]中提出,其中设计了分类分数和预测框质量的统一度量。IoU被该度量替换以分配对象标签。在一定程度上,任务(分类和盒回归)的错位问题得到了缓解。
IoU被该度量替换以分配对象标签。在一定程度上,任务(分类和盒回归)的错位问题得到了缓解。 TOOD的另一个主要贡献是关于任务对齐头(T头)。T-head堆叠卷积层以构建交互特征,在其上使用任务对齐预测器(TAP)。
PP-YOLOE[45]通过用轻质ESE注意力代替T型头部中的层注意力,从而改进了ET头部。然而,我们发现ET头会降低
我们模型中的推理速度,并且不会带来精度增益。因此,我们保留了高效去耦头的设计。此外,我们观察到TAL比SimOTA能带来更多的性能改进,并稳定培训。
因此,我们采用TAL作为YOLOv6中的默认标签分配策略
损失函数
分类损失
为VFL
box损失
盒回归损失为精确定位边界盒提供了重要的学习信号。L1损失是早期工作中的原始盒回归损失。逐渐地,各种精心设计的盒回归损失如IoU系列损失[8,11,35,47,52,52]和概率损失[20]如雨后春笋般涌现。
IoU损失
IoU损失[47]将预测框的四个边界作为一个整体单位进行回归。由于其与评价指标的一致性,已被证明是有效的。IoU有许多变体,如GIoU[35]、DIoU[52]、CIoU[53]、α-IoU[11]和SIoU[8]等,形成相关损失函数。在这项工作中,我们对GIoU、CIoU和SIoU进行了实验。SIoU应用于YOLOv6-N和YOLOV 6-T,而其他使用GIoU。
概率损失
分布焦损(DFL)[20]将盒子位置的基本连续分布简化为离散化概率分布。它考虑了数据中的模糊性和不确定性,而不引入任何其他强先验,这有助于提高盒定位精度,特别是当地面真值盒的边界模糊时。基于DFL,DFLv2[19]开发了一个轻量级子网络,以利用分布统计和实际定位质量之间的密切相关性,进一步提高检测性能。然而,DFL通常输出比一般盒回归多17倍的回归值,导致大量开销。额外的计算成本显著阻碍了小模型的训练。而DFLv2由于额外的子网络而进一步增加了计算负担。在我们的实验中,DFLv2在我们的模型上带来了与DFL类似的性能增益。因此,我们仅在YOLOv6-M/L中采用DFL。实验详情见第3.3.3节。
FCOS[41]中首次提出了 Object loss,以降低低质量边界框的分数,以便在后处理中过滤掉它们。在YOLOX[7]中也使用了它来加速收敛并提高网络精度。作为一个像FCOS和YOLOX这样的无锚框架,我们尝试将其引入YOLOv6。不幸的是,它没有带来很多积极的效果。详情见第3节。
下面的技巧可以在实际实践中使用。它们不是为了进行公平的比较,而是在没有太多繁琐的工作的情况下稳定地产生性能增益。
更多的迭代次数 自蒸馏 为了进一步提高模型精度,同时不引入额外的计算成本,我们应用了经典的知识蒸馏技术,以最小化教师和学生预测之间的KL差异。我们将教师限制为学生本身,但事先培训过,因此我们称之为自我升华。注意,KL散度通常用于测量数据分布之间的差异。然而,在目标检测中有两个子任务,其中只有分类任务可以直接利用基于KL散度的知识提取。由于DFL损失[20],我们也可以在盒回归中执行。然后,知识蒸馏损失可以公式化为: 其中,pclst和pclss分别是教师模型和学生模型的cls预测,因此,ptreg 和psreg是盒回归预测。总体损失函数现在公式化为:
其中Ldet是使用预测和标签计算的检测损耗。引入超参数α来平衡两个损失。在训练的早期阶段,教师的软标签更容易学习。随着训练的继续,学生的表现将与老师相匹配,因此硬标签将帮助学生更多。 在此基础上,我们将余弦权重衰减应用于α,以动态调整来自硬标签和来自教师的软标签的信息。我们进行了详细的实验,以验证自蒸馏对YOLOv6的影响,这将在第3节中讨论。
灰色边界
我们注意到,在评估YOLOv5[10]和YOLOv7[42]实现中的模型性能时,在每个图像周围放置了半步灰色边界。虽然没有添加有用的信息,但它有助于检测图像边缘附近的对象。这种技巧也适用于YOLOv6。然而,额外的灰度像素明显降低了推理速度。如果没有灰色边界,YOLOv6的性能会恶化,这也是[10,42]中的情况。我们假设该问题与马赛克增强中的灰色边界填充有关[1,10]。为了验证,进行了在最后一个时期关闭马赛克增强的实验[7](又名衰落策略)。在这方面,我们改变了灰度边界的面积,并将具有灰度边界的图像直接调整为目标图像大小。结合这两种策略,我们的模型可以在不降低推理速度的情况下保持甚至提高性能。
对于工业部署,通常采用量化来进一步加快运行时间,而不会影响性能。训练后量化(PTQ)仅使用小的校准集直接量化模型。而量化感知训练(QA T)通过访问通常与蒸馏联合使用的训练集进一步提高了性能。然而,由于YOLOv6中大量使用了重新参数化块,先前的PTQ技术无法产生高性能,而在训练和推理过程中,当涉及匹配伪量化器时,很难结合QA T。我们在这里演示了部署过程中的陷阱和解决方法。
再优化器[2]在每个优化步骤提出梯度重新参数化。该技术还很好地解决了基于再参数化的模型的量化问题。因此,我们以这种方式重建了YOLOv6的重新参数化块,并使用重新优化器对其进行训练,以获得PTQ友好权重。特征图的分布大大缩小(如图4,B.1中更多),这大大有利于量化过程,结果见第3.5.1节。
通过将量化敏感操作部分转换为浮点计算,我们进一步提高了PTQ性能。为了获得灵敏度分布,通常使用几种度量,均方误差(MSE)、信噪比(SNR)和余弦相似性。通常,为了进行比较,可以选择输出特征映射(在激活某一层之后)来计算这些度量,包括量化和不量化。作为替代方案,也可以通过打开和关闭特定层的量化来计算验证AP[29]。我们在使用再优化器训练的YOLOv6-S模型上计算所有这些度量,并选择前6个敏感层以浮动方式运行。敏感性分析的完整图表见B.2。
在PTQ不足的情况下,我们建议使用量化感知训练(QAT)来提高量化性能。为了解决训练和推理过程中伪量化器的不一致性问题,有必要在再优化器上建立QAT。此外,如图5所示,在YOLOv6框架内采用了通道式蒸馏[36](后来称为CW蒸馏)。这也是一种自蒸馏方法,其中教师网络是FP32精度中的学生本身。参见第3.5.1节中的实验
实验
我们使用与YOLOv5[10]相同的优化器和学习计划,即具有动量和余弦衰减的随机梯度下降(SGD)。还使用了预热、分组权重衰减策略和指数移动平均(EMA)。我们在[1,7,10]之后采用了两种强数据增强(马赛克[1,10]和混合[49])。在我们发布的代码中可以找到超参数设置的完整列表。我们在COCO 2017[23]训练集上训练我们的模型,并在COCO2017验证集上评估准确性。除非另有说明,我们的所有型号均在8个NVIDIA A100 GPU上进行训练, 速度性能在具有TensorRT版本7.2的NVIDIA Tesla T4 GPU上测量。其他TensorRT版本或其他设备的速度性能如附录A所示。
yolov6-S 在指标上与PPYOLOE-S相同(差0.4%,基本可以忽略了),速度相近(0.1ms,可以认为相同),但是yolov6-S2.8ms param17.2M(大2.1倍) FLOPS 44.2G(大2.5倍),ppyoloe-S只有7.9M,17.4G。速度3.1ms(下表中也是2.8ms), 要考虑存储空间吧,8M和17M差距不小
消融实验
主干和颈部我们探讨了单路径结构和多分支结构对主干和颈部的影响,以及CSPStackRep块的信道系数(表示为CC)。本部分描述的所有模型均采用TAL作为标签分配策略,VFL作为分类损失,GIoU和DFL作为回归损失。结果如表2所示。我们发现,不同规模的模型的最佳网络结构应得出不同的解决方案
对于YOLOv6-N,单路径结构在精度和速度方面都优于多分支结构。**尽管单路径结构具有比多分支结构更多的FLOPs 和参数,但由于相对较低的内存占用和较高的并行度,它可以运行得更快。**对于YOLOv6-S,这两种块样式带来了相似的性能。当涉及到更大的模型时,多分支结构在精度和速度上实现了更好的性能。最后,我们为YOLOv6-M选择信道系数为2/3的多分支,为YOLOv6-L选择信道系数1/2的多分支。 YOLOv6-N/T/S/M 使用repconv、relu 提高速度
YOLOv6-L Conv/SiLU 可加速训练和提高表现
yolov5-N作为基线 decoupled head (denoted as DH) 解耦头 精度提高1.4,速度降低5%
AF无锚点方法 快51%
backbone (EfficientRep Backbone) and the neck (Rep-PAN neck), 3.6精度提升 提速21%
优化的去耦头(混合通道,HC)在精度和速度上分别提高了0.2%的AP和6.8%的FPS。
损失函数 自蒸馏 mosic 量化 ref https://zhuanlan.zhihu.com/p/546750421
|