[yolov11改進系列]基于yolov11引入感受野注意力卷積RFAConv的python源碼+訓練源碼

[RFAConv介紹]

1、RFAConv


在傳統卷積操作中,每個感受野都使用相同的卷積核參數,無法區分不同位置的信息差異,這都限制了網絡性能。此外,由于空間注意力以及現有空間注意力機制的局限性,雖然能夠突出關鍵特征,但由于只關注空間特征,所以無法有效解決大尺寸卷積核的參數共享問題。由此,這篇論文提出一種感受野注意力卷積?RFAConv(Receptive-Field Attention Convolution)。旨在解決傳統卷積操作中參數共享導致的局限性,并通過關注感受野的空間特征來進一步提升網絡性能。

RFAConv的核心思想是通過關注感受野的空間特征,并為每個感受野生成獨立的注意力權重,從而實現參數不共享的卷積操作。

對于輸入 X,RFAConv的實現過程:

  1. Receptive-Field Spatial Feature:對于輸入特征,首先通過Group Conv將輸入特征圖轉換為感受野空間特征圖,每個感受野對應一個獨立的滑動窗口。然后調整形狀,將感受野空間特征圖的尺寸調整為原始特征圖尺寸的 k 倍,為后續卷積操作做準備。
  2. Receptive-Field Attention Map:同時將輸入特征進行另一種處理,即對每個感受野的特征信息進行全局平均池化,將每個感受野的特征信息壓縮為一個數值。然后,使用1x1分組卷積對平均池化后的特征信息進行信息交互,增強不同感受野之間的特征聯系。最后,對1x1分組卷積后的特征信息進行softmax操作,生成每個感受野的注意力權重,突出關鍵特征。
  3. 特征提取:最后將注意力圖與感受野空間特征相乘,并根據每個特征的重要性對其進行加權。再經過一個卷積層得到最后輸出。

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還需要結合實際訓練情況確認,當然也不排除數據集存在問題,比如數據集比較單一,樣本分布不均衡,泛化場景少,標注框不太貼合標注質量差,檢測目標很小等等原因
【重要說明】
我們只提供改進框架一種方案,并不保證能夠取得很好訓練精度,甚至超過官方模型精度。因為改進框架,實際是一種比較復雜流程,包括框架原理可行性,訓練數據集是否合適,訓練需要反正驗證以及同類框架訓練結果參數比較,這個是十分復雜且漫長的過程。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907565.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907565.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907565.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【軟件設計】通過軟件設計提高 Flash 的擦寫次數

目錄 0. 個人簡介 && 授權須知1. Flash 和 EEROM 基本情況2. 場景要求3. 軟件設計思路4. 代碼展示4.1 flash.h4.2 flash.c 0. 個人簡介 && 授權須知 📋 個人簡介 💖 作者簡介:大家好,我是喜歡記錄零碎知識點的菜鳥…

OpenCV CUDA模塊直方圖計算------在 GPU 上計算輸入圖像的直方圖(histogram)函數histEven()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 該函數用于在 GPU 上計算輸入圖像的直方圖(histogram)。它將像素值區間均勻劃分為若干個 bin(桶)…

龍虎榜——20250530

上證指數陽包陰,量能較前期下跌有放大,但個股跌多漲少,下跌超過4000個。 深證指數和上漲總體相同。 2025年5月30日龍虎榜行業方向分析 1. 醫藥(創新藥原料藥) 代表標的:華納藥廠、舒泰神、睿智醫藥、華…

HarmonyNext使用request.agent.download實現斷點下載

filedownlaod(API12) 📚簡介 filedownload 這是一款支持大文件斷點下載的開源插件,退出應用程序進程殺掉以后或無網絡情況下恢復網絡后,可以在上次位置繼續恢復下載等 版本更新—請查看更新日志!!! 修復已知bug,demo已經更新 &#x1f4d…

nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: 80端口被占用

Nginx啟動報錯:nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions) 這個報錯代表80端口被占用 先查看占用80的端口 netstat -aon | findstr :80 把它殺掉,強…

embbeding 視頻截圖

Embedding是什么?有什么作用?是怎么得到的?_嗶哩嗶哩_bilibili

服務器tty2終端如何關機

在服務器的 tty2 或其他虛擬終端上,要安全地進行關機操作,可以使用以下命令之一: 1.1 使用 shutdown 命令: shutdown 命令可以計劃系統關機。默認需要超級用戶權限。 sudo shutdown -h now-h 選項表示關機(halt&…

時序數據庫IoTDB啟動方式及集群遷移指南

IoTDB啟動方式 IoTDB在配置啟動時有兩種推薦方式: ?主機名啟動?: ?推薦理由?:主機名啟動方式更為靈活,便于在不同網絡環境中部署相同的IoTDB實例。?工作原理?:IoTDB啟動后會維護一張節點編號與網絡地址的映射表…

如何在Qt中繪制一個帶有動畫的弧形進度條?

如何在Qt中繪制一個弧形的進度條 在圖形用戶界面開發中,進度指示控件(Progress Widget)是非常常見且實用的組件。CCArcProgressWidget 是一個繼承自 QWidget 的自定義控件,用于繪制圓弧形進度條。當然,筆者看了眼公開…

在 Mac 下 VSCode 中的終端使用 option + b 或 f 的快捷鍵變成輸入特殊字符的解決方案

前言 在終端里,我們可以使用 option b 和 option f 來在我們輸入的命令中進行快速的前后調整光標,但是,在未設置的情況下,在 MacOS 中,會變成輸入特殊字符。 普通鍵盤上是 alt b 和 alt f ,只是叫法不…

Android bindservice綁定服務,并同步返回service對象的兩個方法

先上一段代碼: private IDeviceService deviceService null; private ServiceConnection connnull; private synchronized void bindyourservice() { Intent intent new Intent();intent.setPackage("servicepackagename");intent.setAction("…

Go語言之空接口與類型斷言

Go 語言中,接口是一種強大的抽象機制。其中,空接口(interface{})和類型斷言為我們提供了處理任意類型與類型檢查的能力。 一、空接口(interface{}) 空接口是 Go 中最特殊的接口:不包含任何方法…

三、OrcaSlicer預設顯示

一、界面類 主框架使用的是wxWidgets庫;3D模型的渲染區的控件,使用的是imgui庫。 1、Plater 此類在OrcaSlicer\src\slic3r\GUI\Plater.hpp文件中定義 1.1 Plater::priv 此結構體是Plater的數據類,各種數據的對象和指針保存在此結構體中。如…

00 QEMU源碼中文注釋與架構講解

QEMU源碼中文注釋與架構講解 先占坑:等后續完善后再更新此文章 注釋作者將狼才鯨創建日期2025-05-30更新日期NULL CSDN閱讀地址:00 QEMU源碼中文注釋與架構講解Gitee源碼倉庫地址:才鯨嵌入式/qemu 一、前言 參考網址 QEMU 源碼目錄簡介qe…

一、Sqoop歷史發展及原理

作者:IvanCodes 日期:2025年5月30日 專欄:Sqoop教程 在大數據時代,數據往往分散存儲在各種不同類型的系統中。其中,傳統的關系型數據庫 (RDBMS) 如 MySQL, Oracle, PostgreSQL 等,仍然承載著大量的關鍵業務…

【Halcon】圖像分割中的 regiongrowing 與dyn_threshold 動態閾值 算法詳解對比

圖像分割中的 regiongrowing 與動態閾值算法詳解對比 在使用 HALCON 進行圖像處理時,圖像分割是最常見也最關鍵的操作之一。本文將深入講解 regiongrowing 算子的原理與使用方法,并與另一常見方法——動態閾值 (dyn_threshold) 進行詳細對比&#xff0c…

Docker部署項目無法訪問,登錄超時完整排查攻略

項目背景:遷移前后端應用,prod環境要求保留443端口,開發環境37800端口,后端容器端口為8000,前端為80,fastAPI對外端口為41000 生產環境部署在VM01,開發環境部署在VM03,在VM01配置nginx轉發 [r…

充電便捷,新能源汽車移動充電服務如何預約充電

隨著新能源汽車的普及,充電便捷性成為影響用戶體驗的關鍵因素之一。傳統的固定充電樁受限于地理位置和數量,難以完全滿足用戶需求,而移動充電服務的出現,為車主提供了更加靈活的補能方式。通過手機APP、小程序或在線平臺&#xff…

探索C++標準模板庫(STL):從容器到底層奧秘-全面解析String類高效技巧(上篇)

前引:在現代軟件開發中,字符串處理是幾乎所有程序的核心需求之一。無論是文本解析、網絡通信,還是用戶交互,高效且安全的字符串操作能力直接決定了代碼的質量與可維護性。而C標準模板庫(Standard Template Library, ST…

Python爬蟲實戰:抓取百度15天天氣預報數據

🌐 編程基礎第一期《9-30》–使用python中的第三方模塊requests,和三個內置模塊(re、json、pprint),實現百度地圖的近15天天氣信息抓取 記得安裝 pip install requests📑 項目介紹 網絡爬蟲是Python最受歡迎的應用場景之一&…