論文: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相對于原始的自注意力機制都帶來了加速的效果。