YoloV6主要创新点

YoloV6关键技术

YOLOv6 主要在 BackBone、Neck、Head 以及训练策略等方面进行了诸多的改进:

1. Hardware-friendly 的骨干网络设计

YOLOv5/YOLOX 使用的 Backbone 和 Neck 都基于 CSPNet搭建,采用了多分支的方式和残差结构,这种结构会一定程度上增加延时,同时减小内存带宽利用率。YOLOv6在backbone上就引入了RepVGG的结构,并且基于硬件又进行了改良,提出了效率更高的EfficientRep。

RepVGG

RepVGG Block

问题:
  1. 为什么训练的时候使用多分支

在这里插入图片描述

能够增加模型的表征能力,从上表中可以看出无论是增加Identity branch还是1*1的branch,都可以提高模型的准确度

  1. 为什么推理的时候使用单分支
  • 使用单分支更快,多分支的每个分支计算量可能不同,但是需要将每个分支的结果相加,导致并行度下降,降低速度,另外多分支调用的算子更多,更耗时
  • 更省内存
  • 更加灵活
结构重参数化

将多分支结构转换为单分支结构,即将RepVGG block转化为一个3*3的卷积
在这里插入图片描述

在这里插入图片描述

  • 11卷积转化为33卷积,BN转化为3*3卷积

11转化为33只需要将1*1的卷积核padding1
在这里插入图片描述

BN转化只需要构造一个卷积似的输入输出相等即可,即乘以一个单位矩阵

假设输入channel为2输出channel也为2,则需要构造两个332的卷积核,
在这里插入图片描述

  • 卷积层和BN层融合

对于卷积层: y i = w ⋅ x i + b y_i=w \cdot x_i+b yi=wxi+b
对于BN层: y i = γ x i ^ + β y_i=\gamma \hat{x_i}+\beta yi=γxi^+β,其中 x i ^ = x i − μ i σ i 2 + ϵ \hat{x_i}=\frac{x_i-\mu_i}{\sqrt{\sigma_i^2+\epsilon}} xi^=σi2+ϵ xiμi, μ i \mu_i μi为均值, σ i \sigma_i σi为标准差
将卷积公式带入BN公式得到: B N γ , β ( x ) = γ w ⋅ x + b − μ i σ i 2 + ϵ + β = γ w σ i 2 + ϵ ⋅ x + γ σ i 2 + ϵ ⋅ ( b − μ i ) + β BN_{\gamma ,\beta}(x)=\gamma \frac{w\cdot x+b-\mu_i}{\sqrt{\sigma_i^2+\epsilon}}+\beta= \frac{\gamma w}{\sqrt{\sigma_i^2+\epsilon}}\cdot x+\frac{\gamma}{\sqrt{\sigma_i^2+\epsilon}}\cdot(b-\mu_i)+\beta BNγ,β(x)=γσi2+ϵ wx+bμi+β=σi2+ϵ γwx+σi2+ϵ γ(bμi)+β
w ^ = γ w σ i 2 + ϵ \hat{w}=\frac{\gamma w}{\sqrt{\sigma_i^2+\epsilon}} w^=σi2+ϵ γw, b ^ = γ σ i 2 + ϵ ⋅ ( b − μ i ) + β \hat{b}=\frac{\gamma}{\sqrt{\sigma_i^2+\epsilon}}\cdot(b-\mu_i)+\beta b^=σi2+ϵ γ(bμi)+β,则有
B N γ , β ( x ) = w ^ ⋅ x + b ^ BN_{\gamma ,\beta}(x)=\hat{w}\cdot x+\hat{b} BNγ,β(x)=w^x+b^
卷积层和BN层融合之后就相当于一个新的卷积层

  • 多分支融合

将卷积层和BN层融合后,得到3个3*3的卷积层,最后直接将这三个卷积层的参数相加融合为一个卷积层

EfficientRep Backbone

网络结构

将YOLOv5 Backbone 中的 CBL模块替换成了 RepConv模块。同时,将原始的 CSP-Block 都重新设计为 RepBlock,其中 RepBlock 的第一个 RepConv 会做 channel 维度的变换和对齐。另外,还将原始的 SPPF 优化设计为更加高效的 SimSPPF。
在这里插入图片描述

yolov5网络结构图
在这里插入图片描述

SPP、SPPF、SimSPPF的区别

SPP结构:又称空间金字塔池化,能够将能将任意大小的特征图转换成固定大小的特征向量

  • SPP

  • SPPF

在这里插入图片描述

  • SimSPPF

Rep-PAN

Rep-PAN 基于 PAN拓扑方式,用 RepBlock 替换了 YOLOv5 中使用的 CSP-Block,同时对整体 Neck 中的算子进行了调整,目的是在硬件上达到高效推理的同时,保持较好的多尺度特征融合能力
在这里插入图片描述

2. 更简洁高效的 Decoupled Head

在 YOLOv6 中,采用了解耦检测头(Decoupled Head)结构,并对其进行了精简设计。原始 YOLOv5 的检测头是通过分类和回归分支融合共享的方式来实现的,而 YOLOX 的检测头则是将分类和回归分支进行解耦,同时新增了两个额外的 3x3 的卷积层,虽然提升了检测精度,但一定程度上增加了网络延时。
YOLOv6采用 Hybrid Channels 策略重新设计了一个更高效的解耦头结构,在维持精度的同时降低了延时,缓解了解耦头中 3x3 卷积带来的额外延时开销。通过在 nano 尺寸模型上进行消融实验,对比相同通道数的解耦头结构,精度提升 0.2% AP 的同时,速度提升6.8%。
在这里插入图片描述

3. 更有效的训练策略

  • Anchor-free 无锚范式

YOLOv6 采用了更简洁的 Anchor-free 检测方法。由于 Anchor-based检测器需要在训练之前进行聚类分析以确定最佳 Anchor 集合,这会一定程度提高检测器的复杂度;同时,在一些边缘端的应用中,需要在硬件之间搬运大量检测结果的步骤,也会带来额外的延时。而 Anchor-free 无锚范式因其泛化能力强,解码逻辑更简单,在近几年中应用比较广泛。经过对 Anchor-free 的实验调研,我们发现,相较于Anchor-based 检测器的复杂度而带来的额外延时,Anchor-free 检测器在速度上有51%的提升。

  • SimOTA 标签分配策略

为了获得更多高质量的正样本,YOLOv6 引入了 SimOTA [4]算法动态分配正样本,进一步提高检测精度。YOLOv5 的标签分配策略是基于 Shape 匹配,并通过跨网格匹配策略增加正样本数量,从而使得网络快速收敛,但是该方法属于静态分配方法,并不会随着网络训练的过程而调整。
近年来,也出现不少基于动态标签分配的方法,此类方法会根据训练过程中的网络输出来分配正样本,从而可以产生更多高质量的正样本,继而又促进网络的正向优化。例如,OTA[7] 通过将样本匹配建模成最佳传输问题,求得全局信息下的最佳样本匹配策略以提升精度,但 OTA 由于使用了Sinkhorn-Knopp 算法导致训练时间加长,而 SimOTA[4]算法使用 Top-K 近似策略来得到样本最佳匹配,大大加快了训练速度。故 YOLOv6 采用了SimOTA 动态分配策略,并结合无锚范式,在 nano 尺寸模型上平均检测精度提升 1.3% AP。

  • SIoU 边界框回归损失

为了进一步提升回归精度,YOLOv6 采用了 SIoU[9] 边界框回归损失函数来监督网络的学习。目标检测网络的训练一般需要至少定义两个损失函数:分类损失和边界框回归损失,而损失函数的定义往往对检测精度以及训练速度产生较大的影响。
近年来,常用的边界框回归损失包括IoU、GIoU、CIoU、DIoU loss等等,这些损失函数通过考虑预测框与目标框之前的重叠程度、中心点距离、纵横比等因素来衡量两者之间的差距,从而指导网络最小化损失以提升回归精度,但是这些方法都没有考虑到预测框与目标框之间方向的匹配性。SIoU 损失函数通过引入了所需回归之间的向量角度,重新定义了距离损失,有效降低了回归的自由度,加快网络收敛,进一步提升了回归精度。通过在 YOLOv6s 上采用 SIoU loss 进行实验,对比 CIoU loss,平均检测精度提升 0.3% AP。

猜你喜欢

转载自blog.csdn.net/qq_40042726/article/details/126189924
今日推荐