Paper: https://arxiv.org/pdf/2301.05586.pdf
Code: https://github.com/meituan/YOLOv6
引言
没啥好说的,YOLO
这发新的速度,股市打新都没这么猛,卷王来了都不敢吭声。今天主要是带大家光速过一遍 YOLOv6 v3.0 版本带来了更新,不做技术解读,先占个坑。
YOLOv8 才正式宣布开源没几天,YOLOv6 就在新年到来前发布版本了,该版本主要是对网络架构和训练方案进行了改进。
其中:
YOLOv6-N
在 COCO 数据集上以1187 FPS
的吞吐量在NVIDIA Tesla T4 GPU
上测试达到了 `37.5%`` 的 AP。YOLOv6-S
在484
FPS 下达到 `45.0%`` AP,优于同等规模的其他主流检测器(YOLOv5-S、YOLOv8-S、YOLOX-S 和 PPYOLOE-S)。- 在接近的推理速度下,
YOLOv6-M/L
也比其他检测器实现了更好的精度性能(分别为 50.0%/52.8%)。
此外,通过扩展的骨干网络(Backbone)和颈部(Head)设计,YOLOv6-L6
最终实时实现了 YOLO
家族的 SOTA
。好了,留给百度的时间已经不多了,现在离 2023 年农历新年还有6天。
贡献
- 应用双向串联(BiC)模块更新了检测器的颈部,以提供更准确的定位信号。
- 将 YOLOv5/v8 中的
SPPF
模块简化为SimCSSPSPP
模块,在速度几乎保持不变的同时提升精度。 - 提出了一种
anchor-aided
的辅助训练(AAT)策略,以在不影响推理效率的情况下同时享受到Anchor-based
和Anchor-free
范式的优势。 - 将 YOLOv6 的 Backbone 和 Head 加多一个 Stage,以加强高分辨率输入图像的性能。
- 采用了一种新的自蒸馏策略来提高 YOLOv6 小模型的性能,其中 DFL 的较重分支在训练期间被用作增强的辅助回归分支,并在推理时被移除以避免显着的速度下降。
方法
YOLOv6 v3.0 Framework
Network Design
在实践中,多尺度特征集成已被证明是目标检测的关键和有效组成部分。特征金字塔网络(FPN)被提议通过自上而下的路径聚合高级语义特征和低级特征,从而提供更准确的定位。随后,为了增强分层特征表示的能力,在双向 FPN 上出现了新的工作,如 PANet、BiFPN 等。
PANet 在 FPN 之上添加了一个额外的自底向上路径,以缩短低级和顶层特征的信息路径,这有助于从低级特征传播准确的信号。BiFPN 则为不同的输入特征引入了可学习的权重,并简化了 PAN 以实现更好的性能和更高的效率。PRB-FPN 被提议通过具有双向融合和相关改进的并行 FP 结构来保留高质量的特征以进行准确定位。
受上述工作的启发,YOLOv6
设计了一个增强型 PAN 作为该网络架构的检测 Head。为了在不带来过多计算负担的情况下增强定位信号,提出了一个双向连接模块来聚合三个相邻层的特征图,它将来自主干 的额外低级特征融合到 中。在这种情况下,可以保留更准确的定位信号,这对于小物体的定位具有重要意义。
此外,作者将 SPPF
模块简化为类似 CSP 的版本,称为 SimCSSPPPF
模块,增强了特征表示能力。特别的,通过缩小隐藏层的通道和 SPP 来修改 YOLOv7
中的 SimSPPCSPC
块。最后,再将 CSPBlock
升级为 RepBlock
(适用于小型模型)或 CSPStackRepBlock
(适用于大型模型),并相应地调整宽度和深度。
总的来说,YOLOv6 的颈部命名为 RepBi-PAN
,其框架如上图所示。
Anchor-Aided Training
YOLOv6
是一个 anchor-free
检测器,追求更高的推理速度。然而,通过实验发现,与 anchor-free
模式相比,anchor-base
的范式在相同设置下为 YOLOv6-N
带来了额外的性能提升,如下表所示:
神奇了
此外,采用 anchor-base
范式的 ATSS 作为 YOLOv6 早期版本中的 warm-up label assignment strategy
,可以稳定训练,厉害了。
鉴于此,本文提出了锚定辅助训练(AAT),其中引入了基于锚定的辅助分支以结合基于锚定和无锚定范式的优点。它们同时应用于分类和回归头,下图清晰的显示了带有辅助装置的检测头:
在训练阶段,辅助分支和无锚框分支从独立的损失中学习,同时一同反馈信号。因此,来自辅助分支的辅助嵌入式引导信息将会被集成到 anchor-free heads 中。
Self-distillation
在 YOLOv6 的早期版本中,自蒸馏仅在大型模型(即 YOLOv6-M/L)中引入,它通过最小化教师和学生的类别预测之间的 KL 散度来应用普通知识蒸馏技术。同时采用 DFL 作为回归损失,对框回归执行类似于 LD 中提出的自蒸馏方法。其中,知识蒸馏的损失函数定义如下:
这里 和 分别表示教师和学生模型对应的分类和回归损失。
因此,总的损失函数可抽象为:
超参数 的引入是用来平衡两个损失。在训练初期,教师的软标签更容易学习。随着训练的继续,学生的表现将与老师相匹配,这样一来硬标签将对学生有更多帮助。在此基础上,可以将余弦权重衰减应用于 以动态调整来自硬标签和来自教师的软标签的信息。 的公式可定义如下:
这里, 和 分别表示当前epoch和最大的epoch数。
值得注意的是,DFL 的引入需要回归分支的额外参数,这会显着影响小模型的推理速度。因此,YOLOv6 专门为小型模型设计了解耦局部蒸馏 (DLD),在不降低速度的情况下提高性能。
具体来说,其附加了一个重辅助增强回归分支来合并 DFL。在自蒸馏过程中,学生配备了朴素回归分支和增强回归分支,而教师仅使用辅助分支。需要注意的是,这里朴素回归分支仅使用硬标签进行训练,而辅助分支根据来自教师和硬标签的信号进行更新。蒸馏后,朴素回归分支被保留,而辅助分支被移除。通过这种策略,在不影响推理效率的情况下,DFL 在蒸馏中的重回归分支的优势得到了相当大的保持。
实验
Performance comparison with SOTA methods
废话不多说,反正全面吊打就对了。
Ablation Study
总结
YOLOv6 v3.0
版本主要创新点还是集中在网络设计和训练策略这两方方面改进,这些方法极大的推动了 YOLOv6 达到实时目标检测的最新精度。整体来说创新性不是很足,但实验部分做得还算 Solid,主要还是偏向于工程实践,借用凯明最喜欢用的一句话就是:"Without bells and whistles."。挺不错的,代码也已经开源了,大家赶紧用起来。