论文: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
贡献:
由于 YOLOV5/YOLOX/PP-YOLOE 等方法在效率和速度上仍然有很大的提升空间,所以美团提出了 YOLOv6,在精度和速度上都超越了 YOLOV5 和 YOLOX,并且支持 GPU(TensorRT)、CPU(OPENVINO)、ARM(MNN、TNN、NCNN)等不同平台的部署。
YOLOv6 主要是为了工业使用而产生的一项研究,融合了目前最无论是工业界还是学术界的很多先进的目标检测优质设计,包括训练策略、测试策略、量化和参数优化方法等,以便于适用不同场合和不同尺度,也便于部署的网络。
效果概览:
YOLO 系列算法回顾:
YOLOv6 主要做的工作如下:
YOLOv6 的改进集中在如下部分:
单阶段目标检测器主要由 backbone、neck、head 构成:
YOLOv6 中,基于对硬件友好的考虑,作者设计了两个 scaled 重参数化 backbone,decoupled head,总的结构见图 2。
1、Backbone:EfficientRep
2、Neck:Rep-PAN
Neck 延续了 YOLOv4 及 YOLOv5 的架构——PAN,同样为了降低在硬件上的延时,在Neck上的特征融合结构中也引入了Rep结构,形成了 Rep-PAN
3、Head:Efficient decoupled head
YOLOv5 的分类和回归 head 就是解耦的,但两个 head 的参数是共享的,YOLOv6 使用【hybrid-channel】的策略来构建一个高效的 head。
具体的操作方法是:
4、Anchor-free
YOLOv6 中使用 anchor-point-based 的方式,也就是 box regression 分支是预测 anchor point 到 bbox 的四个边的距离。
5、网络结构的效果对比
表 3 中展示了 neck 的不同宽度和深度下的模型效果,基于 YOLOv6-L,更长的 neck 会比更宽的 neck 获得 0.2% AP 提升。
表 4 展示了激活函数的对比:
SimOTA:
SimOTA 是 OTA 的简化版本,将标签分配问题构造成了一个最优传输问题,通过找到最优传输方式,来得到每个 anchor 和 gt 的匹配结果。YOLOv6 的早期版本其实是使用的 SimOTA 的,那个时候论文还没有放出来,只有 github 代码。但由于 SimOTA 会拉慢训练速度,容易导致训练不稳定,所以又寻找了代替的方法。
Task Alignment Learning:
TAL 是在 TOOD 中被提出的,其中设计了一个【分类得分和定位框质量的统一度量标准】,使用该度量结果代替 IoU 来帮助分配标签,有助于解决任务不对齐的问题,且更稳定,效果更好。
表 6 展示了不同的 label assignment 方法的效果对比,实验基于 YOLOv6-N:
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,最终是在:
3、Object loss:
Object loss 首次提出是在 FCOS 中,用于降低 low-quality bbox 的得分,利于在 NMS 中过滤掉, YOLOX 中使用了该 loss 来加速收敛并提升准确性,但 YOLOv6 中使用同样的方法后并无收益。
在实际使用中,可以使用一些技巧来提升。
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 的性能会变差。假设该问题与马赛克增强中的灰色边框填充有关。进行了在最后一个时期关闭马赛克增强的实验(也称为淡入淡出策略)以进行验证。对此,改变了灰色边框的区域,将带有灰色边框的图像直接调整为目标图像大小。结合这两种策略,模型可以在不降低推理速度的情况下保持甚至提高性能。
在实际工业部署的时候,通常会对模型进行量化加速,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 的对比: