在大家都在关注大模型的新突破时,YOLO这块古战场也出了个新版本:YOLOv12,一作是纽约州立大学水牛城分校的博后。YOLO这块的故事已经比较难写了,目前成熟度通用性最高的版本是ultralytics的YOLOv11,YOLOv12这篇文章的核心切入点是将注意力和实时检测器进行结合,代码也是基于v11构建的,因此可能会有一些启发作用。
本文标题:YOLOv12: Attention-Centric Real-Time Object Detectors
论文地址:https://arxiv.org/abs/2502.12524
开源代码:https://github.com/sunsmarterjie/yolov12
1. 性能直观展示
YOLO系列的文章都有个特点,上来先不谈背景,先放一张在标准数据集MS COCO上的性能对比图。本文也遵循了这一传统,性能直观表现如下图所示:
YOLOv12同样有n、s、m、l、x五个不同大小的版本,对应图中红色曲线的五个点。
先看纵轴,表明模型在COCO数据集上的性能指标,可以看到红色曲线略微超过次优的v11,说明此版本性能上并没有太大突破。
再看横轴,在相同大小的点上,红色曲线的点比其它点略靠右,说明加了一些额外的注意机制后,模型的参数量和大小是略有增加的,但增加的很少。
看完这张图,基本可以对模型的表现做一个直观评价:YOLOv12并没有较大的性能进步or工程创新。
2. 概述
注意力机制如(ViT系列架构)已被证明在建模能力上具有显著优势,但一直没有在YOLO等主流实时检测器上去采用,主要原因是在CNN上,注意力的计算效率不足。
这个不足主要有两方面的原因:
- 直接将注意力机制应用到CNN,存在额外的计算复杂度
- 注意力机制内存访问低效(此点已被FlashAttention解决)
对此,本文提出了以下三点核心改进:
- 提出区域注意力模块A2,解决注意力计算复杂度过高的问题
- 残差高效层聚合网络R-ELAN,主要解决引入注意力后,训练时容易产生的梯度问题
- 架构改进,包含一些小trick,比如引入FlashAttention以克服注意力内存访问问题,调节MLP比例参数等小改进。
3. 主要方法
3.1 效率问题分析(Efficiency Analysis)
此节是对概述中提到的效率问题的进一步解释。
上节提到,效率问题可以分成两部分:计算复杂度问题和内存访问低效问题
计算复杂度:主要是自注意力的操作会随序列长度L呈二次方增长,这点其实无需过多解释,在NLP中,每一个Token和其它token都需要计算一次复杂度,在CV中,如果直接搬进来,那就是每个像素点和其它像素点做注意力,图片越大复杂度越高。
内存访问低效:主要原因是在做注意力计算时,需要将注意力矩阵从高速GPU SRAM(实际计算位置)存储至高带宽GPU内存(HBM)。SRAM的计算读写速度时HBM的十倍以上,导致开销和耗时增加。
3.2 区域注意力(Area Attention)
区域注意力的概念并不复杂,上一节提到,对图像来说,直接计算像素间的注意力很不现实,计算量太大,那么,减轻计算量的方式就是将相近的像素点合成一个整体。已经有很多种合成方式,如下图所示:
- Criss-cross attention:将每张图片的特征图,按照一行+一列的形式分组
- Window attention:用窗口来聚合注意力,有点类似swin-transformer的思路
- Axial attention:轴向注意力,具体未看,看图片似乎是对Criss-cross attention的进一步优化
下图中的最后一组图为本文提出的区域注意力,看起来是对Axial attention
的扩充,对于一张图片,分成(H/L,W)或(H,W/L)的条段,即横向分或纵向分成长度为L的段,这里的长度L根据经验取值为4。
3.3 残差高效层聚合网络(Residual Efficient Layer Aggregation Networks)
提出这个R-ELAN的原因是,在使用原始的ELAN进行训练时,即便使用了Adam/AdamW优化器,仍出现了L/X规模模型难以收敛或训练不稳定的情况。
作者提出的 R-ELAN 结构和其它对比结构如下图所示。不难看出,以往的结构均是将特征图分成两部分,一部分直接通过多个模块进行后续特征处理,另一部分通过1x1的卷积核,调整通道维度,最后将原始信息合并到最后特征中。
这里R-ELAN的方式是,不再用1x1卷积核的方式去处理特征,而是用类似残差的方式,直接将原始特征加都后面拼接。这里这样设计的目的估计还是受到Resnet的影响,因为残差结构的提出主要就是解决梯度问题,这里也很自然的用上了。
3.4 架构改进(Architectural Improvements)
架构改进是指一些对整体网络细小调整,包括:
- 调整主干网络最后三个块,仅保留单个R-ELAN,降低总块数,从而在计算和性能方面达到一定均衡
- 调整MLP 比例从4调整到1.2
- 用
nn.Conv2d + BN
替代nn.Linear + LN
的结构,提升计算效率,这里应该是指注意力计算的相关模块调整,因为原本的YOLO网络中应该不存在nn.Linear + LN
的形式,早已被优化了 - 移除位置编码,引入7x7大小的卷积,辅助区域注意力感知位置
这部分看起来都是一些细枝末节的小改进,结合代码可能会看得更加清晰一些。
4. 实验
在COCO标准数据集上进行实验,实验对比结果已经在开头直观看过了,这里进一步放了更具体的数据:
除主要性能对比之外,本文还比较了不同模型在不同显卡下的推理速度,下表分别展示了FP32/FP16精度推理的延时。
此外,本文除各项消融实验外,还以表格形式展示了超参数设置,这点做的非常清晰:
最后,本文可视化了注意力的热力图形式,这里使用X型号的模型,可视化并放大了局部热力图细节,可以看到v12的物体轮廓更清晰,这里个人感觉应该标注一下具体的检测对象及范围,因为注意力的引入目的使模型更加关注目标对象,这里的一些图像存在多个目标,看上去不是很直观。
总结
如题所示:这篇文章看起来的核心点只是引入一个区域注意力的机制,其它的R-ELAN和架构改进均是为了此点进行服务。创新点并不是很足,效果也没有特别出色。相比于其它文章,比如提出一种全新网络设计的文章来说,从审稿角度,略显劣势。亮点是此文写作框架比较清晰,文笔也很流畅,实验的设置/评估/展现均很规范,值得学习借鉴。
YOLO系列基本已到了尽头,性能/效率/多任务,各种角度都已经被基本穷尽,此文的切入点是不影响效率角度下的性能提升,也算是“夹缝求生”了。从学术角度而言,改进YOLO显然已成昨日黄花,渐已过时。
参考资料
[1] YOLOv12:以注意力为中心的实时目标检测器
https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/145725555
[2] YOLO已经悄悄来到v12,首个以Attention为核心的YOLO框架问世
https://mp.weixin.qq.com/s/DGVybcJMnrWyW1ceOcIaaQ