YOLOv12 ——基于卷积神经网络的快速推理速度与注意力机制带来的增强性能结合
概述
实时目标检测对于许多实际应用来说已经变得至关重要,而Ultralytics公司开发的YOLO(You Only Look Once,只看一次)系列一直是最先进的模型系列,在速度和准确性之间提供了稳健的平衡。注意力机制的低效阻碍了它们在像YOLO这样的高速系统中的应用。YOLOv12旨在通过将注意力机制集成到YOLO框架中来改变这一现状。
1.新特性
大多数目标检测架构传统上依赖于卷积神经网络(CNN),因为注意力机制效率低下,面临着二次计算复杂度和低效的内存访问操作问题。因此,在对推理速度要求很高的YOLO框架中,基于CNN的模型通常比基于注意力的系统表现更好。
YOLOv12通过引入三个关键改进来克服这些限制:
区域注意力模块(A2):
- YOLOv12引入了一个简单而高效的区域注意力模块(A2),该模块将特征图分割成多个片段,在保留大感受野的同时降低了传统注意力机制的计算复杂度。这种简单的修改使模型在保持较大视野的同时提高了速度和效率。
残差高效层聚合网络(R - ELAN):
- YOLOv12利用R - ELAN来解决注意力机制带来的优化挑战。R - ELAN对之前的ELAN架构进行了改进,具体如下:
- 块级残差连接和缩放技术,以确保训练的稳定性。
- 重新设计的特征聚合方法,提高了性能和效率。
架构改进:
- 快速注意力(Flash Attention):快速注意力的集成解决了注意力机制的内存访问瓶颈问题,优化了内存操作并提高了速度。
- 去除位置编码:通过消除位置编码,YOLOv12简化了模型,使其更快、更简洁,同时不牺牲性能。
- 调整多层感知机(MLP)比率:多层感知机的扩展比率从4降低到1.2,以平衡注意力网络和前馈网络之间的计算负载,提高效率。
- 减少块深度:通过减少架构中堆叠块的数量,YOLOv12简化了优化过程并提高了推理速度。
- 卷积算子:YOLOv12广泛使用卷积操作以利用其计算效率,进一步提高性能并降低延迟。
注:
由于两个因素,注意力机制本质上比卷积神经网络(CNN)慢:
- 复杂性。首先,自注意力操作的计算复杂度随输入序列长度 L 呈二次方增长。此外,另一个重要因素是,大多数基于注意力的视觉变压器由于其复杂的设计(例如,Swin 变压器中的窗口划分/反转
)和额外模块的引入(例如,位置编码),逐渐积累了速度开销。- 计算。其次,在注意力计算过程中,与 CNN 相比,内存访问模式效率较低,例如注意力图和 softmax 图。此外,与 CNN 相比,注意力中的不规则内存访问模式会引入更多的延迟。
2.YOLOv12的架构概述

图1:YOLOv12的主干网络和头部网络架构
3.区域注意力模块
图2:区域注意力可视化
为了解决普通注意力机制相关的计算成本问题,YOLOv12利用了局部注意力机制,如移位窗口注意力、十字交叉注意力和轴向注意力。虽然这些方法通过将全局注意力转换为局部注意力来降低复杂度,但由于感受野减小,它们在速度和准确性方面存在局限性。
- 提出的解决方案:YOLOv12引入了一个简单而高效的区域注意力模块。该模块将分辨率为(H,W)的特征图分割成L个大小为(H/L,W)或(H,W/L)的片段。它不是使用显式的窗口划分,而是应用了一个简单的重塑操作。
- 优点:这将感受野减小到原来的四分之一,但与其他局部注意力方法相比,仍然保持了较大的感受野。通过将计算成本从传统的(2n²hd)降低到(n²hd)/2,模型在不牺牲准确性的情况下变得更加高效。
4.残差高效层聚合网络(R - ELAN)

图3:YOLOv12中使用的R - ELAN
ELAN概述:
高效层聚合网络(ELAN) 在早期的YOLO模型中用于改进特征聚合。ELAN的工作方式如下:
- 对1×1卷积层的输出进行分割。
- 通过多个模块处理这些分割后的部分。
- 在应用另一个1×1卷积以对齐最终维度之前,将输出进行拼接。
ELAN存在的问题:
- 梯度阻塞:由于从输入到输出缺乏残差连接,导致训练不稳定。
- 优化挑战:注意力机制和架构可能会导致收敛问题,L规模和X规模的模型即使使用Adam或AdamW优化器也无法收敛或保持不稳定。
提出的解决方案——R - ELAN:
- 残差连接:引入了从输入到输出的残差捷径,带有一个缩放因子(默认值为0.01),以提高稳定性。
- 层缩放类比:类似于深度视觉Transformer中使用的层缩放,但避免了将层缩放应用于每个区域注意力模块而导致的速度下降。
新的聚合方法:
- 修改后的设计:新方法不是在过渡层之后分割输出,而是调整通道维度并创建单个特征图。
- 瓶颈结构:在拼接之前通过后续块处理特征图,形成更高效的聚合方法。
5.架构改进
- 快速注意力(Flash Attention):YOLO12利用了快速注意力,它最大限度地减少了内存访问开销。这解决了注意力机制的主要内存瓶颈问题,缩小了与CNN的速度差距。
- MLP比率调整:前馈网络的扩展比率从Transformer中通常的4降低到YOLOv12中的约1.2。这防止了MLP在运行时占据主导地位,从而提高了整体效率。
- 去除位置编码:YOLOv12在其注意力层中省略了显式的位置编码。这使得模型“快速且简洁”,同时在检测性能上没有损失。
- 减少堆叠块:最近的YOLO主干网络在最后一个阶段堆叠了三个注意力/CNN块;而YOLOv12在该阶段只使用了一个R - ELAN块。较少的顺序块简化了优化过程并提高了推理速度,尤其是在更深的模型中。
- 卷积算子:该架构还使用了带有批量归一化的卷积,而不是带有层归一化的线性层,以充分利用卷积算子的效率。
6.基准测试

图4:YOLOv12的比较
数据集:所有模型均在MS COCO 2017目标检测基准上进行评估。
YOLOv12 - N的性能:最小的YOLOv12 - N模型实现了40.6%的更高平均精度均值(mAP),相比之下,YOLOv10 - N为38.5%,YOLOv11 - N为39.4%,同时保持了相似的推理延迟。
YOLOv12 - S与RT - DETR的比较:YOLOv12 - S模型也优于RT - DETR模型。值得注意的是,它的运行速度比RT - DETR - R18模型快约42%,同时只使用了RT - DETR - R18模型约36%的计算量和约45%的参数。
每个YOLOv12模型(从N到X)在与YOLOv8、YOLOv9、YOLOv10、YOLOv11等类似大小的模型相比时,在相当或更低的延迟下实现了更好的mAP。这种优势从小型模型到大型模型都存在,证明了YOLOv12改进的可扩展性。
7. 最先进技术比较

例如:对于N 规模的模型,YOLOv12 - N 在平均精度均值(mAP)上分别比 YOLOv6–3.0 - N [32]、 YOLOv8-N [58]、 YOLOv10-N [53] 和 YOLOv11 [28] 高出 3.6%、3.3%、2.1% 和 1.2%,同时保持相似甚至更少的计算量和参数,并实现了1.64 毫秒/图像的快速延迟速度。
- 对于S 规模的模型,YOLOv12 - S 具有 21.4G 浮点运算量(FLOPs)和 9.3M 参数,在 2.61 毫秒/图像的延迟下实现了 48.0 mAP。它在平均精度均值(mAP)上分别比 YOLOv8-S [24]、YOLOv9-S [58]、YOLOv10-S [53] 和 YOLOv11 - S [28] 高出 3.0%、1.2%、1.7% 和 1.1%,同时保持相似或更少的计算量。
- 对于M 规模的模型,YOLOv12 - M 具有 67.5G 浮点运算量(FLOPs)和 20.2M 参数,实现了 52.5 mAP 的性能和 4.86 毫秒/图像的速度。
- 对于L 规模的模型,YOLOv12 - L 甚至比 YOLOv10-L [53] 少 31.4G 浮点运算量(FLOPs)。
- 对于X 规模的模型,YOLOv12 - X 在平均精度均值(mAP)上分别比 YOLOv10-X [53] / YOLOv11 - X [28] 高出 0.8% 和 0.6%,同时具有相当的速度、浮点运算量(FLOPs)和参数。
8. 推理速度比较

YOLOv12 的推理速度比 YOLOv9 ** 显著提高**,同时与 YOLOv10 和 YOLOv11 相当。
总结
YOLOv12目前的一个局限性是它依赖于快速注意力(FlashAttention)来实现最佳速度。快速注意力仅在相对较新的GPU架构(NVIDIA的图灵、安培、阿达·洛芙莱斯或霍珀系列)上得到支持,例如特斯拉T4、RTX 20/30/40系列、A100、H100等。
这意味着缺乏这些架构的旧GPU无法充分受益于YOLOv12的优化注意力实现。使用不支持的硬件的用户将不得不回退到标准注意力内核,从而失去一些速度优势。
相关文章:
YOLOv12 ——基于卷积神经网络的快速推理速度与注意力机制带来的增强性能结合
概述 实时目标检测对于许多实际应用来说已经变得至关重要,而Ultralytics公司开发的YOLO(You Only Look Once,只看一次)系列一直是最先进的模型系列,在速度和准确性之间提供了稳健的平衡。注意力机制的低效阻碍了它们在…...
动态内容加载的解决方案:Selenium与Playwright对比故障排查实录
方案进程 2024-09-01 09:00 | 接到亚航航班数据采集需求 2024-09-01 11:30 | 首次尝试使用Selenium遭遇Cloudflare验证 2024-09-01 14:00 | 切换Playwright方案仍触发反爬机制 2024-09-01 16:30 | 引入爬虫代理IPUA轮换策略 2024-09-02 10:00 | 双方案完整实现并通过压力测试故…...
NLP学习记录十:多头注意力
一、单头注意力 单头注意力的大致流程如下: ① 查询编码向量、键编码向量和值编码向量分别经过自己的全连接层(Wq、Wk、Wv)后得到查询Q、键K和值V; ② 查询Q和键K经过注意力评分函数(如:缩放点积运算&am…...
Spring基础01
Spring基础01 软件开发原则 OCP开闭原则:七大开发原则当中最基本的原则,其他的六个原则是为这个原则服务的。 对扩展开放,对修改关闭。在扩展系统功能的时候,没有修改之前写好的代码,就符合OCP原则,反之&a…...
Gurobi 并行计算的一些问题
最近尝试用 gurobi 进行并行计算,即同时用多个 cpu 核计算 gurobi 的 model,但是发现了不少问题。总体来看,gurobi 对并行计算的支持并不是那么好。 gurobi 官方对于并行计算的使用在这个网址,并有下面的大致代码: i…...
2025年2月,TVBOX接口最新汇总版
这里写自定义目录标题 1、离线版很必要2、关于在线版好还是离线版更实在,作个总结:★ 离线版的优点:★ 离线版的缺点: 3.1、 针对FM内置的写法;3.2、 如果是用在YSC,那么格式也要有些小小的改变3.2.1、 YSC…...
Dubbo RPC 原理
一、Dubbo 简介 Apache Dubbo 是一款高性能、轻量级的开源 RPC 框架,支持服务治理、协议扩展、负载均衡、容错机制等核心功能,广泛应用于微服务架构。其核心目标是解决分布式服务之间的高效通信与服务治理问题。 二、Dubbo 架构设计 1. 核心组件 Prov…...
qt5的中文乱码问题,QString、QStringLiteral 为 UTF-16 编码
qt5的中文乱码问题一直没有很明确的处理方案。 今天处理进程间通信时,也遇到了qt5乱码问题,一边是设置的GBK,一边设置的是UTF8,单向通信约定采用UTF8。 发送端保证发的是UTF8字符串,因为UTF8在网络数据包中没有字节序…...
第2章_保护您的第一个应用程序
第2章_保护您的第一个应用程序 在本章中,您将学习如何使用 Keycloak 保护您的第一个应用程序。为了让事情更有趣,您将运行的示例应用程序由两部分组成,前端 Web 应用程序和后端 REST API。这将向您展示用户如何向前端进行身份验证࿰…...
【Godot4.3】自定义圆角容器
概述 Godot控件想要完全实现现代UI风格,需要进行大量的自定义组件设计。本篇就依托于笔者自己对现代UI设计中的圆角面板元素模仿来制作圆角容器组件。 圆角容器 圆角元素在现代的扁平UI设计中非常常见,在Godot中可以通过改进PanelContainer来或者自定…...
Flutter系列教程之(5)——常用控件Widget的使用示例
目录 1.页面跳转 2.某个控件设置点击事件 3.AlertDialog对话框的使用 4.文本输入框 5.按钮 圆角扁平按钮: 圆角悬浮按钮: 6.补充 圆点 7.布局使用 Row控件左右对齐 调整边距 1.页面跳转 首先,先介绍一下页面跳转功能吧 Flutter使用 Navigator 进行页面…...
DeepSeek开源周,第三弹再次来袭,DeepGEMM
在大型模型推理中,矩阵乘法(GEMM)是计算的核心瓶颈。DeepGEMM 应运而生——一款专为 FP8精度矩阵乘法 设计的轻量级CUDA库,由深度求索(DeepSeek)团队开源。它凭借极简代码(核心仅300行ÿ…...
stm32四种方式精密控制步进电机
在搭建完clion的开发环境后,我决定重写之前的项目并优化完善,争取做出完全可落地的东西,也结合要写的论文内容一同学习下去。 因此,首当其冲的就是回到步进电机控制领域,把之前使用中断溢出进行步进电机控制的方案进行…...
C++11 智能指针:unique_ptr、shared_ptr和weak_ptr 功能特性 模拟实现
文章目录 unique_ptr功能和特性使用场景make_unique模拟实现 shared_ptr功能和特性使用场景make_shared模拟实现 weak_ptr C 中智能指针都是 RAII(Resource Acquisition Is Initialization)机制的典型应用,在构造时获取资源,在析构…...
Spring Boot启动过程?
目录 1. 启动入口 2. SpringApplication 初始化 3. 准备环境 4. 创建应用上下文(ApplicationContext) 5. 准备应用上下文 6. 刷新应用上下文 7. 启动 Web 服务器(若为 Web 应用) 8. 发布 ApplicationStartedEvent 事件 9. 执行 Runner 10. 发布 ApplicationReady…...
2025年软考报名费用是多少?全国费用汇总!
软考报名时间终于确定了!想要参加2025年软考的同学们注意啦!特别是那些一年只有一次考试机会的科目,千万不要错过哦!这里为大家整理了各地的报名时间、科目、费用等信息,快来看看吧! 一、2025年软考时间安…...
算法-二叉树篇06-二叉树的最大深度
二叉树的最大深度 力扣题目链接 题目描述 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 解题思路 一样可以使用递归的思想,代码也十分简洁,计算出两个子树的深度取最大加…...
git merge -s ours ...的使用方法
当我们在自己的feature branch上开发时,并且已经commit,push了好几次 同时develop分支也commit , push了好几次, 如下图所示 这个时候就不能直接将feature branch上的改动 pull request到develop上面,因为develop基线已经不一样了…...
面试之《react hooks在源码中是怎么实现的?》
要深入理解 React Hooks 在源码中的实现,可以从以下几个关键方面来剖析: 核心数据结构 在 React 内部,使用链表来管理每个函数组件的 Hooks。每个 Hook 对应一个节点,这些节点通过 next 指针相连。以下是简化后的 Hook 节点结构…...
数字可调控开关电源设计(论文+源码)
1 设计要求 在本次数字可调控开关电源设计过程中,对关键参数设定如下: (1)输入电压:DC24-26V,输出电压:12-24(可调); (2)输出电压误差…...
【DeepSeek】【GPT-Academic】:DeepSeek集成到GPT-Academic(官方+第三方)
目录 1 官方deepseek 1.1 拉取学术GPT项目 1.2 安装依赖 1.3 修改配置文件中的DEEPSEEK_API_KEY 2 第三方API 2.1 修改DEEPSEEK_API_KEY 2.2 修改CUSTOM_API_KEY_PATTERM 2.3 地址重定向 2.4 修改模型参数 2.5 成功调用 2.6 尝试添加一个deepseek-r1参数 3 使用千帆…...
DeepSeek R1 + 飞书机器人实现AI智能助手
效果 TFChat项目地址 https://github.com/fish2018/TFChat 腾讯大模型知识引擎用的是DeepSeek R1,项目为sanic和redis实现,利用httpx异步处理流式响应,同时使用buffer来避免频繁调用飞书接口更新卡片的网络耗时。为了进一步减少网络IO消耗&…...
Android移动应用开发实践-1-下载安装和简单使用Android Studio 3.5.2版本(频频出错)
一、下载安装 1.Android Studio3.5.2下载地址:Android Studio3.5.2下载地址 其他版本下载地址:其他版本下载地址 2.安装教程(可以多找几个看看) 安装 | 手把手教你Android studio 3.5.2安装(安装教程)_a…...
Rk3568驱动开发_驱动编写和挂载_2
1.字符驱动介绍: 字符驱动:按照字节流镜像读写操作的设备,读写数据分先后顺序,例如:点灯、按键、IIC、SPI、等等都是字符设备,这些设备的驱动叫字符驱动设备 Linux应用层如何调用驱动: 字符设…...
验证码识别:使用OCR技术识别图形验证码详解
文章目录 一、基本原理二、所需工具2.1 Python环境2.2 图像处理库2.3 OCR引擎2.4 Python接口 三、实现步骤3.1 获取验证码图像3.2 图像预处理3.3 使用OCR进行字符识别3.4 基本 OCR 识别样例 四、提高识别准确率的方法4.1 字符分割4.2 使用深度学习模型4.3 数据增强4.4 集成多个…...
剑指 Offer II 033. 变位词组
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20033.%20%E5%8F%98%E4%BD%8D%E8%AF%8D%E7%BB%84/README.md 剑指 Offer II 033. 变位词组 题目描述 给定一个字符串数组 strs ,将 变位词 组合在一起…...
【苍穹外卖】问题笔记
【DAY1 】 1.VCS找不到 好吧,发现没安git 接着发现安全模式有问题,点开代码信任此项目 2.导入初始文件,全员爆红 好像没maven,配一个 并在设置里设置好maven 3.启用注解,见新手苍穹 pom.xml改lombok版本为1.1…...
微信小程序 - 自定义实现分页功能
概述 在微信小程序项目中,没有现成的分页器组件,所以需要自定义实现分页功能 自定义实现分页功能 1、index.json {"usingComponents": {"van-button": "vant/weapp/button/index"} }这里使用 Vant Weapp 中的 van-butt…...
1.1部署es:9200
安装es:root用户: 1.布署java环境 - 所有节点 wget https://d6.injdk.cn/oraclejdk/8/jdk-8u341-linux-x64.rpm yum localinstall jdk-8u341-linux-x64.rpm -y java -version 2.下载安装elasticsearch - 所有节点 wget ftp://10.3.148.254/Note/Elk/…...
《模拟器过检测教程:Nox、雷电、Mumu、逍遥模拟器 Magisk、LSposed 框架安装与隐藏应用配置》
一、夜神模拟器 (Nox) 过检测 使用版本:7.0.6.2(20250209) 1. 准备工作 将需要用到的应用放入文件夹: C:\Users\Administrator.DESKTOP-I5V50SS\Nox_share\Download 2. 安装面具鸭(Magisk) 在模拟器下…...
