【目标检测】53、YOLOv6 | 论文来啦!专为工业应用设计

在这里插入图片描述

论文:YOLOv6: A Single-Stage Object Detection Framework for Industrial
Applications

代码:https://github.com/meituan/YOLOv6

官方博文:https://blog.csdn.net/MeituanTech/article/details/125437630

作者:美团

时间:2022.09

贡献:

  • 专门为工业应用领域重新设计了一系列不同尺度的网络,引入 RepVGG 的思想,小模型为单路,使用 RepBlock 作为基础 block,大模型是多路结构,使用 CSPStackRep block 作为基础 block,同时改进了 PAN neck,提出了 Rep-PAN neck。借鉴了 YOLOX 解耦头的结构,也使用了解耦的 head。
  • 使用 self-distillation 方法来浸透 YOLOv6,其在分类和回归任务上都取得了好的效果,使用动态调制的方式在训练的过程中让学生网络更高效的从教师网络中学习知识
  • 大量的验证了目标检测的一些设计,如 backbone、label assignment、loss、data augmentation 等,并选择合适的放入 YOLOv6
  • 通过引入 RepOptimizer 和 channel-wise distillation 重新设计了目标检测的量化方式,在 batch size 为 32 时达到了 43.3% AP 和 869 FPS

一、背景

由于 YOLOV5/YOLOX/PP-YOLOE 等方法在效率和速度上仍然有很大的提升空间,所以美团提出了 YOLOv6,在精度和速度上都超越了 YOLOV5 和 YOLOX,并且支持 GPU(TensorRT)、CPU(OPENVINO)、ARM(MNN、TNN、NCNN)等不同平台的部署。

YOLOv6 主要是为了工业使用而产生的一项研究,融合了目前最无论是工业界还是学术界的很多先进的目标检测优质设计,包括训练策略、测试策略、量化和参数优化方法等,以便于适用不同场合和不同尺度,也便于部署的网络。

在这里插入图片描述

效果概览:

  • YOLOv6-N:在 COCO val2017 上达到 35.9% AP,T4 上达到了 1234 FPS
  • YOLOv6-S:在 COCO val2017 上达到 43.5% AP,T4 上达到了 495 FPS,超越了很多同尺度下的网络(YOLOv5-S, YOLOX-S and PPYOLOE-S)
  • 量化后的 YOLOv6-S:在 COCO 上达到 43.3% AP AP,T4 上达到了 869 FPS
  • YOLOv6-M/L:分别达到了 49.5% 和 52.3% AP,超越了同等速度下的其他方法

YOLO 系列算法回顾:

  • YOLOv1-v3,也是最初的 one-stage 检测器 YOLO 系列的开创者 Joseph Redmon 提出的,为后面的改进方法打了很好的基石
  • YOLOv4 将检测框架结构划分为 3 个部分:backbone、neck、head,然后使用了很多策略来设计了一个适合在单 GPU 上训练的网络结构
  • YOLOv5、YOLOX、PPYOLO、YOLOv7 都是为部署做了相关的工作,通过模型缩放的形式来适应于不同的场景

YOLOv6 主要做的工作如下:

  • 设计了对硬件友好的 backbone 和 neck:设计了更高效的 Backbone 和 Neck :基于 RepVGG style[4] 设计了可重参数化、更高效的骨干网络 EfficientRep Backbone 和 Rep-PAN Neck。
  • 有效的进行了 head 解耦:在维持精度的同时,进一步降低了一般解耦头带来的额外延时开销
  • 在训练策略上,采用Anchor-free 无锚范式,同时辅以 TAL(YOLOv6 第一版使用的 SimOTA[2] )标签分配策略以及 SIoU[9] 边界框回归损失来进一步提高检测精度。

二、 方法

YOLOv6 的改进集中在如下部分:

  • Network design
    • Backbone:RepVGG 很适合小网络,但很难扩展到大网络(参数爆炸),所以使用 RepBlock 作为小网络的基础 block,使用 CSPStackRep block 作为大网络的 block。
    • Neck:类似 YOLOv4 和 YOLOv5,使用 PAN 的结构,对大小网络都使用 Rep-PAN
    • Head:对 head 进行了解耦,使用 Efficient Decoupled Head
  • Label assignment:作者对很多方法都做了实验,最后选择了 TAL
  • Loss function:VariFocal 为分类 loss,SIoU/GIoU 为回归 loss
  • Data augmentation:Mosaic 和 Mixup
  • Industry-handy improvements:作者引入了 self-distillation 和 更多的 epochs 来提高性能。self-distillation 是每个学生网络的分类和回归都被教师网络监督。
  • Quantization and deployment:为了解决量化后的重参数化模型的性能下降问题,作者使用 RepOptimizer 的方法来得到 PTQ-friendly weights。

在这里插入图片描述

2.1 Network Design

单阶段目标检测器主要由 backbone、neck、head 构成:

  • backbone 用于提取特征,决定了模型的能力和计算量
  • neck 用于聚合 low-level 和 high-level 的特征,生成不同金字塔层级的特征图
  • Head 由几个 conv 组成,对于每个任务分别设计输出通道等

YOLOv6 中,基于对硬件友好的考虑,作者设计了两个 scaled 重参数化 backbone,decoupled head,总的结构见图 2。

1、Backbone:EfficientRep

  • 小模型:
    • 在训练中使用 Rep block,如图 3a
    • 在推理时使用 RepConv,3x3 卷积 + ReLU 堆积而成的结构,如图 3b
  • 大模型:
    • 使用 CSPStackRep block 来得到中/大模型,如图 3c,3 个 1x1 conv + 2 个 RepVGG(训练) / RepConv(测试) + 1 个残差通道

在这里插入图片描述

2、Neck:Rep-PAN

Neck 延续了 YOLOv4 及 YOLOv5 的架构——PAN,同样为了降低在硬件上的延时,在Neck上的特征融合结构中也引入了Rep结构,形成了 Rep-PAN

在这里插入图片描述

3、Head:Efficient decoupled head

YOLOv5 的分类和回归 head 就是解耦的,但两个 head 的参数是共享的,YOLOv6 使用【hybrid-channel】的策略来构建一个高效的 head。

具体的操作方法是:

  • 将中间的 3x3 conv layer 的数量降为 1
  • Head 的尺度和 backbone 及 neck 同大同小

在这里插入图片描述

4、Anchor-free

YOLOv6 中使用 anchor-point-based 的方式,也就是 box regression 分支是预测 anchor point 到 bbox 的四个边的距离。

5、网络结构的效果对比

下面是不同 Block 的效果对比:
在这里插入图片描述

  • YOLOv6-N:一个单分支的结构,超越了多分支结构,且速度和准确度都更高一些,尽管单分支的结构参数量和 FLOPs 都高于 multi-branch,但单分支速度更快的原因是因为其更低的内存占用和更高的并行度
  • YOLOv6-S:两种 block styles 效果是类似的

表 3 中展示了 neck 的不同宽度和深度下的模型效果,基于 YOLOv6-L,更长的 neck 会比更宽的 neck 获得 0.2% AP 提升。

在这里插入图片描述

表 4 展示了激活函数的对比:

在这里插入图片描述

  • 经过实验,YOLOv6 中用的最多的是 SiLU
  • 但当在实际使用和部署时,ReLU 速度更快一些,因为它和卷积是结合了的
  • 所以,在 YOLOv6-N/T/S/M 中,使用了 RepConv/ReLU 的方法,保证速度
  • 在 YOLOv6-L 中使用 Conv/SiLU 的结合方式,加速训练和提高效果

2.2 Label Assignment:TAL

SimOTA:

SimOTA 是 OTA 的简化版本,将标签分配问题构造成了一个最优传输问题,通过找到最优传输方式,来得到每个 anchor 和 gt 的匹配结果。YOLOv6 的早期版本其实是使用的 SimOTA 的,那个时候论文还没有放出来,只有 github 代码。但由于 SimOTA 会拉慢训练速度,容易导致训练不稳定,所以又寻找了代替的方法。

Task Alignment Learning:

TAL 是在 TOOD 中被提出的,其中设计了一个【分类得分和定位框质量的统一度量标准】,使用该度量结果代替 IoU 来帮助分配标签,有助于解决任务不对齐的问题,且更稳定,效果更好。

表 6 展示了不同的 label assignment 方法的效果对比,实验基于 YOLOv6-N:

在这里插入图片描述

  • SimOTA 和 TAL 表现都不错
  • SimOTA 比 ATSS 多了 2% AP
  • TAL 比 SimOTA 多了 0.5% AP

warm-up 策略效果对比:
在这里插入图片描述

  • TOOD 中,在训练前期,采用了 ATSS 作为 warm-up label assignment 的策略
  • YOLOv6 中作者也进行了相关实验,但没有更好

2.3 Loss function

1、classification loss:VariFocal Loss (VFL)

VariFocal Loss (VFL) 也是从 Focal loss 演变而来的,其将正样本和负样本区别对待,认为两者重要性不同,让模型较为平等的从两种样本中学习。

在这里插入图片描述

2、regression loss:YOLOv6-N 和 -T 使用 SIoU,其他使用 GIoU

Regression loss 可以大体分为两类: IoU-series(SIoU/alpha-IoU/DIoU 等)和 Probability-series(GFocal)

在这里插入图片描述
在这里插入图片描述

作者对比了很多 loss,最终是在:

  • YOLOv6-N 和 -T 使用 SIoU
  • 其他使用 GIoU

3、Object loss:

Object loss 首次提出是在 FCOS 中,用于降低 low-quality bbox 的得分,利于在 NMS 中过滤掉, YOLOX 中使用了该 loss 来加速收敛并提升准确性,但 YOLOv6 中使用同样的方法后并无收益。

在这里插入图片描述

2.4 Industry-handy improvements

在实际使用中,可以使用一些技巧来提升。

1、训练更多的 epochs

实验数据证明了更多的训练 epochs 有助于提升效果,从 300 扩大到 400 后,有了提升

在这里插入图片描述

2、Self-distillation

为了提高模型效果,但不引入额外开销,作者使用了 KL 散度作为衡量学生网络和教师网络分布的指标。

为什么叫做 self-distillation 呢?就是因为这里 学生网络=教师网络。

KL 散度可以用来衡量数据分布的差异,所以只能适用于分类结果,作者又参照了 DFL loss,也将其用于回归结果的衡量,故总的衡量方法为:

在这里插入图片描述

所以,回归 loss 为:

在这里插入图片描述

在这里插入图片描述

3、Gray border of images

YOLOv5 和 YOLOv7 评估模型性能时,每个图像周围都有一个半步长的灰色边框(gray border)。虽然没有添加有用的信息,但它有助于检测图像边缘附近的对象。

然而,额外的灰色像素明显降低了推理速度。没有灰色边框,YOLOv6 的性能会变差。假设该问题与马赛克增强中的灰色边框填充有关。进行了在最后一个时期关闭马赛克增强的实验(也称为淡入淡出策略)以进行验证。对此,改变了灰色边框的区域,将带有灰色边框的图像直接调整为目标图像大小。结合这两种策略,模型可以在不降低推理速度的情况下保持甚至提高性能。

在这里插入图片描述
在这里插入图片描述

2.5 量化和部署

在实际工业部署的时候,通常会对模型进行量化加速,Post-training quantization(PTQ)直接使用很小的量化集来量化模型。QAT 能够利用训练集来进一步的提升量化模型效果,一般和蒸馏联合使用,YOLOv6 由于使用了非常多的重参数化,PTQ 已经难以保持良好的效果,且难以和 QAT 配合使用。故只使用了 QAT。

1、Reparameterizing Optimizer

RepOptimizer 提出了在每次训练的时候进行梯度重参数化,该方法能够较好的解决基于重参数化的模型。

所以 YOLOv6 中就使用了 RepOptimizer 用于获得 PTQ-friendly 的权重,其特征的分布是非常狭窄的(图 4 B1),能够有利于量化。

在这里插入图片描述
在这里插入图片描述

2、Sensitivity Analysis

作者又将部分对量化敏感的操作转换成了浮点计算

为了得到敏感性分布,作者使用了 mean-square error (MSE), signal-noise ratio (SNR) 和 cosine similarity。

在这里插入图片描述

在这里插入图片描述

3、Quantization-ware Training with Channel-wise Distillation

在第一版本的 YOLOv6 中使用的 PTQ 的效果如下:

在这里插入图片描述

因为 PTQ 是不全面的,所以作者也引入了 quantization-aware training(QAT)来提升性能。

作者在 non-sensitive 层上使用了【假量化器】,来实现 quantization-aware training(partial QAT)

在这里插入图片描述

在第二版本的 YOLOv6 中,移除了 quantization-sensitive layers,直接使用了 full QAT 并基于 RepOptimizer 来训练 YOLOv6-S。

在这里插入图片描述

为了解决训练和推理的量化不一致问题,上面已经建立了 QAT,此外,也对同一个网络进行了自蒸馏,FP32 精度的作为教师网络,INT8 精度的作为学生网络,在教师和学生网络上进行了通道蒸馏。

在这里插入图片描述

三、效果

和 SOTA 的对比:

  • 相比 YOLOv5-N/YOLOv7-Tiny (input size=416),YOLOv6-N 分别提升了 7.9% 和 2.6%,也达到了最高的速度。
  • 相比 YOLOX-S/PPYOLOE-S, YOLOv6-S 分别提升了 3.0% 和 0.4%
  • 相比 YOLOv5-S 和 YOLOv7-Tiny (input size=640),YOLOv6-M 在同等速度的情况下高了 4.2% AP
  • 相比 YOLOX-M/PPYOLOE-M,YOLOv6-M 更快,且分别高了 2.7% 和 0.6% AP
  • 相比 YOLOX-L/PPYOLOE-L/YOLOv7,YOLOv6-L-Relu 达到了 51.7% AP,超越了前面几个方法

在这里插入图片描述

  • 0
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆呆的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值