本文介绍了一种新的高效目标检测模型Gold-YOLO。过去几年中,YOLO系列模型已成为目标检测领域的标杆,然而,之前的模型仍然存在信息融合问题。因此,本研究提出了一种先进的Gather-and-Distribute(GD)机制,完成高效的信息交互和融合,在所有模型尺度上实现了延迟和准确性的理想平衡。此外,该研究首次在YOLO系列模型中实现了MAE风格的预训练,用以提升模型的收敛速度和精度。
论文链接:https://arxiv.org/abs/2309.11331
PyTorch代码:https://github.com/huawei-noah/Efficient-Computing/tree/master/Detection/Gold-YOLO
MindSpore代码:https://gitee.com/mindspore/models/tree/master/research/cv/Gold_YOLO
引言
YOLO系列模型面世至今已有8年,由于其优异的性能,已成为目标检测领域的标杆。在系列模型经过十多个不同版本的改进发展逐渐稳定完善的今天,研究人员更多关注于单个计算模块内结构的精细调整,或是head部分和训练方法上的改进。但这并不意味着现有模式已是最优解。
当前YOLO系列模型通常采用类FPN方法进行信息融合,而这一结构在融合跨层信息时存在信息损失的问题。针对这一问题,我们提出了全新的信息聚集-分发(Gather-and-Distribute Mechanism)GD机制,通过在全局视野上对不同层级的特征进行统一的聚集融合并分发注入到不同层级中,构建更加充分高效的信息交互融合机制,并基于GD机制构建了Gold-YOLO。在COCO数据集中,我们的Gold-YOLO超越了现有的YOLO系列,实现了精度-速度曲线上的SOTA。
一、传统YOLO的问题
在检测模型中,通常先经过backbone提取得到一系列不同层级的特征,FPN利用了backbone的这一特点,构建了相应的融合结构:不层级的特征包含着不同大小物体的位置信息,虽然这些特征包含的信息不同,但这些特征在相互融合后能够互相弥补彼此缺失的信息,增强每一层级信息的丰富程度,提升网络性能。
原始的FPN结构由于其层层递进的信息融合模式,使得相邻层的信息能够充分融合,但也导致了跨层信息融合存在问题:当跨层的信息进行交互融合时,由于没有直连的交互通路,只能依靠中间层充当“中介”进行融合,导致了一定的信息损失。之前的许多工作中都关注到了这一问题,而解决方案通常是通过添加shortcut增加更多的路径,以增强信息流动。
然而传统的FPN结构即便改进后,由于网络中路径过多,且交互方式不直接,基于FPN思想的信息融合结构仍然存在跨层信息交互困难和信息损失的问题。
二、Gold-YOLO:全新的信息融合交互机制
因此我们提出了一种全新的信息交互融合机制:信息聚集-分发机制(Gather-and-Distribute Mechanism)。该机制通过在全局上融合不同层次的特征得到全局信息,并将全局信息注入到不同层级的特征中,实现了高效的信息交互和融合。在不显著增加延迟的情况下GD机制显著增强了Neck部分的信息融合能力,提高了模型对不同大小物体的检测能力。GD机制通过三个模块实现:信息对齐模块(FAM)、信息融合模块(IFM)和信息注入模块(Inject)。
- 信息对齐模块负责收集并对齐不同层级不同大小的特征
- 信息融合模块通过使用卷积或Transformer算子对对齐后的的特征进行融合,得到全局信息
- 信息注入模块将全局信息注入到不同层级中
在Gold-YOLO中,针对模型需要检测不同大小的物体的需要,并权衡精度和速度,我们构建了两个GD分支对信息进行融合:低层级信息聚集-分发分支(Low-GD) 和高层级信息聚集-分发分支(High-GD),分别基于卷积和transformer提取和融合特征信息。此外,为了促进局部信息的流动,我们借鉴现有工作,构建了一个轻量级的邻接层融合模块,该模块在局部尺度上结合了邻近层的特征,进一步提升了模型性能。我们还引入并验证了预训练方法对YOLO模型的有效性,通过在ImageNet 1K上使用MAE方法对主干进行预训练,显著提高了模型的收敛速度和精度。
三、实验结果
我们在COCO数据集上测试了模型的精度,并使用Tesla T4+TensorRT 7测试了模型的速度,结果显示我们的Gold-YOLO在精度-速度曲线上取得了当前的SOTA结果。
同时我们针对Gold-YOLO中不同分支和结构对模型精度和速度的影响,进行了相应的消融实验。
为了验证GD机制在不同模型和任务中的鲁棒性,我们还进行了以下实验
3.1实例分割任务
将Mask R-CNN中的Neck部分替换为GD,并在COCO instance 数据集上进行训练和测试
3.2语义分割任务
将PointRend 中的Neck部分替换为GD,并在Cityscapes 数据集上进行训练和测试
3.3不同的目标检测模型
将 EfficientDet 中的Neck部分替换为GD,并在COCO数据集上进行训练和测试
作者:王云鹤
来源:
https://zhuanlan.zhihu.com/p/657742732