[RFAConv介紹]
1、RFAConv
在傳統卷積操作中,每個感受野都使用相同的卷積核參數,無法區分不同位置的信息差異,這都限制了網絡性能。此外,由于空間注意力以及現有空間注意力機制的局限性,雖然能夠突出關鍵特征,但由于只關注空間特征,所以無法有效解決大尺寸卷積核的參數共享問題。由此,這篇論文提出一種感受野注意力卷積?RFAConv(Receptive-Field Attention Convolution)。旨在解決傳統卷積操作中參數共享導致的局限性,并通過關注感受野的空間特征來進一步提升網絡性能。
RFAConv的核心思想是通過關注感受野的空間特征,并為每個感受野生成獨立的注意力權重,從而實現參數不共享的卷積操作。
對于輸入 X,RFAConv的實現過程:
- Receptive-Field Spatial Feature:對于輸入特征,首先通過Group Conv將輸入特征圖轉換為感受野空間特征圖,每個感受野對應一個獨立的滑動窗口。然后調整形狀,將感受野空間特征圖的尺寸調整為原始特征圖尺寸的 k 倍,為后續卷積操作做準備。
- Receptive-Field Attention Map:同時將輸入特征進行另一種處理,即對每個感受野的特征信息進行全局平均池化,將每個感受野的特征信息壓縮為一個數值。然后,使用1x1分組卷積對平均池化后的特征信息進行信息交互,增強不同感受野之間的特征聯系。最后,對1x1分組卷積后的特征信息進行softmax操作,生成每個感受野的注意力權重,突出關鍵特征。
- 特征提取:最后將注意力圖與感受野空間特征相乘,并根據每個特征的重要性對其進行加權。再經過一個卷積層得到最后輸出。
RFAConv 結構圖:
在 RFAConv 的基礎上,論文還提出了一種 RFCAConv 和 RFCBAMConv,原理上就是對?CBAM?和?SE Attention?進行改進后的卷積操作。兩者都聚焦于感受野空間特征,并取得了比 RFAConv 更好的性能。具體而言:
- RFCAConv:使用 SE Attention 模塊,與 RFAConv 相比,增加了全局平均池化操作,以便更好地捕捉長距離信息。
- RFCBAMConv:使用 CBAM 注意力模塊,并用 SE 注意力模塊替換了 CAM,以降低計算成本。
RFCAConv & RFCBAMConv 結構圖:
【yolov11框架介紹】
2024 年 9 月 30 日,Ultralytics 在其活動 YOLOVision 中正式發布了 YOLOv11。YOLOv11 是 YOLO 的最新版本,由美國和西班牙的 Ultralytics 團隊開發。YOLO 是一種用于基于圖像的人工智能的計算機模
Ultralytics YOLO11 概述
YOLO11 是Ultralytics YOLO 系列實時物體檢測器的最新版本,以尖端的精度、速度和效率重新定義了可能性。基于先前 YOLO 版本的令人印象深刻的進步,YOLO11 在架構和訓練方法方面引入了重大改進,使其成為各種計算機視覺任務的多功能選擇。
Key Features 主要特點
- 增強的特征提取:YOLO11采用改進的主干和頸部架構,增強了特征提取能力,以實現更精確的目標檢測和復雜任務性能。
- 針對效率和速度進行優化:YOLO11 引入了精致的架構設計和優化的訓練管道,提供更快的處理速度并保持準確性和性能之間的最佳平衡。
- 使用更少的參數獲得更高的精度:隨著模型設計的進步,YOLO11m 在 COCO 數據集上實現了更高的平均精度(mAP),同時使用的參數比 YOLOv8m 少 22%,從而在不影響精度的情況下提高計算效率。
- 跨環境適應性:YOLO11可以無縫部署在各種環境中,包括邊緣設備、云平臺以及支持NVIDIA GPU的系統,確保最大的靈活性。
- 支持的任務范圍廣泛:無論是對象檢測、實例分割、圖像分類、姿態估計還是定向對象檢測 (OBB),YOLO11 旨在應對各種計算機視覺挑戰。
??
與之前的版本相比,Ultralytics YOLO11 有哪些關鍵改進?
Ultralytics YOLO11 與其前身相比引入了多項重大進步。主要改進包括:
- 增強的特征提取:YOLO11采用改進的主干和頸部架構,增強了特征提取能力,以實現更精確的目標檢測。
- 優化的效率和速度:精細的架構設計和優化的訓練管道可提供更快的處理速度,同時保持準確性和性能之間的平衡。
- 使用更少的參數獲得更高的精度:YOLO11m 在 COCO 數據集上實現了更高的平均精度(mAP),參數比 YOLOv8m 少 22%,從而在不影響精度的情況下提高計算效率。
- 跨環境適應性:YOLO11可以跨各種環境部署,包括邊緣設備、云平臺和支持NVIDIA GPU的系統。
- 支持的任務范圍廣泛:YOLO11 支持多種計算機視覺任務,例如對象檢測、實例分割、圖像分類、姿態估計和定向對象檢測 (OBB)
【測試環境】
windows10 x64
ultralytics==8.3.0
torch==2.3.1
【改進流程】
1. 新增RFAConv.py實現模塊(代碼太多,核心模塊源碼請參考改進步驟.docx)然后在同級目錄下面創建一個__init___.py文件寫代碼
from .RFAConv?import *
2. 文件修改步驟
修改tasks.py文件
創建模型配置文件
yolo11-RFAConv.yaml內容如下:
# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLO11 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolo11n.yaml' will call yolo11.yaml with scale 'n'# [depth, width, max_channels]n: [0.50, 0.25, 1024] # summary: 319 layers, 2624080 parameters, 2624064 gradients, 6.6 GFLOPss: [0.50, 0.50, 1024] # summary: 319 layers, 9458752 parameters, 9458736 gradients, 21.7 GFLOPsm: [0.50, 1.00, 512] # summary: 409 layers, 20114688 parameters, 20114672 gradients, 68.5 GFLOPsl: [1.00, 1.00, 512] # summary: 631 layers, 25372160 parameters, 25372144 gradients, 87.6 GFLOPsx: [1.00, 1.50, 512] # summary: 631 layers, 56966176 parameters, 56966160 gradients, 196.0 GFLOPs# YOLO11n backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4- [-1, 2, C3k2, [256, False, 0.25]]- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8- [-1, 2, C3k2, [512, False, 0.25]]- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16- [-1, 2, C3k2, [512, True]]- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32- [-1, 2, C3k2, [1024, True]]- [-1, 1, SPPF, [1024, 5]] # 9- [-1, 2, C2PSA, [1024]] # 10# YOLO11n head
head:- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 2, C3k2, [512, False]] # 13- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 4], 1, Concat, [1]] # cat backbone P3- [-1, 2, C3k2, [256, False]] # 16 (P3/8-small)- [-1, 1, RFAConv, [256, 3, 2]]- [[-1, 13], 1, Concat, [1]] # cat head P4- [-1, 2, C3k2, [512, False]] # 19 (P4/16-medium)- [-1, 1, RFAConv, [512, 3, 2]]- [[-1, 10], 1, Concat, [1]] # cat head P5- [-1, 2, C3k2, [1024, True]] # 22 (P5/32-large)- [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)
3. 驗證集成
使用新建的yaml配置文件啟動訓練任務:
from ultralytics import YOLOif __name__ == '__main__':model = YOLO('yolo11-RFAConv.yaml') ?# build from YAML and transfer weights# Train the modelresults = model.train(data='coco128.yaml',epochs=100, imgsz=640, batch=8, device=0, workers=1, save=True,resume=False)
成功集成后,訓練日志中將顯示RFAConv模塊的初始化信息,表明已正確加載到模型中。
?
【訓練說明】
第一步:首先安裝好yolov11必要模塊,可以參考yolov11框架安裝流程,然后卸載官方版本pip uninstall ultralytics,最后安裝改進的源碼pip install .
第二步:將自己數據集按照dataset文件夾擺放,要求文件夾名字都不要改變
第三步:分別打開train.py,coco128.yaml和模型參數yaml文件修改必要的參數,最后執行python train.py即可訓練
【提供文件】
├── [官方源碼]ultralytics-8.3.0.zip
├── train/
│ ├── coco128.yaml
│ ├── dataset/
│ │ ├── train/
│ │ │ ├── images/
│ │ │ │ ├── firc_pic_1.jpg
│ │ │ │ ├── firc_pic_10.jpg
│ │ │ │ ├── firc_pic_11.jpg
│ │ │ │ ├── firc_pic_12.jpg
│ │ │ │ ├── firc_pic_13.jpg
│ │ │ ├── labels/
│ │ │ │ ├── classes.txt
│ │ │ │ ├── firc_pic_1.txt
│ │ │ │ ├── firc_pic_10.txt
│ │ │ │ ├── firc_pic_11.txt
│ │ │ │ ├── firc_pic_12.txt
│ │ │ │ ├── firc_pic_13.txt
│ │ └── val/
│ │ ├── images/
│ │ │ ├── firc_pic_100.jpg
│ │ │ ├── firc_pic_81.jpg
│ │ │ ├── firc_pic_82.jpg
│ │ │ ├── firc_pic_83.jpg
│ │ │ ├── firc_pic_84.jpg
│ │ ├── labels/
│ │ │ ├── firc_pic_100.txt
│ │ │ ├── firc_pic_81.txt
│ │ │ ├── firc_pic_82.txt
│ │ │ ├── firc_pic_83.txt
│ │ │ ├── firc_pic_84.txt
│ ├── train.py
│ ├── yolo11-RFAConv.yaml
│ └── 訓練說明.txt
├── [改進源碼]ultralytics-8.3.0.zip
├── 改進原理.docx
└── 改進流程.docx
?【常見問題匯總】
問:為什么我訓練的模型epoch顯示的map都是0或者map精度很低?
回答:由于源碼改進過,因此不能直接從官方模型微調,而是從頭訓練,這樣學習特征能力會很弱,需要訓練很多epoch才能出現效果。此外由于改進的源碼框架并不一定能夠保證會超過官方精度,而且也有可能會存在遠遠不如官方效果,甚至精度會很低。這說明改進的框架并不能取得很好效果。所以說對于框架改進只是提供一種可行方案,至于改進后能不能取得很好map還需要結合實際訓練情況確認,當然也不排除數據集存在問題,比如數據集比較單一,樣本分布不均衡,泛化場景少,標注框不太貼合標注質量差,檢測目標很小等等原因
【重要說明】
我們只提供改進框架一種方案,并不保證能夠取得很好訓練精度,甚至超過官方模型精度。因為改進框架,實際是一種比較復雜流程,包括框架原理可行性,訓練數據集是否合適,訓練需要反正驗證以及同類框架訓練結果參數比較,這個是十分復雜且漫長的過程。