目标检测——YOLOv12算法解读

论文:YOLOv12: Attention-Centric Real-Time Object Detectors (2025.2.18)
作者:Yunjie Tian, Qixiang Ye, David Doermann
链接:https://arxiv.org/abs/2502.12524
代码:https://github.com/sunsmarterjie/yolov12


YOLO系列算法解读:
YOLOv1通俗易懂版解读、SSD算法解读、YOLOv2算法解读、YOLOv3算法解读、YOLOv4算法解读、YOLOv5算法解读、YOLOR算法解读、YOLOX算法解读、YOLOv6算法解读、YOLOv7算法解读、YOLOv8算法解读、YOLOv9算法解读、YOLOv10算法解读、YOLO11算法解读、YOLOv12算法解读

PP-YOLO系列算法解读:
PP-YOLO算法解读、PP-YOLOv2算法解读、PP-PicoDet算法解读、PP-YOLOE算法解读、PP-YOLOE-R算法解读

R-CNN系列算法解读:
R-CNN算法解读、SPPNet算法解读、Fast R-CNN算法解读、Faster R-CNN算法解读、Mask R-CNN算法解读、Cascade R-CNN算法解读、Libra R-CNN算法解读


文章目录

  • 1、算法概述
  • 2、YOLOv12算法细节
    • 2.1 区域注意力机制Area Attention
    • 2.2 残差高效聚合网络Residual Efficient Layer Aggregation Networks
    • 2.3 整个YOLO网络结构优化
  • 3、代码解析
  • 4、实验


1、算法概述

虽然现如今自注意机制在建模能力方面具有优势,但在速度方面仍然不能和传统CNN结构相比,所以以往的YOLO结构都专注于利用CNN进行改进,而YOLOv12的作者提出利用自注意力机制对YOLO结构进行优化。相比于之前YOLO系列以及DETR系列,在推理速度、COCO数据集上mAP及Flops数量上都具有优势。如下图所示:
在这里插入图片描述
YOLOv12主要改进有如下几点:
1、 提出了区域注意力模块(area attention module, A2),在保持较大感受野的前提下减少了计算复杂度。
2、 引入残差高效聚合模块(residual efficient layer aggregation networks, R-ELAN)解决训练过程中注意力优化问题。它是基于YOLOv7中的ELAN模块进行了两点改进:(1)、block级别的缩放加残差连接;(2)、重新设计的聚合方式。
3、 基于整个YOLO架构也做了些优化改进,包括:引入flashattention、去除位置编码引入可分离卷积、调整MLP比率并用卷积替换全连接、减少堆叠块的数量。


2、YOLOv12算法细节

YOLO12网络结构如下所示
在这里插入图片描述

YOLOv12是基于ultralytics开发的,对比YOLO11的yaml配置文件,可以看出两者的不同之处。左边为YOLO11,右边为YOLOv12。
在这里插入图片描述
可以看到,在backbone中,YOLOv12将YOLO11中最后两个C3k2替换成了新提出的A2C2f,并且去掉了SPPF和C2PSA模块。而在head中,除了最后一个C3k2,也是将YOLO11中其余的C3k2替换成了A2C2f。

2.1 区域注意力机制Area Attention

图像自注意力(self-attention)天生就比CNN慢,这由下面两个因素造成的,复杂度和计算方式。
自注意机制运算的计算复杂度与输入序列长度L成二次关系,所以对于高分辨率图像或者长序列来讲,复杂度会成倍增加,再加上图像切块操作和位置编码等额外操作也会增加整体耗时。自注意力机制在计算过程中会需要比CNN计算更大的显存来缓存注意力图(QK矩阵)和softmax图(LxL)。由于二次方计算复杂性和低效的内存访问这两个因素,共同导致自注意力机制比CNN慢。所以很多研究者提出了对自注意力机制计算的优化,如下图所示。
在这里插入图片描述
对比“交叉注意力”、“局部窗口注意力”、“轴方向注意力”作者提出了区域注意力,在保持较大感受野的前提下也同时减少了自注意力计算复杂度,图中作者将图片按水平或者垂直方向分成了4块,可以将原来的2n2hd变成0.5n2hd,对于YOLO的输入640x640而言,n是固定的640,可以达到实时处理,并且对精度影响不大。

2.2 残差高效聚合网络Residual Efficient Layer Aggregation Networks

作者参考了YOLOv7的ELAN结构对其进行改进,如下图d所示:
在这里插入图片描述
作者认为ELAN这种架构可能会引入不稳定性,这样的设计会导致梯度阻塞,并且缺乏从输入到输出的残差连接,而且为了精简计算,作者去掉了ELAN最开始的split操作。

2.3 整个YOLO网络结构优化

1、作者取消了backbone最后部分的三个blocks的堆叠,这点可以对比YOLO11的结构看出。
2、作者还调整了MLP的比率,由4减小到1.2,并且为了得到更高效的性能,将原来的nn.Linear+LN操作替换成了nn.Conv2d+BN操作。
3、作者移除了位置编码操作,增加了一个7x7的可分离卷积来帮助区域注意感知位置信息。


3、代码解析

其实YOLOv12的主要创新点就是提出了加速的区域自注意力机制(Area Attention)并且应用在R-ELAN模块中,R-ELAN的实现在官方代码https://github.com/sunsmarterjie/yolov12/blob/main/ultralytics/nn/modules/block.py中,如下:
在这里插入图片描述
A2C2f模块就是论文提到的R-ELAN模块,它主要包含了ABlock,也就是论文中的A2,A2就是区域注意力模块,代码如下:
在这里插入图片描述
这里可以看到这里的AAttn模块使用了area参数进行自注意力的计算,而且MLP也是像论文中提到的一样,作者改成了Conv操作。


4、实验

Comparison with State-of-the-arts
在这里插入图片描述
作者直接给出了一张对照表,按照多个尺度规模模型去对比YOLOv6,YOLOv8,YOLOv10,YOLO11以及RT-DETRv1/v2,结果表明,在FLOPs减少的情况下,mAP具有提升。

消融实验
关于R-ELAN模块的消融实验如下表所示:
在这里插入图片描述
作者得出的结论有两个:
1、针对小规模模型比如YOLOv12-N,残留连接不会影响收敛,但会降低性能。相比之下,对于较大规模模型比如YOLOv12-L/X,它们对于稳定的训练是必不可少的。特别是YOLOv12-X要求最小的缩放因子0.01以保证收敛。
2、作者提出的特征聚合方式可以有效地降低了模型在FLOPs和参数方面的复杂性,但是会略微带来精度下降。

关于Area Attention作者在GPU/CPU上进行了速度方面的消融实验,如下表所示:
在这里插入图片描述
可以看到,无论是GPU或者CPU情况下,Area Attention相对于原始的自注意力机制都带来了加速的效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/84582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaEE-Maven

maven Maven是⼀个项⽬管理⼯具, 通过pom.xml⽂件的配置获取jar包,⽽不⽤⼿动去添加jar包。 maven简单, ⽅便, 提⾼我们的开发效率, 减少我们的开发Bug。 IDEA本⾝已经集成了Maven, 我们可以直接使⽤, ⽆需安装。 创建maven项目 name是项目名 location是项目路径 …

使用 C/C++的OpenCV 实时播放火柴人爱心舞蹈动画

使用 C/OpenCV 实时播放火柴人爱心舞蹈动画 本文将介绍如何使用 C/OpenCV 库实时创建一个动画窗口:一个火柴人捧着爱心跳舞,同时另一个爱心从远处飞来并逐渐变大。动画会实时在 OpenCV 窗口中播放,直到用户按下按键退出。 准备工作 确保你…

复现论文报错解决

文章目录 一、 The detected CUDA version (12.9) mismatches the version that was used to compile PyTorch (11.8)二、error -- unsupported GNU version! gcc versions later than 11 are not supported!三、Unknown encoder libx264四、下载速度太慢、无法递归下载项目 一…

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …

MPMA:Preference Manipulation Attack Against Model Context Protocol

概要 MCP作为提供给LLM作为工具调用的标准化协议被广泛应用,但是MCP在安全方面还比较脆弱。本文提出了一种MPMA攻击方法通过在工具的名字或描述中插入具有操控性的文字、短语来操控LLM选择MCP server的过程。 不了解MCP的具体细节可以看看我写的这篇文章MCP 场景…

Vim 替换命令完整学习笔记

Vim 替换命令完整学习笔记 文章目录 Vim 替换命令完整学习笔记1. 核心概念2. 替换命令基本语法2.1 基本格式2.2 分隔符选择2.3 范围指定 3. 替换标志详解3.1 基础标志3.2 高级标志3.3 标志组合 4. 正则表达式在替换中的应用4.1 基础正则表达式4.2 字符类和量词4.3 分组和引用 5…

@RequestBody和@ResponseBody注解的作用是什么

@RequestBody和@ResponseBody注解的作用是什么 文章目录 @RequestBody和@ResponseBody注解的作用是什么@RequestBody和@ResponseBody注解的作用是什么SpringMVC的请求与响应模型1. 请求的处理流程1.1 DispatcherServlet作为入口1.2 Handler处理器与Controller1.3 HandlerAdapte…

质因数分解_java

什么是质因数? 说的通俗一点就是,这个数既是因数,又是质数。但是1不是质因数(不是质数)。然后比如122*2*3,里边的2,3都是质数,并且也是12的因数,所以2、3就是12的质因数。 因为本人很菜&#xf…

SpringDoc集成到Springboot

1.Maven引入jar包 <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1.6.14</version> </dependency> 2.新建OpenApiConfig文件&#xff0c;代码如下 package com.elan…

Memory Repair (五)

Compression Algorithm and Fuse Box Organization 通常情况下&#xff0c;这部分信息对于实现BISR&#xff08;内置自修复&#xff09;并非必需&#xff0c;但对于诊断问题可能有所帮助。 Compression and Fuse Box Organization Overview BISR controller采用的压缩算法基于两…

双系统(win+linux)根目录扩容(不掉GPU驱动)

先看效果&#xff0c;原来的根目录仅50G&#xff0c;从/home节点分出扩容后变为250GB&#xff1b; 因为根分区是系统当前运行的文件系统&#xff0c;Linux系统启动后会锁定根分区&#xff0c;防止对其进行修改。这时使用系统内的工具&#xff08;如gparted&#xff09;调整根分…

oracle 23ai对象注释新特性ANNOTATIONS

我们知道以前数据库版本注释方式是用COMMENT&#xff0c;如下 COMMENT ON COLUMN 表名.字段名 IS 字段注释; oracle 23ai对象注释有新增了ANNOTATIONS&#xff0c;比如创建如下表&#xff1a; SQL> create table test.t_user( id number, name varchar(200) ANNOTATIONS …

VMware 虚拟机开机自启动配置指南

方法一&#xff1a;通过启动文件夹设置&#xff08;简单版&#xff09; 打开启动文件夹&#xff1a; 按下 Win R 快捷键输入 shell:startup 并回车 创建启动脚本&#xff1a; 在打开的文件夹中右键新建一个文本文件命名为 vm_start.bat输入以下内容&#xff1a; echo off &…

2025pmx文件怎么打开blender和虚幻

pmx文件怎么打开blender 前言 一坑接一坑。 意思很简单&#xff0c;就是给Blender、3dsmax装插件&#xff0c;然后就可以打开了。但是报错就要多走很多错路。 记录一下。 内容 参考文章&#xff1a;https://blog.csdn.net/c858845275/article/details/144180555 我的Ble…

Kotlin基础语法五

继承与重载的open关键字 KT所有的类&#xff0c;默认是final修饰的&#xff0c;不能被继承&#xff0c;和Java相反 open&#xff1a;移除final修饰 类型转换 open class Person2(private val name: String) {fun showName() "父类 的姓名是【$name】"// KT所有的…

MySQL数据库:关系型数据库的基石

文章目录 每日一句正能量前言一、MySQL简介&#xff08;一&#xff09;什么是MySQL&#xff1f;&#xff08;二&#xff09;MySQL的历史 二、MySQL的特点&#xff08;一&#xff09;开源与免费&#xff08;二&#xff09;高性能&#xff08;三&#xff09;跨平台支持&#xff0…

【kafka】Golang实现分布式Masscan任务调度系统

要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收扫描任务信息通过调用masscan启动探测任务,获取进度和结果信息,…

ARM 和 x86_64是什么关系

什么是 ARM 和 x86_64&#xff1f; 它们都是 CPU 指令集架构&#xff08;ISA&#xff09; 指令集架构&#xff08;Instruction Set Architecture&#xff09;就是&#xff1a; CPU 能够理解和执行的“语言”和“命令格式”。 类比解释&#xff1a;指令集就像“语言” 类比对…

nginx配置中有无‘‘/’’的区别

在Nginx配置中&#xff0c;location指令末尾的斜杠/和proxy_pass目标地址末尾的斜杠/组合使用会产生显著差异。以下是四种组合的区别详解&#xff1a; ​​核心区别对比表​​ 配置方案匹配规则请求URI传递逻辑实际转发效果示例location /api/ proxy_pass ...701/仅匹配/api/…

系统安全之身份认证

本篇我们对常用的身份认证协议做简要的梳理&#xff0c;包括主流的 HTTP 相关认证协议以及证书密钥对、新兴的 WebAuthn 认证。 HTTP 协议认证 RFC 7235 中定义了 HTTP 协议的认证框架&#xff0c;要求在支持 HTTP 协议的服务器&#xff0c;如果访问服务的身份验证失败&#…