YOLO系列目标检测算法目录
本文总结:
YOLOv6各算法中各部件总结如下:
算法名称 | Backbone | Neck | Head | 卷积/激活函数 | cls loss | reg loss | 深度系数 | 宽度系数 | 标签分配 | epochs |
YOLOv6n | EfficientRep | RepPANNeck | EffiDeHead | RepConv/ReLU | VFL | SIoU DFL=False |
0.33 | 0.25 | 3epoch前:ATSS 其他epoch:TAL |
400 |
YOLOv6t | EfficientRep | RepPANNeck | EffiDeHead | RepConv/ReLU | VFL | SIoU DFL=False |
0.33 | 0.375 | 3epoch前:ATSS 其他epoch:TAL |
400 |
YOLOv6s | EfficientRep | RepPANNeck | EffiDeHead | RepConv/ReLU | VFL | GIoU DFL=False |
0.33 | 0.50 | 3epoch前:ATSS 其他epoch:TAL |
400 |
YOLOv6m | CSPRepBackbone (csp_e=2/3) |
CSPRepPANNeck (csp_e=2/3) |
EffiDeHead | RepConv/ReLU | VFL | GIoU DFL=True |
0.60 | 0.75 | 3epoch前:ATSS 其他epoch:TAL |
400 |
YOLOv6l | CSPRepBackbone (csp_e=1/2) |
CSPRepPANNeck (csp_e=1/2) |
EffiDeHead | Conv/SiLU | VFL | GIoU DFL=True |
1.0 | 1.0 | 3epoch前:ATSS 其他epoch:TAL |
400 |
深度学习知识点总结
专栏链接:
https://blog.csdn.net/qq_39707285/article/details/124005405
此专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。
论文《YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications》2022.9.7。
YOLOv6 是美团视觉智能部研发的一款目标检测框架,致力于工业应用。本框架同时专注于检测的精度和推理效率,在工业界常用的尺寸模型中:YOLOv6-nano 在 COCO 上精度可达 35.0% AP,在 T4 上推理速度可达 1242 FPS;YOLOv6-s 在 COCO 上精度可达 43.1% AP,在 T4 上推理速度可达 520 FPS。在部署方面,YOLOv6 支持 GPU(TensorRT)、CPU(OPENVINO)、ARM(MNN、TNN、NCNN)等不同平台的部署,极大地简化工程部署时的适配工作。目前,项目已开源至Github,传送门:YOLOv6。
精度与速度远超 YOLOv5 和 YOLOX 的新框架。目标检测作为计算机视觉领域的一项基础性技术,在工业界得到了广泛的应用,其中 YOLO 系列算法因其较好的综合性能,逐渐成为大多数工业应用时的首选框架。至今,业界已衍生出许多 YOLO 检测框架,其中以 YOLOv5、YOLOX 和 PP-YOLOE最具代表性,但在实际使用中,我们发现上述框架在速度和精度方面仍有很大的提升的空间。基于此,我们通过研究并借鉴了业界已有的先进技术,开发了一套新的目标检测框架——YOLOv6。该框架支持模型训练、推理及多平台部署等全链条的工业应用需求,并在网络结构、训练策略等算法层面进行了多项改进和优化,在 COCO 数据集上,YOLOv6 在精度和速度方面均超越其他同体量算法,相关结果如下图 1 所示:
上图展示了不同尺寸网络下各检测算法的性能对比,曲线上的点分别表示该检测算法在不同尺寸网络下(s/tiny/nano)的模型性能,从图中可以看到,YOLOv6 在精度和速度方面均超越其他 YOLO 系列同体量算法。
上图展示了输入分辨率变化时各检测网络模型的性能对比,曲线上的点从左往右分别表示图像分辨率依次增大时(384/448/512/576/640)该模型的性能,从图中可以看到,YOLOv6 在不同分辨率下,仍然保持较大的性能优势。
本小节《概述》转自URL
根据经验分析以往YOLO系列及最新算法,观察到了几个重要因素,这些因素促使重新完善YOLO框架:
通过对以上问题的分析,提出了YOLOv6,在精度和速度方面实现了迄今为止最好的折衷。另外为了提高推理速度而不使性能有有太多退化,研究了最前沿的量化方法,包括 训练后量化(post-training quantization,PTQ)和 量化感知训练(quantization-aware training,QAT),并将其整合在YOLOv6中。
YOLOv6的关键点总结如下:
YOLOv6主要从以下几个方面进行改进, 网络设计、标签分配、损失函数、数据增强、工业便利化改进、量化和部署。
一阶段目标检测算法通常由 backbone、 neck和 head组成。
backbone主要决定特征表示能力,同时,其设计对推理效率有着至关重要的影响,因为它承担了大量的计算成本。
neck用于将低层物理特征与高层语义特征聚合,然后在各级建立金字塔特征图。
head由多个卷积层组成,并根据neck部的多级特征预测最终检测结果。从结构的角度来看,它可以分为anchor-based和anchor-free,或者更确切地说,分为参数耦合head和参数解耦head。
在YOLOv6中,提出了 两个缩放的可重参数化backbone和neck,以适应不同尺寸的模型,以及一个 具有混合通道(hybrid-channel)策略的高效解耦head(decoupled head)。总体结构图如图2所示。
backbone的设计中,多分支的网络(ResNet,DenseNet,GoogLeNet,)相比单分支(ImageNet,VGG)的通常能够有更好的分类性能。但是,它通常伴随着并行性的降低,并导致推理延迟的增加。相反,像VGG这样的普通单路径网络具有高并行性和较少内存占用的优点,从而导致更高的推理效率。最近在 RepVGG中,提出了一种结构重参数化方法,将训练时多分支拓扑与推理时平面结构解耦(训练时是多分支,推理时转化为单分支),以实现更好的速度-精度权衡。
RepVGG融合过程如下图所示:
根据以上分析的鼓舞,设计了一个高效的重参数化的backbone,命名为 EfficientRep。对于 小型模型,backbone的主要组成部分是训练阶段的 RepBlock,如图3(a)所示。并且在 推理阶段,每个RepBlock被转换为具有ReLU激活函数的3×3卷积层的堆叠(表示为 RepConv),如图3(b)所示。通常,3×3卷积在主流GPU和CPU上高度优化,并且具有更高的计算密度。因此,主干网的效率是充分的利用硬件的计算能力,从而显著降低了推理延迟,同时增强了表示能力。
然而,我们注意到,随着模型尺寸的进一步扩展,单路径普通网络的计算成本和参数数量呈指数增长。为了更好地平衡计算成本和准确性,修改了 CSPStackRep Block以构建中大型网络的backbone。如图3(c)所示, CSPStackRep Block由三个1×1卷积层和由两个具有残差连接的RepVGG block(训练阶段)或RepConv(推理阶段)组成的子块堆叠组成。此外,采用了CSP来提高性能,而不需要过多的计算成本。与CSPRepResStage(PP-YOLOE)相比,它具有更简洁的外观,并考虑了准确性和速度之间的平衡。
EfficientRep Backbone具体设计结构图如下图所示:
该插图转自URL
采用来自YOLOv4和YOLOv5的改进的 PAN结构作为我们检测neck的基础。此外,将YOLOv5中使用的 CSPBlock替换为RepBlock(适用于小型模型)或CSPStackRep Block(用于大型模型),并相应调整宽度和深度。YOLOv6的neck表示为 Rep-PAN。结构图如下图所示:
该插图转自URL
Efficient decoupled head:YOLOv5的检测头是一个耦合头,在分类和定位分支之间共享参数,而FCOS和YOLOX中的对应部分将两个分支解耦,并在每个分支中引入另外两个3×3卷积层以提高性能。
在YOLOv6中,采用了一种 混合通道(hybrid-channel)策略,以构建更高效的解耦头。具体而言,将中间3×3卷积层的数量减少到只有一个。head的宽度由backbone和neck的宽度乘数共同缩放。这些修改进一步降低了计算成本,以实现更低的推理延迟。
Anchor-free:anchor-free检测器因其更好的泛化能力和解码预测结果的简单性而脱颖而出。其后处理的时间成本显著降低。有两种类型的anchor-free检测器:point-based(YOLOX,FCOS)和keypoing-based(CenterNet)。在YOLOv6中,采用了 anchor-free point-based范式。
探讨了单路径结构和多分支结构对backbone和neck的影响,以及CSPStackRep块的通道系数(channel coefficient表示为CC)。本节实验所有模型均采用TAL作为标签分配策略,VFL作为分类损失,GIoU和DFL作为回归损失。结果如表2所示。
从结果可以发现,不同规模的模型的最佳网络结构应该用不同的解决方案。
对于 YOLOv6-N,单路径结构在精度和速度方面都优于多分支结构。尽管单路径结构具有比多分支结构更多的FLOPs和参数,由于相对较低的内存占用和较高的并行度,它也可以运行的更快。
对于 YOLOv6-S,这两种block的结果差不多。当涉及到更大的模型时,多分支结构在精度和速度上实现了更好的性能。最后,为 YOLOv6-M选择通道系数为 2/3的多分支,为 YOLOv6-L选择通道系数 1/2的多分支。
此外,还研究了neck的宽度和深度对YOLOv6-L的影响。表3中的结果表明, 在相同速度下,细长neck的性能比宽浅neck好0.2%。
YOLO系列激活函数各不相同,如ReLU、LReLU、Swish、SiLU、Mish等。在这些激活函数中,SiLU是使用最多的。一般来说,SiLU的精度更高,不会造成太多额外的计算成本。然而,在工业应用中,特别是在部署具有TensorRT加速的模型时,ReLU具有更大的速度优势,因为它融合到了卷积中。
此外,进一步验证了RepConv/普通卷积(表示为Conv)和ReLU/SiLU/LReLU组合在不同大小网络中的有效性,以实现更好的折衷。如表4所示,带有SiLU的Conv在精度上表现最佳, 而RepConv和ReLU的组合实现了更好的权衡。所以建议用户在 对延迟敏感的应用程序中使用RepConv和ReLU。
本文选择 使用RepConv/ReLU在YOLOv6-N/T/S/M中,用于更高的推理速度;在大型型号 YOLOv6-L中使用Conv/SiLU组合加速训练并提高性能。
选择YOLOv5-N作为基线,并逐步添加其他组件。结果如表5所示。
标签分配负责在训练阶段将标签分配给预定义的anchors。以前的算法提出的各种标签分配策略,从简单的基于IoU的策略和内部GT方法(FCOS)到其他更复杂的方案。(随后会有专门一遍文章来讲标签分配。)接下来介绍SimOTA和Task alignment learning。
SimOTA:OTA将目标检测中的标签分配视为最佳传输的问题。它从全局角度定义了每个GT目标的正/负训练样本。SimOTA是OTA的简化版本,它减少了额外的超参数并保持了性能。在YOLOv6的早期版本中,SimOTA被用作标签分配方法。然而,在实践中,发现引入SimOTA会减缓训练过程。而且,陷入不稳定训练的情况经常出现。因此,本文设计了一个 SimOTA的替代品。
Task alignment learning:任务对齐学习(TAL)在TOOD中首次提出,其中设计了分类分数和预测框质量的统一度量。IoU度量被替换为分配目标标签。在一定程度上,任务(分类和框回归)的错位问题得到了缓解。TOOD的另一个主要贡献是关于 任务对齐头(task-aligned head,T-head)。T-head堆叠卷积层以构建交互特征,在其上使用任务对齐预测器(Task-Aligned-Predictor,TAP)。PP-YOLOE通过将T-head中的层注意力替换为轻量级ESE attention,形成ET-head。然而,我们发现ET-head会降低我们模型中的推理速度,并且不会带来精度增益。因此,我们保留了高效去耦头的设计。
此外,我们观察到TAL比SimOTA能带来更多的性能改进,并能稳定训练。因此,我们 采用TAL作为YOLOv6中的默认标签分配策略。
在表6中,分析了主流标签分配策略的有效性。在YOLOv6N上进行了实验。如预期的,可以观察到SimOTA和TAL是最佳两种策略。与ATSS相比,SimOTA可使AP增加2.0%,TAL可使AP比SimOTA高0.5%。考虑到TAL的稳定训练和更好的精度性能,我们 采用TAL作为标签分配策略。
此外,TOOD的实现采用ATSS作为早期训练阶段的warm-up标签分配策略。我们还保留了warm-up策略,并对其进行了进一步的探索。详细信息如表7所示,可以发现,在没有warm-up或通过其他策略(即SimOTA)预热的情况下,它也可以实现类似的性能。
详细的损失函数介绍详见文章《深度学习知识点总结:损失函数总结_Mr.小梅的博客-CSDN博客_深度学习损失函数总结》。
目标检测包括两个自任务:分类和定位,对应于两个损失函数:classification loss和box regression loss。对于每个子任务,近年来提出了各种损失函数。在本节中,将介绍这些损失函数,并描述如何为YOLOv6选择最佳损失函数。
在目标检测框架中,损失函数由分类损失、框回归损失和可选对象损失组成,其可公式如下:
其中L_cls、L_reg和L_obj分别分类损失、回归损失和对象损失。λ和µ是超参数。
改进分类器的性能是优化检测器的关键部分。Focal Loss修改了传统的交叉熵损失,以解决正负样本或难易样本之间的类不平衡问题。为了解决训练和推理之间质量估计和分类的不一致使用,Quality Focal Loss(QFL)进一步扩展了Focal Loss,将分类分数和本地化质量联合表示用于分类监督。而VariFocal Loss(VFL)源于Focal Loss,但它不对称地处理正样本和负样本。通过考虑不同重要程度的正样本和负样本,它平衡了来自两个样本的学习信号。Poly Loss将常用的分类损失分解为一系列加权多项式基。它在不同的任务和数据集上调整多项式系数,通过实验证明其优于交叉熵损失和Focal Loss。
评估了YOLOv6上的所有高级分类损失,以 最终采用VFL(VariFocal Loss)。
在YOLOv6-N/S/M上实验了Focal Los、Polyloss、QFL和VFL。如表8所示,与Focal Loss相比,VFL对YOLOv6-N/S/M分别带来0.2%/0.3%/0.1%的AP改善。所以,本文选择 VFL作为分类损失函数。
框回归损失为精确定位边界盒提供了重要的学习信号。L1 Loss是早期工作中的原始框回归损失。逐渐地,各种精心设计的框回归损失如IoU系列Loss和Probability Loss如雨后春笋般涌现。
IoU-series Loss: IoU Loss将预测框的四个边界作为一个整体单位进行回归。由于其与评价指标的一致性,已被证明是有效的。IoU有许多变体,如GIoU、DIoU、CIoU、α-IoU和SIoU等,形成相关损失函数。对GIoU、CIoU和SIoU进行了实验。 SIoU应用于YOLOv6-N和YOLOV 6-T,而其他的使用GIoU。
IoU系列损失函数和概率损失函数都在YOLOv6-N/S/M上进行了实验。最新的IoU系列损失函数用于YOLOv6N/S/M。表9中的实验结果表明,对于 YOLOv6-N和YOLOv 6-T,SIoU Loss优于其他Loss,而对于 YOLOv6-M,CIoU Loss表现更好。
**Probability Loss:Dostronition Focal Loss(DFL)将框位置的基本连续分布简化为离散化概率分布。**它考虑了数据中的模糊性和不确定性,而不引入任何其他先验,这有助于提高框定位精度,特别是当GT框的边界模糊时。基于DFL,DFLv2开发了一个轻量级子网络,以利用分布统计和实际定位质量之间的密切相关性,进一步提高检测性能。然而,DFL通常输出比一般盒回归多17倍的回归值,导致大量开销。额外的计算成本显著阻碍了小模型的训练。而DFLv2由于额外的子网络而进一步增加了计算负担。在本文的实验中,DFLv2在我们的模型上带来了与DFL类似的性能增益。因此,我们 仅在YOLOv6-M/L中采用DFL。
对于概率损失,如表10所示,对于YOLOv6-N/S/M,引入DFL可分别获得0.2%/0.1%/0.2%的性能增益。然而,对于小模型,推理速度受到很大影响。因此, DFL仅在YOLOv6-M/L中引入。
FCOS中首次提出了Object Loss,以降低低质量边界框的分数,以便在后处理中过滤掉它们。在YOLOX中也使用了它来加速收敛并提高网络精度。作为一个像FCOS和YOLOX这样的anchor-free框架,本文尝试将Object Loss引入YOLOv6。不幸的是,它没有带来很多积极的效果。
如表11所示,还对YOLOv6进行了Object Loss实验。从表11可以看出,Object Loss对YOLOv6-N/S/M网络有负面影响,其中最大减少量为1.1%。负增益可能来自TAL中Object分支和其他两个分支之间的冲突。具体地说,在训练阶段,预测框和GT之间的IoU以及分类分数被用于共同构建度量作为分配标签的标准。引入的Object分支将要对齐的任务的数量从两个扩展到三个,这显然增加了难度。基于实验结果和该分析,然后在 YOLOv6中去除Object Loss。
下面的技巧可以在实际实践中使用。它们不是为了进行实验比较,而是在没有太多繁琐的工作的情况下稳定地产生性能增益。
实验结果表明, 随着训练时间的增加,检测器的性能不断提高。我们将训练时间从300个周期延长到400个周期,以达到更好的收敛。
在实践中,更多的训练周期是进一步提高准确性的简单而有效的方法。表12显示了针对300和400个epochs训练的小型模型的结果。可以观察到,针对更长时间epoch的训练分别用于YOLOv6-N、T和S,显著提高了AP 0.4%、0.6%和0.5%。考虑到可接受的成本和产生的增益,对于YOLOv6, 训练400个epochs是更好的收敛方案。
注意到,在评估YOLOv5和YOLOv7中的模型性能时,在每个图像周围放置了half-stride灰色边界(就是resize图片时四周填充了灰度的padding)。虽然没有添加有用的信息,但它有助于检测图像边缘附近的对象。这个技巧也适用于YOLOv6。
然而,额外的灰度像素明显降低了推理速度。如果没有灰色边界,YOLOv6的性能会恶化,这也是YOLOv5和YOLOv7中遇到的情况。我们假设该问题与Mosaic增强中的灰色边界填充有关。为了验证,进行了在最后一个epoch时关闭Mosaic增强的实验(又名衰退策略,fade strategy)。在这方面,我们改变了灰度边界的面积,并将具有灰度边界的图像直接调整为目标图像大小。结合这两种策略,我们的模型可以在不降低推理速度的情况下保持甚至提高性能。
实验结果如表14所示。在这些实验中,YOLOv6-N和YOLOV-S训练400个周期,YOLOv6-M训练300个周期。可以观察到,当去除灰色边界时,在没有 关闭Mosaic衰落策略的情况下,YOLOv6-N/S/M的精度降低了0.4%/0.5%/0.7%。然而,当关闭Mosaic衰落策略时,性能退化变为0.2%/0.5%/0.5%。可以发现,一方面,性能下降的问题得到了缓解。另一方面,无论是否填充灰色边界,小模型(YOLOv6-N/S)的精度都会提高。
将输入图像限制为634×634,并在边缘周围添加3像素宽的灰色边界。使用该策略,最终图像的大小为预期的640×640。表14中的结果表明,当最终图像尺寸从672减小到640时,YOLOv6-N/S/M的最终性能甚至更精确0.2%/0.3%/0.1%。
对于工业部署,通常采用量化来进一步加快运行时间,而不会影响性能。 训练后量化(post-training,PTQ)仅使用小的校准集直接量化模型。而 量化感知训练(quantization-aware training,QAT)使用训练集,其通常与蒸馏联合使用,进一步提高了性能。然而,由于在YOLOv6中大量使用了重参数化块,先前的PTQ技术无法产生高性能,而在训练和推理期间匹配伪量化器时,很难结合QAT。接下来介绍部署过程中的陷阱和解决方法。
RepOptimizer提议在每个step中进行梯度重参数化。该技术很好地解决了基于重参数化的模型的量化问题。因此,本文以这种方式重建了YOLOv6的重参数化Block,并使用RepOptimizer优化器对其进行训练,以获得PTQ-friendly权重。特征图的分布大大缩小(如图6),这大大利于量化过程。
通过将量化敏感操作部分转换为浮点计算,进一步提高了PTQ性能。为了获得灵敏度分布,通常使用几种度量,均方误差(MSE)、信噪比(SNR)和余弦相似性。通常,为了进行比较,可以选择输出特征映射(在激活某一层之后)来计算这些度量,包括量化和不量化。作为替代方案,也可以通过打开和关闭特定层的量化来计算验证AP。
在PTQ不足的情况下,本文提出使用 量化感知训练(quantization-aware training,QAT)来提高量化性能。为了解决训练和推理过程中伪量化器的不一致性问题,有必要 在RepOptimizer优化器上建立QAT。此外,如图5所示,在YOLOv6框架内采用了 通道式蒸馏(后来称为CW蒸馏)。这也是一种自蒸馏方法,其中teacher网络是FP32精度中的student本身。
简而言之,考虑到持续的工业需求,提出了YOLOv6,仔细分析了迄今为止目标检测器组件的所有进步。结果在精度和速度上都超过了其他可用的实时目标检测器。为了便于工业部署,还为YOLOv6提供了一种定制的量化方法,从而提供了前所未有的快速检测器。