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/714553.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714553.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714553.shtml

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

相關文章

【LeetCode刷題】146. LRU 緩存

請你設計并實現一個滿足 LRU (最近最少使用) 緩存 約束的數據結構。 實現 LRUCache 類: LRUCache(int capacity) 以 正整數 作為容量 capacity 初始化 LRU 緩存int get(int key) 如果關鍵字 key 存在于緩存中,則返回關鍵字的值,否則返回 -…

全量知識系統問題及SmartChat給出的答復 之9 三套工具之4語法解析器 之2

Q23. 一個語言的語法簡約規則 這些規則顯示show 在一個給定單詞(a given word)的右邊或左邊可能出現的單詞的類別。句型的多樣性variety不是復雜文法(a complex grammar)的結果,而是簡單語法(a simple gra…

【InternLM 實戰營筆記】浦語·靈筆的圖文理解及創作部署、 Lagent 工具調用 Demo

浦語靈筆的圖文理解及創作部署 浦語靈筆是基于書生浦語大語言模型研發的視覺-語言大模型,提供出色的圖文理解和創作能力,結合了視覺和語言的先進技術,能夠實現圖像到文本、文本到圖像的雙向轉換。使用浦語靈筆大模型可以輕松的創作一篇圖文推…

進程間的通信 -- 共享內存

一 共享內存的概念 1. 1 共享內存的原理 之前我們學過管道通信,分為匿名管道和命名管道,匿名管道通過父子進程的屬性繼承原理來完成父子進程看到同一份資源的目的,而命名管道則是通過路徑與文件名來唯一標識管道文件,來讓不同的進…

學習Android的第二十一天

目錄 Android ProgressDialog (進度條對話框) 例子 Android DatePickerDialog 日期選擇對話框 例子 Android TimePickerDialog 時間選擇對話框 Android PopupWindow 懸浮框 構造函數 方法 例子 官方文檔 Android OptionMenu 選項菜單 例子 官方文檔 Android Progr…

Java實戰:Spring Boot中各類參數校驗機制

引言 在開發Web應用程序時,對客戶端傳入的參數進行有效校驗是保證系統安全性和穩定性的重要環節。Spring Boot作為一個現代化的Java開發框架,提供了多種參數校驗的方法和工具,以滿足不同場景下的需求。本文將深入探討Spring Boot中實現各種參…

typescript 的常用方式

文章目錄 前言一、綁定props 默認值的方式:withDefaults1.vue2 的props設置默認值2.vue3 的props設置默認值(1) 不設置默認值的寫法(2) 設置默認值的寫法(分離模式)(3) 設置默認值的寫法(組合模式) 二、定義一個二維數…

Matlab在同一張圖中如何加入多個圖例

根據代碼最終畫出的圖片如下: 其實原理很簡單,就是在一張figure中畫多個坐標軸,每個坐標軸都有對應的圖例,之后再將多余坐標軸隱藏,只保留一個即可。 代碼如下: clear all; close all;dd_linewidth 1;a …

maven archetype 項目原型

拓展閱讀 maven 包管理平臺-01-maven 入門介紹 Maven、Gradle、Ant、Ivy、Bazel 和 SBT 的詳細對比表格 maven 包管理平臺-02-windows 安裝配置 mac 安裝配置 maven 包管理平臺-03-maven project maven 項目的創建入門 maven 包管理平臺-04-maven archetype 項目原型 ma…

Spring學習筆記(六)利用Spring的jdbc實現學生管理系統的用戶登錄功能

一、案例分析 本案例要求學生在控制臺輸入用戶名密碼,如果用戶賬號密碼正確則顯示用戶所屬班級,如果登錄失敗則顯示登錄失敗。 (1)為了存儲學生信息,需要創建一個數據庫。 (2)為了程序連接數…

洛谷P1927防護傘

題目描述 據說 20122012 的災難和太陽黑子的爆發有關。于是地球防衛小隊決定制造一個特殊防護傘,擋住太陽黑子爆發的區域,減少其對地球的影響。由于太陽相對于地球來說實在是太大了,我們可以把太陽表面看作一個平面,中心定為(0,0…

C 基本語法

我們已經看過 C 程序的基本結構,這將有助于我們理解 C 語言的其他基本的構建塊。 C 的令牌(Token) C 程序由各種令牌組成,令牌可以是關鍵字、標識符、常量、字符串值,或者是一個符號。例如,下面的 C 語句…

30天自制操作系統(第23天)

23.1 編寫malloc 參考第22天的內容,在繪制窗口前先分配了150*50個字節大小的內存,所以導致該文件經編譯后有7.6k左右,能否在其中使用指針呢?當需要開辟空間時,移動指針即可。在之前的章節中也有函數memman_alloc函數可…

php源碼 單色bmp圖片取模工具 按任意方式取模 生成字節數組 自由編輯點陣

http://2.wjsou.com/BMP/index.html 想試試chatGPT4生成,還是要手工改 php 寫一個網頁界面上可以選擇一張bmp圖片,界面上就顯示這張bmp圖片, 點生成取模按鈕,在圖片下方會顯示這張bmp圖片的取模數據。 取模規則是按界面設置的&a…

Linux 的交換空間(swap)是什么?有什么用?

目錄 swap是什么?swap有什么用?swap使用典型場景如何查看你的系統是否用到交換空間呢?查看系統中swap in/out的情況 swap是什么? swap就是磁盤上的一塊區域。它和Windows系統中的交換文件作用類似,但是它是一段連續的…

03、MongoDB -- MongoDB 權限的設計

目錄 MongoDB 權限的設計演示前準備:啟動 mongodb 服務器 和 客戶端 :1、啟動單機模式的 mongodb 服務器2、啟動 mongodb 的客戶端 MongoDB 權限的設計1、MongoDB 的每個數據庫都可以保存用戶,不止admin數據庫可以保存用戶。2、保存用戶的數據…

Linux 學習筆記(8)

八、 啟動引導 1 、 Linux 的啟動流程 1) BIOS 自檢 2) 啟動 GRUB/LILO 3) 運行 Linux kernel 并檢測硬件 4) 掛載根文件系統 5) 運行 Linux 系統的第一個進程 init( 其 PID 永遠為 1 ,是所有其它進程的父進程 ) 6) init 讀取系統引導配置文件…

GD25Q32驅動

GD25Q32是一款基于SPI的Flash芯片,容量為32/84M bytes。它的引腳如下: 該芯片支持多種SPI操作方式,包括:Standard SPI(標準SPI)、Dual SPI(雙線 SPI)和Quad SPI(四線 SPI) 。有關SPI的介紹可以參考: SPI通信原理-CSDN…

flutter 文字一行顯示,超出換行

因為app有多語言,中文和其他語言長度不一致,可能導致英文會很長。 中文樣式 英文樣式 代碼 Row(mainAxisAlignment: MainAxisAlignment.end,crossAxisAlignment: CrossAxisAlignment.end,children: [Visibility(visible: controller.info.fee ! null,ch…

探尋2024年國內熱門低代碼平臺排行!| 功能特點一覽

低代碼開發是一項革命性的技術,主要目的是盡量避免程序研發的復雜性,讓外行開發者也能加入到應用程序的搭建中。低代碼平臺的核心概念和構成部分通常包括用戶界面和拖拽設計、預構件和模塊、自動化工作內容與數據庫集成和擴展應用,應用低代碼…