1、YOLOv6概述:
YOLO V6是美团视觉智能部研发的一款目标检测框架,致力于工业应用。本框架同时专注于检测的精度和推理效率,在工业界常用的尺寸模型中:YOLO v6-nano 在COCO上精度可达35.0% AP,在T4上推理速度可达 1242 FPS;YOLO v6-s 在COCO上精度可达43.1%AP,在T4上推理速度可达 520 FPS。在部署方面,YOLO v6 支持 GPU(TensorRT)、CPU(OPENVINO)、ARM(MNN、TNN、NCNN)等不同平台的部署,极大地简化工程部署时的适配工作。
它的精度远超 YOLO V5、YOLO X。YOLO v6 框架支持模型训练、推理及多平台部署等全链条的工业应用需求,并在网络结构、训练策略等算法层面进行了多项改进和优化,在COCO数据集上,YOLOv6 在精度和速度方面均超越其他同体量算法。
2、关键技术介绍
主要在 Backbone、Neck、Head 以及训练策略等方面进行了诸多的改进:
我们统一设计了更高效的Backbone和Neck :受到硬件感知神经网络设计思想的启发,基于RepvGG style设计了可重参数化、更高效的骨干网络 EfficientRep Backbone 和 Rep-PANNeck。
优化设计了更简洁有效的 Efficient Decoupled Head,在维持精度的同时,进—步降低了一般解耦头带来的额外延时开销。
在训练策略上,我们采用Anchor-free无锚范式,同时辅以SimOTA标签分配策略以及SloU边界框回归损失来进一步提高检测精度。
1)Hardware - friendly 的骨干网络设计
YOLOv5 / YOLOX 使用的 Backbone和Neck 都基于 CSPNet 搭建,采用了多分支的方式和残差结构。对于 GPU 等硬件来说,这种结构会一定程度上增加延时,同时减小内存带宽利用率。
于是,我们基于硬件感知神经网络设计的思想,对 Backbone 和 Neck 进行了重新设计和优化。该思想基于硬件的特性、推理框架 / 编译框架的特点,以硬件和编译友好的结构作为设计原则,在网络构建时,综合考虑硬件计算能力、内存带宽、编译优化特性、网络表征能力等,进而获得又快又好的网络结构。对上述重新设计的两个检测部件,分别称为 EfficientRep Backbone 和 Rep-PAN Neck,其主要贡献点在于:
1. 引入了 RepVGG style 结构
更能够轻松地去减少误差,提高精度。
2. 基于硬件感知思想重新设计了 Backbone 和 Neck。
RepVGG Style 结构是一种在训练时具有多分支拓扑,而在实际部署时可以等效融合为单个3x3 卷积的一种可重参数化的结构(融合过程如下图所示)。通过融合成的 3x3 卷积结构,可以有效利用计算密集型硬件计算能力(比如 GPU ),同时也可获得 GPU/CPU 上已经高度优化的 NVIDIA cuDNN 和 Intel MKL 编译框架的帮助。
实验表明,通过上述策略, YOLOv6 减少了在硬件上的延时,并显著提升了算法的精度,让检测网络更快更强。以 nano 尺寸模型为例,对比 YOLOv5-nano 采用的网络结构,本方法在速度上提升了21%,同时精度提升3.6%AP。
EffcientRep Backbone:在 Backbone 设计方面,我们基于以上 Rep 算子设计了一个高效的 Backbone。相比于 YOLOv5 采用的 CSP-Backbone,该 Backbone 能够高效利用硬件(如GPU) 算力的同时,还具有较强的表征能力。
下图为 EffcientRep Backbone 具体设计结构图,我们将 Backbone中stride=2 的普通 Conv 层替换成了 stride=2 的 RepConv 层。同时,将原始的 CSP-Block 都重新设计为 RepBlock,其中 RepBlock 的第一个 RepConv 会做 channel 维度的变换和对齐。另外,我们还将原始的 SPPF 优化设计为更加高效的 SimSPPF。
Rep-PAN:在 Neck 设计方面,为了让其在硬件上推理更加高效,以达到更好的精度与速度的平衡,基于硬件感知神经网络设计思想,为 YOLOv6 设计了一个更有效的特征融合网络结构。
Rep-PAN 基于 PAN 拓扑方式,用 RepBlock 替换了 YOLOv5 中使用的 CSP-Block,同时对整体 Neck 中的算子进行了调整,目的是在硬件上达到高效推理的同时,保持较好的多尺度特征融合能力 ( Rep-PAN 结构图如下图所示)。
2)更简洁高效的 Decoupled Head
在 YOLOv6 中,我们采用了解耦检测头 (Decoupled Head) 结构,并对其进行了精简设计。原始 YOLOv5 的检测头是通过分类和回归分支融合共享的方式来实现的,而 YOLOX 的检测头则是将分类和回归分支进行解耦,同时新增了两个额外的 3x3 的卷积层,虽然提升了检测精度,但一定程度上增加了网络延时。
因此,我们对解耦头进行了精简设计,同时综合考虑到相关算子表征能力和硬件上计算开销这两者的平衡,采用 Hybrid Channels 策略重新设计了一个更高效的解耦头结构,在维持精度的同时降低了延时,缓解了解耦头中 3x3 卷积带来的额外延时开销。通过在 nano 尺寸模型上进行消融实验,对比相同通道数的解耦头结构,精度提升 0.2%AP 的同时,速度提升 6.8%。
3)更有效的训练策略
为了进一步提升检测精度,我们吸收借鉴了学术界和业界其他检测框架的先进研究进展:Anchor-free 无锚范式、SimOTA 标签分配策略以及 SloU 边界框回归损失。
Anchor-free无锚范式
YOLOv6 采用了更简洁的 Anchor-free 检测方法。由于 Anchor-based 检测器需要在训练之前进行聚类分析以确定最佳 Anchor 集合,这会一定程度提高检测器的复杂度;同时,在一些边缘端的应用中,需要在硬件之间搬运大量检测结果的步骤,也会带来额外的延时。而 Anchor-free 无锚范式因其泛化能力强,解码逻辑更简单,在近几年中应用比较广泛。经过对 Anchor-free 的实验调研,我们发现,相较于 Anchor-based 检测器的复杂度而带来的额外延时,Anchor-free 检测器在速度上有 51% 的提升。第一张 Anchor-based,第二张 Anchor-free(YOLOv1已经提出)。
SimOTA 标签分配策略(基本上就是继承了YOLOX的思想)
为了获得更多高质量的正样本,YOLOv6 引入了 SimOTA 算法动态分配正样本,进一步提高检测精度。YOLOv5 的标签分配策略是基于 Shape 匹配,并通过跨网格匹配策略增加正样本数量,从而使得网络快速收敛,但是该方法属于静态分配方法,并不会随着网络训练的过程而调整。
近年来,也出现不少基于动态标签分配的方法,此类方法会根据训练过程中的网络输出来分配正样本,从而可以产生更多高质量的正样本,继而又促进网络的正向优化。例如,OTA 通过将样本匹配建模成最佳传输问题,求得全局信息下的最佳样本匹配策略以提升精度,但 OTA 由于使用了 Sinkhorn-Knopp 算法导致训练时间加长,而 SimOTA 算法使用 Top-K 近似策略来得到样本最佳匹配,大大加快了训练速度。故 YOLOv6 采用了 SimOTA 动态分配策略,并结合无锚范式,在nano 尺寸模型上平均检测精度提升 1.3%AP。
SimOTA 的流程:1、确定正样本候选区域;2、计算anchor与gt的iou;3、在候选区域内计算cost;4、使用iou确定每个gt的dynamic_k;5、为每个gt取cost排名最小的前dynamic_k个anchor作为正样本,其余为负样本;6、使用正负样本计算loss。
SIOU 边界框回归损失
为了进一步提升回归精度,YOLOv6 采用了 SloU 边界框回归损失函数来监督网络的学习。目标检测网络的训练一般需要至少定义两个损失函数:分类损失和边界框回归损失,而损失函数的定义往往对检测精度以及训练速度产生较大的影响。
近年来,常用的边界框回归损失包括 loU、Glou、CloU、DloU loss 等等,这些损失函数通过考虑预测框与目标框之前的重叠程度、中心点距离、纵横比等因素来衡量两者之间的差距,从而指导网络最小化损失以提升回归精度,但是这些方法都没有考虑到预测框与目标框之间方向的匹配性。SloU 损失函数通过引入了所需回归之间的向量角度,重新定义了距离损失,有效降低了回归的自由度,加快网络收敛,进一步提升了回归精度。通过在 YOLOv6s 上采用 SloU loss 进行实验,对比 CloU loss,平均检测精度提升0.3% AP。
SIOU:Angle cost、Distance cost、Shape cost、IoU cost