YOLOv9獨家原創改進|加入幽靈卷積Ghost Convolution模塊,輕量化!


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


一、論文摘要

????????由于內存和計算資源有限,在嵌入式設備上部署卷積神經網絡是困難的。特征圖中的冗余是那些成功的細胞神經網絡的一個重要特征,但在神經結構設計中很少進行研究。本文提出了一種新的Ghost模塊,通過少量的計算生成更多的特征圖。基于一組內在特征圖,我們以低廉的成本應用一系列線性變換來生成許多重影特征圖,這些重影特征圖可充分揭示內在特征背后的信息。所提出的Ghost模塊可以作為即插即用組件來升級現有的卷積神經網絡。Ghost瓶頸被設計為堆疊Ghost模塊,然后可以輕松地建立輕量級GhostNet。

適用檢測目標:? ?輕量化或移動端部署


二、Ghost Conv模塊詳解

《GhostNet: More Features from Cheap Operations》

????????論文地址:? https://arxiv.org/abs/1911.11907

?2.1 模塊簡介

????????Ghost Conv的主要思想:? 通過一系列線性變換,以很小的計算量從原始特征發掘所需信息的“Ghost”特征圖(Ghost feature maps)

?總結:?一種類似殘差的模塊

Ghost Conv模塊的原理圖


三、Ghost Conv模塊使用教程

3.1 Ghost Conv模塊的代碼


class GhostConv(nn.Module):"""Ghost Convolution https://github.com/huawei-noah/ghostnet."""def __init__(self, c1, c2, k=1, s=1, g=1, act=True):"""Initializes the GhostConv object with input channels, output channels, kernel size, stride, groups andactivation."""super().__init__()c_ = c2 // 2  # hidden channelsself.cv1 = Conv(c1, c_, k, s, None, g, act=act)self.cv2 = Conv(c_, c_, 5, 1, None, c_, act=act)def forward(self, x):"""Forward propagation through a Ghost Bottleneck layer with skip connection."""y = self.cv1(x)return torch.cat((y, self.cv2(y)), 1)

3.2 在YOlO v9中的添加教程

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

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

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

            RepNCSPELAN4, SPPELAN, GhostConv}:

3.3 運行配置文件

# YOLOv9
# Powered bu https://blog.csdn.net/StopAndGoyyy
# parameters
nc: 80  # number of classes
depth_multiple: 1  # model depth 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, ADown, [512]],  # 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[-1, 1, GhostConv, [512, 3]],  # 38# detection head# detect[[31, 34, 38, 16, 19, 22], 1, DualDDetect, [nc]],  # DualDDetect(A3, A4, A5, P3, P4, P5)]

3.4 訓練過程


歡迎關注!


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

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

相關文章

【網站項目】158企業人事管理系統

🙊作者簡介:擁有多年開發工作經驗,分享技術代碼幫助學生學習,獨立完成自己的項目或者畢業設計。 代碼可以私聊博主獲取。🌹贈送計算機畢業設計600個選題excel文件,幫助大學選題。贈送開題報告模板&#xff…

突破編程_C++_字符串算法(判斷字符串是否包含)

1 算法題 :判斷一個字符串是否包含另一個字符串的所有字符(不一定連續) 1.1 題目含義 判斷一個字符串(稱為“主字符串”或“大字符串”)是否包含另一個字符串(稱為“子字符串”或“小字符串”&#xff09…

代碼隨想錄算法訓練營第31天—貪心算法05 | ● 435. 無重疊區間 ● *763.劃分字母區間 ● *56. 合并區間

435. 無重疊區間 https://programmercarl.com/0435.%E6%97%A0%E9%87%8D%E5%8F%A0%E5%8C%BA%E9%97%B4.html 考點 貪心算法重疊區間 我的思路 先按照區間左坐標進行排序,方便后續處理進行for循環,循環范圍是0到倒數第二個元素如果當前區間和下一區間重疊…

在Linux以命令行方式(靜默方式/非圖形化方式)安裝MATLAB(正版)

1.根據教程,下載windows版本matlab,打開圖形化界面,選擇linux版本的只下載不安裝 2.獲取安裝文件夾 3.獲取許可證 4.安裝 (1)跳過引用文章的2.2章節 (2)本文的安裝文件夾代替引用文章的解壓IS…

Java進階(鎖)——鎖的升級,synchronized與lock鎖區別

目錄 引出Java中鎖升級synchronized與lock鎖區別 緩存三兄弟:緩存擊穿、穿透、雪崩緩存擊穿緩存穿透緩存雪崩 總結 引出 Java進階(鎖)——鎖的升級,synchronized與lock鎖區別 Java中鎖升級 看一段代碼: public class…

Fastwhisper + Pyannote 實現 ASR + 說話者識別

文章目錄 前言一、faster-whisper簡單介紹二、pyannote.audio介紹三、faster-whisper pyannote.audio 實現語者識別四、多說幾句 前言 最近在研究ASR相關的業務,也是調研了不少模型,踩了不少坑,ASR這塊,目前中文普通話效果最好的…

Scrapy與分布式開發(1.1):課程導學

Scrapy與分布式開發:從入門到精通,打造高效爬蟲系統 課程大綱 在這個專欄中,我們將一起探索Scrapy框架的魅力,以及如何通過Scrapy-Redis實現分布式爬蟲的開發。在本課程導學中,我們將為您簡要介紹課程的學習目標、內容…

Verilog Coding Styles For Improved Simulation Efficiency論文學習記錄

原文基于Verilog-XL仿真器,測試了以下幾種方式對仿真效率的影響。 1. 使用 Case 語句而不是 if / else if 語句 八選一多路選擇器 case 實現效率比 if / else if 提升 6% 。 2. 如果可以盡量不使用 begin end 語句 使用 begin end 的 ff 觸發器比不使用 begin end …

初學者學習51還是STM32

初學者學習51還是STM32 在嵌入式系統領域,51和STM32是兩種常見的單片機架構。對于初學者來說,選擇學習哪種架構可能會成為一個難題。本文將對初學者學習51和STM32進行比較,以幫助讀者做出明智的選擇。 1. 51架構 51架構是指Intel 8051系列…

深度相機xyz點云文件三維坐標和jpg圖像文件二維坐標的相互變換函數

深度相機同時拍攝xyz點云文件和jpg圖像文件。xyz文件里面包含三維坐標[x,y,z]和jpg圖像文件包含二維坐標[x,y],但是不能直接進行變換,需要一定的步驟來推演。 下面函數是通過box二維框[xmin, ymin, xmax, ymax, _, _ ]去截取xyz文件中對應box里面的點云…

MyCAT學習——在openEuler22.03中安裝MyCAT2(網盤下載版)

準備工作 因為MyCAT 2基于JDK 1.8開發。也需要在虛擬機中安裝JDK(JDK官網就能下載,我這提供一個捷徑) jdk-8u401-linux-x64.rpmhttps://pan.baidu.com/s/1ywcDsxYOmfZONpmH9oDjfw?pwdrhel下載對應的tar安裝包,以及對應的jar包 安裝程序包…

九州金榜|孩子厭學要怎么辦?

孩子從小學到初中再到高中,孩子出現厭學情緒很正常,但是孩子出現厭學情緒后,就必然會影響到孩子學習成績,孩子產生厭學情緒的原因有哪些呢?只有找準孩子厭學原因才能去幫助孩子怎樣去克服孩子厭學情緒,下面…

ajax請求servlet成功但接收不到返回數據問題

ajax請求servlet成功但接收不到返回數據問題 javaweb初學者,最近老師布置的課設,所有功能都完成了,唯獨ajax與servlet交互出現問題,無論怎么調試都收不到數據 查詢兩天無果,剛才無意間看到 Crabime前輩的文章才恍然大…

深入解析YOLO:實時目標檢測技術的革命者

深入解析YOLO:實時目標檢測技術的革命者 目標檢測作為計算機視覺領域的一個核心任務,一直以來都是研究的熱點。而YOLO(You Only Look Once)技術作為其中的杰出代表,以其獨特的處理方式和卓越的性能,成為了…

day34貪心算法 part03

1005. K 次取反后最大化的數組和 簡單 給你一個整數數組 nums 和一個整數 k ,按以下方法修改該數組: 選擇某個下標 i 并將 nums[i] 替換為 -nums[i] 。 重復這個過程恰好 k 次。可以多次選擇同一個下標 i 。 以這種方式修改數組后,返回數…

力扣棧隊列篇

以下思路來自代碼隨想錄以及官方題解。 文章目錄 232.用棧實現隊列225.用隊列實現棧20.有效的括號1047.刪除字符串中所有相鄰重復項150.逆波蘭表達式求值347.前K個高頻元素 232.用棧實現隊列 請你僅使用兩個棧實現先入先出隊列。隊列應當支持一般隊列支持的所有操作&#xff…

OSError: [WinError 1455] 頁面文件太小,無法完成操作。

[問題描述]:OSError: [WinError 1455] 頁面文件太小,無法完成操作。 原因1:線程數太大 方法:改小線程(workers)數。 原因2:虛擬內存太小或為0,調大虛擬內存。 方法:右鍵…

mysql索引過長Specialed key was too long的解決方法

在創建要給表的時候遇到一個有意思的問題,提示Specified key was too long; max key length is 767 bytes,從描述上來看,是Key太長,超過了指定的 767字節限制。通常出現在嘗試創建一個過長的唯一鍵(UNIQUE KEY&#xf…

Vue.js 實用技巧:深入理解 Vue.mixin

🤍 前端開發工程師、技術日更博主、已過CET6 🍨 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 🕠 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》 🍚 藍橋云課簽約作者、上架課程《Vue.js 和 E…

uniapp真機運行的時候顯示同步資源失敗,未得到同步資源的授權,請停止運行后重新運行,并注意手機上的授權提示

1、問題 在添加清單文件之前,項目運行都是好好的,添加了清單項目以后,基座一打就報這個錯,并且手機在安裝基座的時候會提示解析包時失敗, 2、解決方案 打開我的清單文件,我發現我和官網寫的清單文件不一…