目標檢測——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
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84582.shtml
英文地址,請注明出處:http://en.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;如果訪問服務的身份驗證失敗&#…