YOLOv9獨家原創改進|增加SPD-Conv無卷積步長或池化:用于低分辨率圖像和小物體的新 CNN 模塊


專欄介紹:YOLOv9改進系列 | 包含深度學習最新創新,主力高效漲點!!!


一、文章摘要

????????卷積神經網絡(CNNs)在計算即使覺任務中如圖像分類和目標檢測等取得了顯著的成功。然而,當圖像分辨率較低或物體較小時,它們的性能會災難性下降。這是由于現有CNN常見的設計體系結構中有缺陷,即使用卷積步長和/或池化層,這導致了細粒度信息的丟失和較低效的特征表示的學習。為此,我們提出了一個名為SPD-Conv的新的CNN構建塊來代替每個卷積步長和每個池化層(因此完全消除了它們)。SPD-Conv由一個空間到深度(SPD)層和一個無卷積步長(Conv)層組成,可以應用于大多數CNN體系結構。我們從兩個最具代表性的計算即使覺任務:目標檢測和圖像分類來解釋這個新設計。然后,我們將SPD-Conv應用于YOLOv5和ResNet,創建了新的CNN架構,并通過經驗證明,我們的方法明顯優于最先進的深度學習模型,特別是在處理低分辨率圖像和小物體等更困難的任務時。

適用檢測目標:? ?通用下采樣模塊


二、SPD-Conv模塊詳解

????????論文地址:? ?https://arxiv.org/pdf/2208.03641v1.pdf

?2.1 模塊簡介

????????SPD-Conv的主要思想:? ?SPD- conv由一個空間到深度(SPD)層和一個非跨步卷積層組成。SPD組件推廣了一種(原始)圖像轉換技術來對CNN內部和整個CNN的特征映射進行下采樣。

?總結:?一種通過卷積與線性變化實現的新下采樣模塊。

?SPD- conv模塊的原理圖


三、SPD-Conv模塊使用教程

3.1 SPD-Conv模塊的代碼

class SPDConv(nn.Module):# Changing the dimension of the Tensordef __init__(self, inc, ouc, dimension=1):super().__init__()self.d = dimensionself.conv = Conv(inc * 4, ouc, k=3)def forward(self, x):x = torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1)x = self.conv(x)return x

3.2 在YOlO v9中的添加教程

閱讀YOLOv9添加模塊教程或使用下文操作

? ? ? ? 1.?將YOLOv9工程中models下common.py文件中增加模塊的代碼。

?????????2.?將YOLOv9工程中models下yolo.py文件中的第718行(可能因版本變化而變化)增加以下代碼。

        elif m in (SPDConv,):args = [ch[f], ch[f]]

3.3 運行配置文件

# YOLOv9
# Powered bu https://blog.csdn.net/StopAndGoyyy# parameters
nc: 80  # number of classes
#depth_multiple: 0.33  # model depth multiple
depth_multiple: 1  # model depth multiple
#width_multiple: 0.25  # layer channel multiple
width_multiple: 1  # layer channel multiple
#activation: nn.LeakyReLU(0.1)
#activation: nn.ReLU()# anchors
anchors: 3# YOLOv9 backbone
backbone:[[-1, 1, Silence, []],  # conv down[-1, 1, Conv, [64, 3, 2]],  # 1-P1/2# conv down[-1, 1, Conv, [128, 3, 2]],  # 2-P2/4# elan-1 block[-1, 1, RepNCSPELAN4, [256, 128, 64, 1]],  # 3# avg-conv down[-1, 1, ADown, [256]],  # 4-P3/8# elan-2 block[-1, 1, RepNCSPELAN4, [512, 256, 128, 1]],  # 5# avg-conv down[-1, 1, ADown, [512]],  # 6-P4/16# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 7# avg-conv down[-1, 1, SPDConv, []],  # 8-P5/32# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 9]# YOLOv9 head
head:[# elan-spp block[-1, 1, SPPELAN, [512, 256]],  # 10# up-concat merge[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 7], 1, Concat, [1]],  # cat backbone P4# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 13# up-concat merge[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 5], 1, Concat, [1]],  # cat backbone P3# elan-2 block[-1, 1, RepNCSPELAN4, [256, 256, 128, 1]],  # 16 (P3/8-small)# avg-conv-down merge[-1, 1, ADown, [256]],[[-1, 13], 1, Concat, [1]],  # cat head P4# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 19 (P4/16-medium)# avg-conv-down merge[-1, 1, ADown, [512]],[[-1, 10], 1, Concat, [1]],  # cat head P5# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 22 (P5/32-large)# multi-level reversible auxiliary branch# routing[5, 1, CBLinear, [[256]]], # 23[7, 1, CBLinear, [[256, 512]]], # 24[9, 1, CBLinear, [[256, 512, 512]]], # 25# conv down[0, 1, Conv, [64, 3, 2]],  # 26-P1/2# conv down[-1, 1, Conv, [128, 3, 2]],  # 27-P2/4# elan-1 block[-1, 1, RepNCSPELAN4, [256, 128, 64, 1]],  # 28# avg-conv down fuse[-1, 1, ADown, [256]],  # 29-P3/8[[23, 24, 25, -1], 1, CBFuse, [[0, 0, 0]]], # 30  # elan-2 block[-1, 1, RepNCSPELAN4, [512, 256, 128, 1]],  # 31# avg-conv down fuse[-1, 1, ADown, [512]],  # 32-P4/16[[24, 25, -1], 1, CBFuse, [[1, 1]]], # 33 # elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 34# avg-conv down fuse[-1, 1, ADown, [512]],  # 35-P5/32[[25, -1], 1, CBFuse, [[2]]], # 36# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 37# detection head# detect[[31, 34, 37, 16, 19, 22], 1, DualDDetect, [nc]],  # DualDDetect(A3, A4, A5, P3, P4, P5)]

3.4 訓練過程


歡迎關注!


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

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

相關文章

可以用來測試的接口

實際開發過程中,我們可以通過postman工具來測試接口 get請求 https://api.github.com/events?id1&nameuser post請求 http://httpbin.org/post 參數1:key1value1 參數2:key2value2

(C語言)回調函數

回調函數是什么? 回調函數就是?個通過函數指針調?的函數。 如果你把函數的指針(地址)作為參數傳遞給另?個函數,當這個指針被?來調?其所指向的函數 時,被調?的函數就是回調函數。回調函數不是由該函數的實現?…

技術閱讀周刊第十四期:常用的 Git 配置

技術閱讀周刊,每周更新。 歷史更新 20231122:第十一期20231129:第十二期20240105:第十三期:一些提高生產力的終端命令20240112:第十四期:Golang 作者 Rob Pike 在 GopherConAU 上的分享 How I w…

探索Manticore Search:開源全文搜索引擎的強大功能

在當今信息爆炸的時代,數據的快速檢索變得至關重要。無論是在電子商務網站、新聞門戶還是企業內部文檔,高效的搜索引擎都是確保用戶滿意度和工作效率的關鍵因素之一。而在搜索引擎領域,Manticore Search 作為一款開源的全文搜索引擎&#xff…

大模型(LLM)的量化技術Quantization原理學習

在自然語言處理領域,大型語言模型(LLM)在自然語言處理領域的應用越來越廣泛。然而,隨著模型規模的增大,計算和存儲資源的需求也急劇增加。為了降低計算和存儲開銷,同時保持模型的性能,LLM大模型…

2024最新算法:鸚鵡優化算法(Parrot optimizer,PO)求解23個基準函數(提供MATLAB代碼)

一、鸚鵡優化算法 鸚鵡優化算法(Parrot optimizer,PO)由Junbo Lian等人于2024年提出的一種高效的元啟發式算法,該算法從馴養的鸚鵡中觀察到的覓食、停留、交流和對陌生人行為的恐懼中汲取靈感。這些行為被封裝在四個不同的公式中…

c語言--qsort函數(詳解)

目錄 一、定義二、用qsort函數排序整型數據三、用qsort排序結構數據四、qsort函數的模擬實現 一、定義 二、用qsort函數排序整型數據 #include<stdio.h> scanf_S(int *arr,int sz) {for (int i 0; i < sz; i){scanf("%d", &arr[i]);} } int int_cmp(c…

消息隊列kafka

消息隊列解決的問題 1. 解耦&#xff0c;通過消息隊列實現應用之間解耦&#xff0c;模塊兒之間解耦 2. 跨線程/進程通信&#xff0c;通過消息隊列傳遞數據&#xff0c;實現不同線程/進程間通信 3. 提升系統穩定性&#xff0c;在高并發場景通過消息隊列緩沖&#xff0c;可以實…

哈啰Java 春招 24屆

時長 1h 3. 為什么使用分布式ID&#xff0c;解決了什么問題 4. Leaf算法了解嗎&#xff1f;講一下原理和工作流程以及優缺點 5. 有沒有可能導致id重復&#xff1f;該如何解決&#xff1f; 6. 項目中redis是如何運用的&#xff1f; 7. 項目中分布式鎖是如何實現的&#xff1f; 8…

解決在 Mac 上安裝 Adobe 軟件彈出提示:安裝包已經被損壞并且不能被打開。

問題&#xff1a; “INSTALLER” is damaged and can’t be opened. You should eject the disk image. 解決方法和步驟&#xff1a; 打開安裝包&#xff1b;將安裝包 “INSTALLER” 拖動復制到某個文件夾&#xff0c;復制后的文件路徑例如像這樣&#xff1a;/Users/michael…

LLC諧振變換器變頻移相混合控制MATLAB仿真

微?關注“電氣仔推送”獲得資料&#xff08;專享優惠&#xff09; 基本控制原理 為了實現變換器較小的電壓增益&#xff0c;同時又有較 高的效率&#xff0c;文中在變頻控制的基礎上加入移相控制&#xff0c; 在這種控制策略下&#xff0c;變換器通過調節一次側開關管 的開關…

leetcode 熱題 100_盛最多水的容器

題解一&#xff1a; 雙指針遍歷&#xff1a;容量計算公式為min(左高度&#xff0c;右高度)*底部距離&#xff0c;我們可以令底部距離逐步遞減&#xff08;左右兩邊的指針向中部移動&#xff09;。此時對于min(左高度&#xff0c;右高度)&#xff0c;假設較高的線向中部移動&…

帶你玩轉數據結構-單鏈表(適合初學者的文章,講解的很仔細哦)

前言: &#x1f388;個人主頁:&#x1f388; :???初階牛??? &#x1f43b;推薦專欄: &#x1f354;&#x1f35f;&#x1f32f; C語言進階 &#x1f511;個人信條: &#x1f335;知行合一 &#x1f349;本篇簡介:>:講解數據結構中鏈表的知識,;鏈表的分類,c語言實現單鏈…

重學Springboot3-@import注解的作用

重學Springboot3-import注解的作用 1. 引言2. Import 注解的基本用法3. 導入多個配置類4. 使用 Import 導入組件5. 使用 ImportSelector 和 ImportBeanDefinitionRegistrar6. 總結 1. 引言 在 Spring Framework 中&#xff0c;Import 注解是一個重要的元注解&#xff0c;它允許…

Linux 定時備份文件到另一臺服務器

1. 需求 用戶要求將 Tomcat 的日志文件定時備份到另一臺服務器。同事給我提供了一個寫好的 java 框架&#xff0c;但實在不想給用戶再維護另一個服務了&#xff0c;所以另尋他法。 2. 問題 使用 scp 等跨服務器傳輸命令時需要手動輸入用戶名的密碼才可進行文件傳輸&#xff…

騰訊云幻獸帕魯服務器使用Linux和Windows操作系統的具體性能比較是什么?

騰訊云幻獸帕魯服務器使用Linux和Windows操作系統的具體性能比較是什么&#xff1f; 首先&#xff0c;從內核效率來看&#xff0c;Linux在同等硬件條件下的性能優于Windows。這是因為Linux內核設計簡潔&#xff0c;對服務器工作負載進行了優化&#xff0c;能夠更好地利用系統資…

機器學習:從理論到實踐

機器學習&#xff1a;從理論到實踐 摘要 機器學習是人工智能的一個核心領域&#xff0c;它使計算機能夠通過經驗來改進性能。本文將介紹機器學習的基本概念、主要算法以及如何在實際項目中應用這些算法。我們將通過Python代碼示例來演示如何使用機器學習庫scikit-learn進行數…

Python學習 day07(JSON)

JSON 各種編程語言存儲數據的容器不盡相同&#xff0c;在Python中有字典dict這樣的數據類型&#xff0c;而其他語言可能沒有對應的字典&#xff0c;為了讓不同的語言都能夠相互通用的傳遞數據&#xff0c;JSON就是一種非常良好的中轉數據格式&#xff0c;如下&#xff1a; JSON…

mTSL: netty單向/雙向TLS連接

創建證書 不管是單向tls還是雙向tls(mTLS)&#xff0c;都需要創建證書。 創建證書可以使用openssl或者keytool&#xff0c;openssl 參考 mTLS: openssl創建CA證書 單向/雙向tls需要使用到的相關文件: 文件單向tls雙向tlsServer端Client端備注ca.key----需要保管好&#xff0…

MySQL知識點歸納總結(二)

10、MVCC實現原理&#xff1f; 事務ID&#xff08;Transaction ID&#xff09;&#xff1a;每個事務在執行時都會被分配一個唯一的事務ID&#xff0c;用于標識該事務的開始時間順序。事務ID是一個遞增的整數&#xff0c;隨著每個新事務的開始而遞增。 Undo日志&#xff08;Un…