单位:美团(十八罗汉?!)
ArXiv:https://arxiv.org/abs/2209.02976
Github:https://github.com/meituan/yolov6
争论:issues 1 issues 2
导读:
当YOLOv7被大量报道,并被冠以“当前最快最强”的目标检测器时,我们想将来肯定有更厉害的版本V8、V9出现,如同手机一样更新换代!而不久前开源的YOLOv6,已经在推理速度精度的均衡张,把YOLOv7打败,但YOLOV6引起一阵争议。我们知道YOLO作为当前最热门的目标检测开源框架,世界上有很多团队(包括商业、科研)都在扩展开发,争奇斗艳不足为奇。而引起争议的原因,无非是美团出品的YOLO模型“拿”其它家的技术,搞成一个超级“缝合怪”把V6的坑给占了。有人指出它虽然在速度和精度上取得了优势,但避开参数量的对比。但作者从商业应用角度出发,比起参数量和运算量的对比,更关注速度性能,无可厚非。而此前开源的YOLOv4、YOLOv7版本被DarkNet官方承认,而主流的深度学习平台tensorflow、pytorch也支持YOLOv4模型!作为一个搬砖者,哪个工具好用,就去借鉴学习;哪个文档写得通俗易懂,就被亲近!
实测效果
性能对比
图2:与当前SOTA的高效目标检测器对比性能。我们可以看到,YOLOV6系列相比于YOLOX、YOLOV5、YOLOV7在速度|精度上达到了更好的平衡。这里给出的吞吐量,设置批处理为32以供参考。量化的YOLOv6模型是在TensorRT 8上检验。
摘要
多年来,YOLO系列已经成为事实上高效目标检测的行业标准。YOLO社区蓬勃发展,丰富了其在众多硬件平台和场景中的应用。在本篇技术报告中,作者力求将其极限推到新高度,以坚定不移的心态推进行业应用。考虑到实际环境中对速度和精度的不同要求,作者广泛研究了来自工业界或学术界的最新目标检测进展。具体而言,作者大量吸收了来自网络设计、训练策略、测试技巧、量化和优化方法等思想。除此之外,作者整合了思想和实践,以构建一套不同规划的就绪部署,以适应多样化的用例。在YOLO作者的慷慨许可下,作者将之命名为YOLOV6。作者也欢迎用户和贡献者进一步改进。为了了解性能,YOLOV6-N在COCO上达到了35.9%的AP,在TesLa T4GPU上达到1234FPS的吞吐量。YOLOV6-S达到43.5%和495的FPS,超过了同等规模的其他主流检测器如YOLOV5-S、YOLOX-S和PPYOLOE-S等。作者量化后的YOLOV6-S版本甚至达到了一个新高度的43.3%AP和869FPS。此外,作者仔细地验证了每个模块的有效性。
一、介绍
因为在速度与精度上的良好平衡,YOLO系列成为了在工业应用上最流行的检测框架。YOLO系列的先驱工作如V1-V3,开创了一条单阶段检测器的新轨迹。YOLOV4重新将监测框架组织为几个单独的部分如主干、颈部和头部,并在当时设计了一包免费赠品和一包特价品,以设计一个适合在单GPU上进行训练的框架。当前,YOLOV5,YOLOX,YOLOV7都是部署高效检测器的竞争对手。不同尺寸的模型通常通过缩放技术获得。
在这篇报告中,作者从经验中观察到几个完善YOLO框架的因素:
- RepVGG的重参数化是一种在检测中尚未得到很好利用的高级技术。作者同样注意到RepVGG块的缩放还不成熟,为此,作者认为在大小模型的缩放设计没有必要保持优雅的一致性。对于小网络,简单的单路径架构是更好的选择;而对于较大的模型,参数的指数级增长和单路径架构的运算代价让它变得不可行。
- 基于重参数化的检测器的量化也需要仔细的处理,否则在训练和推理中,由于其异构配置,处理性能退化变得困难。
- 先前的工作不太关注部署,通常是在高成本机器如V100上比较延迟。在实际服务环境中存在硬件差距。通常,低功耗GPU如Tesla T4成本较低,并且提供了相当好的推理性能。
- 标签分配和损失函数等高级领域的特定策略需要进一步验证,考虑到体系结构差异。
- 对于部署,作者能够接受提高训练成本以提高准确性,但不能增加推理成本,如知识蒸馏。
考虑到上述观察结果,作者推出了YOLOV6,取得了当前最好的速度精度均衡。如上述图2所示。为了提升推理速度,作者研究了前沿的量化方法,如训练后量化(post-training quantization,PTQ)和量化感知训练(quantization-aware training,QAT),并且在YOLOV6中调整它们以实现部署就绪网络的目标。
作者总结YOLOV6的主要方面如下(注:作者用词非常谨慎,“方面”比“贡献”更尊重事实):
- 作者重构了一系列不同规模的网络,以适应不同场景下的工业应用。不同规模的体系架构各不相同,以实现最佳的速度精度均衡,其中小型模型使用普通的单路径主干,而大模型在多路径块下构建。
- 作者给YOLOv6注入了一个自蒸馏策略,在分类任务和回归任务上都执行了该策略。同时,作者动态调整来自老师和标签的知识以帮助学生模型在所有训练阶段更有效地学习知识。
- 作者广泛验证先进的检测技术,有标签分配,损失函数和数据增强技术,并有选择地应用它们去进一步提升性能。
- 作者在RepOptimizer和通道蒸馏的帮助下,对量化方法进行了改进,从而得到一个快速准确的检测器。
二、方法
YOLOV6的翻新设计包括如下组件:网络设计,标签分配,损失函数,数据增强,行业改进以及量化与部署:
网络设计
单阶段目标检测器通常由以下部分组成:骨架,颈部和头。骨架主要决定特征表征能力,同时它的设计对推理效率有关键影响,因为它占据了很大比例的运算成本。颈部用于聚合低级的物理特征和高级的语义特征,然后构建所有级别的金字塔特征图。头部包含几个卷积层,它基于颈部聚合的多级特征预测最终检测结果。它能分类成有无anchor,或者更确切说是参数耦合性还是解耦型头。
Backbone:
先前的工作表明,多分支网络如DenseNet通常能比单路径网络如AlexNet、VGGNet获得更好的性能,但会遇到并行运算程度会降低,推理会延迟的问题。相反,普通的单路径网络如VGGNet具有高并行性和较少内存占用的优点。后来,RepVGG被提出来,它在训练阶段是一个多分支的拓扑结构,在推理阶段通过重参数化来取得更好的速度精度均衡。
受启发于RepVGG,作者设计了一个高效的重参数化骨架,称之为EfficientRep。对于小型模型,骨架的主要成分是Rep-Block,如图3a)所示;在推理阶段,RepBlock转化为RepConv,如图3b)所示。
与其他主流架构比较,作者发现RepVGG骨架在相似推理速度下,在小型网络中具有更多特征表征能力,尽管它比较难扩展到大模型由于参数和运算成本的爆炸增长。在这种情况下,作者采用RepBlock作为构建小型网络的构建模块;对于大型模型,作者改进了一个更有效的CSP块,即CSPStackRep Block。通常3*3卷积在硬件计算平台上被优化,因此在提升表征能力的同时也能提升推理速度。
但是,作者发现如果将模型进行扩展,将面临参数和计算陈本成指数级增长。为了获得更好的均衡,作者改进CSPStackRep Block,如图3c)所示。它吸取了CSP的优点,即Cross Stage partial连接,同时在训练阶段有RepVGG block构成,在推理阶段是RepConv构成。
Neck:
在实际中,多尺度的特征融合被证明是目标检测的一个关键的有效部分。作者采用PAN拓扑结构,与YOLOV4和V5一致。作者使用RepBlock增强颈部,构成Rep-PAN;
Head:
YOLOV5的检测头是一个耦合的检测头,其参数在分类和定位之间是共享的,它的同类如FCOS和YOLOX通过添加两个33的卷积来解耦两个分支以提升性能。
作者采用了混合通道策略来构建更高效的解耦头。作者只采用了一个33的卷积。检测头的宽度通过骨架和颈部的宽度乘积来决定,这个改进进一步减少运算以提升推理速度。作者简化了耦合的头部使其更加高效,称之为Efficient Decoupled Head。
Anchor-free
无锚的检测器比较出众是因为他们更好的泛化能力和在解码预测结果上的简洁性。它后处理的时间也会相应减少。检测器无锚可以分为两种类型:基于锚点的,以及基于关键点的。作者采用基于锚点的范式,它的边界框回归分支会预测锚点到边框四周的距离。
标签分配
标签分配承担在训练过程中分配标签到预定义的锚中。先前工作已经提出了不少标签分配策略,从简单的基于IoU和GT内置的方法到其他更加复杂的策略。
SIMOTA
OTA将标签分配问题看成一个最优传输问题。它从全局角度为每一个GT目标定义了正负样本。SimOTA是OTA的简化版,它减少了参数并保持了性能。在早期的YOLOV6版本中采用SimOTA。但是在实际中,作者发现SimOTA会缓慢训练过程,并且训练不稳定也很常见。因此作者希望改进SimOTA。
Task alignment learning
任务对齐学习首先在TOOD中提出,其为分类分数和预测框质量设计了一个统一的策略。IoU被这个策略替换以分配目标标签。在一定程度上,错位任务(分类和框回归)的问题得到缓解。
TOOD的其他贡献是任务导向性的头(Task-aligned head, T-head)。T-head叠加了几个卷积层去构建交互特征,然后在其顶部使用任务导向的预测子(Task-aligned predictor, TAP)。PP-YOLOE通过使用轻量级的EST注意力来替换T-head中的层注意,形成EST-Head。但是,作者发现ET-Head没有带来性能提升,并且会减低推理速度。因此,作者保留了Efficient Decouple Head。
此外,作者发现TAL能带来比SimOTA更好的性能提升,并且训练稳定。因此作者采用TAL作为原始的标签分配策略。
作者通过大量的实验,评估了标签分配当前的进展,用于YOLOV6,结果显示了TAL更加高效和训练友好型的。
损失函数
检测问题包含两个子任务:分类与定位,对应两个损失函数,即分类损失和框回归损失。对于每一个子任务,近些年有很多损失函数被提出。作者将介绍如何选择最好的损失函数。
Classification Loss
分类器的性能提升是优化检测器的一个核心部分。Focal Loss修改传统的交叉熵损失来解决正负样本或者难易样本不均衡的问题,为了解决训练和推理之间质量评估分类使用不一致的问题,Quality Focal Loss QFL进一步改进了Focal Loss,将分类分数和定位质量联合表示,以用于分类监督。尽管VariFocal Loss VFL起源于Focal Loss,但它处理正负样本不对称。通过考虑正负样本的不同重要程度,它平衡了来自两者的学习信号。PolyLoss将常用的分类损失分解成一系列加权的多项式基,它在不同任务和数据集上调整多项式系数,实践中取得了超过交叉熵和Focal Loss的性能。
作者评估了这些先进的分类损失,最终采用VFL作为分类损失。
Box Regression Loss
框回归损失提供了重要的学习信号以精确地定位边界框。L1 Loss在早期工作中最早使用。逐渐地,很多精心设计的的框回归损失涌现,如IoU系列的损失,和概率损失。
IoU-series Loss
IoU损失将一个预测框的四个边界回归作为一个整体。这是有效的,因为它与评估策略的一致性。有很多IoU的变种,如GIoU,DIoU,CIoU,α-IoU,SIoU等。作者实验了GIoU,CIoU和SIoU,在N/T中作者采用SIoU,M/L中采用GIoU。
Probability Loss
Distribution Focal Loss DFL将框位置的连续分布简化为离散的概率分布,它在不引入强先验考虑数据的不确定性,对提升框定位的精度很有帮助特别是标注框边界模糊的情况下。DFLv2发展了一个轻量级的子网络以利用分布统计数据与真实定位质量之间的相关性,进一步提升检测性能。但是DFL通常输出17倍多的回归值,相比于常用的框回归,导致了大量开销。这将很大程度上影响小模型的推理速度。但DFLv2进一步降低运算负担,因为额外的子网络。作者实验发现DFLv2带来与DFL相似的性能提升。因此,作者仅在M/L中采用DFL。
无锚点的主流目标检测器的损失函数包括分类损失,边框回归损失和目标损失。对于每一损失,作者系统性地将所有可用的技术进行实验,最终选择VariFlocal Loss作为分类损失,SIOU/GIoU作为回归损失。
Object Loss
目标损失首先在FCOS中提出,为了减低低质量边界框的分数,因此能够在后处理中被过滤掉。它同样在YOLOX被使用以加速收敛和提升精度。作为一种无锚的框架,如FCOS和YOLOX,作者尝试了引入目标损失到YOLOV6,但并未带来正面影响。
Industry-handy Improvements
以下技巧在实操中使用。他们不是为了公平的对比,而是不需要太多繁琐的工作就可以稳定提升性能。
- 将训练epoch从300提升到400;
- 采用自蒸馏
量化与部署,此处省略。
三、实验
实验实施细节
作者使用了YOLOV5一样的优化器和学习计划,即带有动量的SGD和学习率中的cosine decay。预热、分组权重衰减和指数移动平均 exponential moving average EMA也被使用。作者采用两个强大的数据增强如Mosaic和MixUp。一个完整的超差设置江湖在作者发布的代码中展示。作者在COCO train set上训练模型,在COCO-val上评估模型。所有模型在8 A100 GPU上训练,速度测试在带有TensorRT 7的T4 GPU上测量的。
对比
作者构建此网络的目的是工业应用,因此更关注所有部署模型的速度,如输出速度、GPU延迟,不仅仅是FLoPs或者参数量。作者与领先的检测器如YOLOV5、YOLOX、PPYOLO、YOLOv7进行了对比。通过实验证明了该模型在速度精度上的双重优势。
烧灼实验
Backbone与Neck
作者对比学习普通的单分支RepBlock与多分支CSPStackRep Block在N/S/M/L四种不同容量模型下的性能,并且学习了不同分支下通道系数。所有模型的设置都采用TAL作为标签分配粗略,VFL作为分类损失,GIoU作为回归损失。
激活函数
YOLO系列采用一系列广泛的激活函数,如ReLU,LReLU,Swish,SiLU和Mish等。一般来说,SiLU取得更好的精度,不会导致额外的计算代价。但在工业应用中,特别是对于TenserRT部署时,ReLU具有更大的速度优势,因为它融合到卷积中。
Miscellaneous design其他设计
作者也对比学习一些其他技巧的学习,如检测头、有无anchor等。通过表格5发现,解耦的检测带来性能提升,也带来了运算时间的增加。此外,无锚范式比有锚范式要快51%,因为无锚范式少了3倍预定义的anchor。作者提出的Efficient Decouple Head带来了速度和精度的双重提升。
Label Assignment
作者对比学习不同的标签分配策略,如ATSS,SimOTA,TAL,DW,ObjectBox等,通过实验发现,TAL和SimOTA是最好的两个分配策略。
损失函数
分类损失
作者对比学习Focal Loss,Poly Loss和QFL,VFL等,通过实验发现,VFL能够取得最好的AP精度。
回归损失
IoU系列的损失函数也在文章详细学习,SIoU在小模型中取得优势,而CIoU在大模型中取得优势。
其他技巧
更多的迭代次数
迭代训练400次,能够取得更好的精度。文章来源:https://www.toymoban.com/news/detail-612081.html
总结
作者从商业应用的角度,对YOLO开源目标检测器进行了深度的改进实验,从骨架模型的构建到检测头的解耦操作,从损失函数的选取到量化部署,始终保持了速度与精度的均衡优势。该YOLOv6是无锚检测器。文章把控细节很好,值得初学者与高级研究者学习。文章来源地址https://www.toymoban.com/news/detail-612081.html
到了这里,关于#YOLOv6#面向行业应用的目标检测器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!