yolov7添加spd-conv注意力機制

一、spd-conv是什么?

SPD-Conv(Symmetric Positive Definite Convolution)是一種新穎的卷積操作,它主要應用于處理對稱正定矩陣(SPD)數據。在傳統的卷積神經網絡(CNN)中,卷積操作通常用于處理圖像數據,而SPD-Conv的引入則將卷積擴展到了處理更加復雜的數據結構,例如在計算機視覺、醫學影像分析和材料科學等領域中廣泛存在的對稱正定矩陣數據。

????????1.SPD矩陣的特點

對稱正定矩陣是一類特殊的矩陣,具有嚴格的數學定義,通常表示為X∈Rn×nX∈Rn×n,其中 XX 是對稱正定矩陣,滿足 XT=XXT=X 和對于任意非零向量 vv,有 vTXv>0vTXv>0。這種矩陣廣泛應用于協方差矩陣、距離度量、流形學習等領域,并且在一些任務中,數據被表示為SPD矩陣,例如醫學圖像的核磁共振(MRI)圖像。

????????2.SPD-Conv的引入

  • SPD-Conv是針對SPD數據設計的卷積操作。與傳統的卷積操作不同,SPD-Conv考慮了SPD矩陣的特殊結構和性質。它在對SPD數據進行卷積時,保持了輸入和輸出的對稱正定性,確保了卷積結果仍然是對稱正定矩陣。這種特性使得SPD-Conv適用于處理一些需要保持數據結構特性的任務,例如在醫學影像中保持圖像的對稱性和正定性。
  • SPD-Conv是一種新的構建塊,用于替代現有的CNN體系結構中的步長卷積和池化層。它由一個空間到深度(SPD)層和一個非步長卷積(Conv)層組成。
  • 空間到深度(SPD)層的作用是將輸入特征圖的每個空間維度降低到通道維度,同時保留通道內的信息。這可以通過將輸入特征圖的每個像素或特征映射到一個通道來實現。在這個過程中,空間維度的大小會減小,而通道維度的大小會增加。
  • 非步長卷積(Conv)層是一種標準的卷積操作,它在SPD層之后進行。與步長卷積不同,非步長卷積不會在特征圖上移動,而是對每個像素或特征映射進行卷積操作。這有助于減少在SPD層中可能出現的過度下采樣問題,并保留更多的細粒度信息。
  • SPD-Conv的組合方式是將SPD層和Conv層串聯起來。具體來說,輸入特征圖首先通過SPD層進行轉換,然后輸出結果再通過Conv層進行卷積操作。這種組合方式可以在不丟失信息的情況下減少空間維度的尺寸,同時保留通道內的信息,有助于提高CNN對低分辨率圖像和小型物體的檢測性能。

總結起來,SPD-Conv是一種新的構建塊,旨在解決現有CNN體系結構中步長卷積和池化層的問題。它由一個空間到深度(SPD)層和一個非步長卷積(Conv)層組成,能夠提高模型對低分辨率圖像和小型物體的檢測性能,并降低對“良好質量"輸入的依賴。

二、使用步驟

1.第一步:先在models/common.py加上


class space_to_depth(nn.Module):# Changing the dimension of the Tensordef __init__(self, dimension=1):super().__init__()self.d = dimensiondef forward(self, x):return torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1)

2.第二步:models/yolo.py加上

 elif m is space_to_depth:c2 = 4 * ch[f]

同時在769行里面加入space to death

3.第三步:修改yolov7的yaml文件

# parameters
nc: 80  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple# anchors
anchors:- [12,16, 19,36, 40,28]  # P3/8- [36,75, 76,55, 72,146]  # P4/16- [142,110, 192,243, 459,401]  # P5/32# yolov7 backbone
backbone:# [from, number, module, args][[-1, 1, Conv, [32, 3, 1]],  # 0[-1, 1, Conv, [64, 3, 2]],  # 1-P1/2[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [128, 3, 2]],  # 3-P2/4[-1, 1, Conv, [64, 1, 1]],[-2, 1, Conv, [64, 1, 1]],[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [64, 3, 1]],[[-1, -3, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [256, 1, 1]],  # 11[-1, 1, MP, []],[-1, 1, Conv, [128, 1, 1]],[-3, 1, Conv, [128, 1, 1]],[-1, 1, Conv, [128, 3, 2]],[[-1, -3], 1, Concat, [1]],  # 16-P3/8[-1, 1, Conv, [128, 1, 1]],[-2, 1, Conv, [128, 1, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[[-1, -3, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [512, 1, 1]],  # 24[-1, 1, MP, []],[-1, 1, Conv, [256, 1, 1]],[-3, 1, Conv, [256, 1, 1]],[-1, 1, Conv, [256, 3, 2]],[[-1, -3], 1, Concat, [1]],  # 29-P4/16[-1, 1, Conv, [256, 1, 1]],[-2, 1, Conv, [256, 1, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[[-1, -3, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [1024, 1, 1]],  # 37[-1, 1, MP, []],[-1, 1, Conv, [512, 1, 1]],[-3, 1, Conv, [512, 1, 1]],[-1, 1, Conv, [512, 3, 2]],[[-1, -3], 1, Concat, [1]],  # 42-P5/32[-1, 1, Conv, [256, 1, 1]],[-2, 1, Conv, [256, 1, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[[-1, -3, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [1024, 1, 1]],  # 50]# yolov7 head
head:[[-1, 1, SPPCSPC, [512]], # 51[-1, 1, Conv, [256, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[37, 1, Conv, [256, 1, 1]], # route backbone P4[[-1, -2], 1, Concat, [1]],[-1, 1, Conv, [256, 1, 1]],[-2, 1, Conv, [256, 1, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [256, 1, 1]], # 63[-1, 1, Conv, [128, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[24, 1, Conv, [128, 1, 1]], # route backbone P3[[-1, -2], 1, Concat, [1]],[-1, 1, Conv, [128, 1, 1]],[-2, 1, Conv, [128, 1, 1]],[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [64, 3, 1]],[[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [128, 1, 1]], # 75[-1, 1, MP, []],[-1, 1, Conv, [128, 1, 1]],[-3, 1, Conv, [128, 1, 1]],[-1, 1, Conv, [128, 3, 2]],[[-1, -3, 63], 1, Concat, [1]],[-1, 1, Conv, [256, 1, 1]],[-2, 1, Conv, [256, 1, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [256, 1, 1]], # 88[-1, 1, MP, []],[-1, 1, Conv, [256, 1, 1]],[-3, 1, Conv, [256, 1, 1]],[-1, 1, Conv, [256, 3, 2]],[[-1, -3, 51], 1, Concat, [1]],[-1, 1, Conv, [512, 1, 1]],[-2, 1, Conv, [512, 1, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [512, 1, 1]], # 101[-1,1,space_to_depth,[1]],   # 2 -P2/4[-1, 1, Conv, [512, 1, 1]], # 103[75, 1, RepConv, [256, 3, 1]],[88, 1, RepConv, [512, 3, 1]],[103, 1, RepConv, [1024, 3, 1]],[[104,105,106], 1, IDetect, [nc, anchors]],   # Detect(P3, P4, P5)]

總結

以上只是·簡單添加了一層spd,需要添加多層spd-con可以直接修改yolov7的yaml配置文件,不需要修改其他。

備注:
spd添加層數地方只可以在512層的網絡中修改,其他的層數修改會報錯,圖像張量不匹配,128.256以及1024經過變換之后張量改變對不上。

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

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

相關文章

人工智能_大模型013_AIGC生成式模型的增強檢索_RAG知識補充檢索_補充私域和實時場景知識_關鍵字檢索增強---人工智能工作筆記0149

什么是RAG,RAG的意思就是,如果一套生成式AIGC大模型,你昨天訓練了以后,那么今天的知識,還沒有給他進行訓練,那么回答的時候,他就會遺漏今天的知識,那么我們就可以通過檢索的手段,把今天的知識,檢索出來,然后補充道prompt中,給這個大模型.讓他參考,這樣就包含了今天的知識相當于…

CY8C42(1.PSoC4 Pioneer Kit開箱及基本使用)

1.開箱 最近了解到賽普拉斯有一種芯片,屬于PSoC系列,與傳統MCU不同,有點類似跨界芯片,于是就買來玩玩了,老實說用完還是很特別的,因為我沒有用過FPGA,不確定是不是FPGA的開發流程(有…

怎樣理解vue2和vue3里的雙向數據綁定

在 Vue.js 中,雙向數據綁定意味著當數據變化時,視圖會自動更新;反之,當用戶通過視圖交互導致數據變化時,數據本身也會被更新。這種機制極大地簡化了用戶界面和數據之間的同步過程。 1. Vue2的實現 Vue2使用的是Objec…

MySQL的事務與隔離級別

1. 什么是事務? 數據庫中的事務是指對數據庫執行一批操作,而這些操作最終要么全部執行成功,要么全部失敗,不會存在部分成功的情況。這個時候就需要用到事務。 最經典的例子就是轉賬,你要給朋友小白轉 1000 塊錢&…

一代傳奇宗慶后:把員工寵成上帝

作者:積溪 琥珀酒研社快評: 梅子真是哭了 一代傳奇就此隕落 咱們又少了一個良心企業家 2月25日10時30分 娃哈哈集團創始人、董事長宗慶后 在杭州逝世,享年79歲 在過去一個多月的病危期間 他的病房里最顯眼的 不是呼吸機、檢測儀 而…

智慧城市中的公共服務創新:讓城市生活更便捷

目錄 一、引言 二、智慧城市公共服務創新的實踐 1、智慧交通系統 2、智慧醫療服務 3、智慧教育系統 4、智慧能源管理 三、智慧城市公共服務創新的挑戰 四、智慧城市公共服務創新的前景 五、結論 一、引言 隨著信息技術的迅猛發展,智慧城市已成為現代城市發…

技術總結: PPT繪圖

目錄 寫在前面參考文檔技巧總結PPT中元素的連接立方體調整厚度調整圖形中的文本3D 圖片調整漸變中的顏色 寫在前面 能繪制好一個好看的示意圖非常重要, 在科研和工作中好的示意圖能精準表達出自己的想法, 減少溝通的成本, 可視化的呈現也可以加強自身對系統的理解, 時間很久后…

分分鐘搞定JSON解析

json 庫能夠解析字符串或文本中的 JSON 內容。 該庫將 JSON 解析為 Python 字典或列表,也能將 Python 字典或列表轉換為 JSON 字符串。 解析 JSON 如下的 JSON 格式的字符串: json_string {"first_name": "Guido", "last_na…

【Web】速談FastJson反序列化中TemplatesImpl的利用

目錄 簡要原理分析 exp 前文:【Web】關于FastJson反序列化開始前的那些前置知識 簡要原理分析 眾所周知TemplatesImpl的利用鏈是這樣的: TemplatesImpl#getOutputProperties() -> TemplatesImpl#newTransformer() -> TemplatesImpl#getTransl…

瑞芯微RK3588 C++部署Yolov8檢測和分割模型

最近這一個月在研究國產瑞芯微板子上部署yolov8的檢測和分割模型,踩了很多坑,記錄一下部署的過程和遇到的一些問題: 1 環境搭建 需要的環境和代碼主要包括: (1)rknn-toolkit2-1.5.2:工具鏈&am…

微服務day04-基于Feign的遠程調用

一.Feign的認識 是http客戶端,因為使用RestTemplate存在一些問題:代碼可讀性差,參數配置費事,不夠優雅… String url"http://userservice/user/"order.getUserId(); User userrestTemplate.getForObject(url,User.cla…

01.23 校招 實習 內推 面經

綠*泡*泡VX: neituijunsir 交流*裙 ,內推/實習/校招匯總表格 1、蔚來24屆實習招聘特輯 | 軟件&算法類(內推) 蔚來24屆實習招聘特輯 | 軟件&算法類(內推) 2、校招 | 普天科技2024校園招聘 校招…

初始計算機組成原理

1.初始計算機組成原理 本人相關文章:Linux之計算機概論 聲明:大部分圖片均來自網絡,侵刪 一個完整的計算機系統包括硬件子系統和軟件子系統兩大部分。 組成一臺計算機的物理設備的總稱叫做計算機硬件子系統,是看得見摸得著的實體,是計算機工…

華工的各類型PPT模板

華工的各類型PPT模板,包括原創的PPT及改良內容的PPT,適合科研/比賽/組會匯報等 前言各種畢業答辯夏令營答辯復試答辯獎學金答辯比賽/項目答辯組會匯報 前言 設計不易,排版不易,內容編排不易 待更新項目1 原創聲明:不經…

【論文閱讀】(2006)Dual-Optimal Inequalities for Stabilized Column Generation

文章目錄 摘要一、介紹二、對偶最優不等式(Dual-Optimal Inequalities)三、確定P的最優原始解四、二元切割下料問題4.1 約束聚合4.2 相等約束4.3 計算結果 五、切割下料問題5.1 計算結果 六、三元組的深度對偶最優不等式(Deep Dual-Optimal I…

C/C++ 乘積尾零問題(藍橋杯)

如下的10行數據,每行有10個整數,請你求出它們的乘積的末尾有多少個零? 5650,4542 3554 473 946 4114 3871 9073 90 4329 2758 7949 6113 5659 5245 7432 3051 4434 6704 3594 9937 1173 6866 3397 4759 7557 3070 2287 1453 9899…

代碼隨想錄算法訓練營第三十六天|435. 無重疊區間, 763.劃分字母區間, 56. 合并區間

435. 無重疊區間 - LeetCode 思路: 本題是一個去除重疊區間的問題, 首先按照區間的 end_point 排序, 從第二個區間開始, 如果第二個區間和第一個區間有交集, 就要移除第二個區間。 因為容易證明之后的區間區間如果和…

做測試還是測試開發,選職業要慎重!

【軟件測試面試突擊班】2024吃透軟件測試面試最全八股文攻略教程,一周學完讓你面試通過率提高90%!(自動化測試) 突然發現好像挺多人想投測開和測試的,很多人面試的時候也會被問到這幾個職位的區別,然后有測…

每日五道java面試題之mysql數據庫篇(三)

目錄: 第一題. 百萬級別或以上的數據如何刪除?第二題. 前綴索引第三題. 什么是最左前綴原則?什么是最左匹配原則?第四題. B樹和B樹的區別第五題. 使用B樹和B樹好處 第一題. 百萬級別或以上的數據如何刪除? 關于索引:…

【設計】設計一個web版的數據庫管理平臺后端精要

需求 springboot設計開發一個系統,在這個系統的數據庫表中存放著2000個數據庫實例,有MySQL、Oracle、sql server3種數據庫類型,用戶可以在頁面上選擇不同的實例,連接這些實例上的數據庫,來執行業務sql 實現 Service…