中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

群暉 docker wordpress廣州百度推廣優(yōu)化排名

群暉 docker wordpress,廣州百度推廣優(yōu)化排名,設計師設計一套房子要多少錢,昆明網(wǎng)站建設wang.cd一、本文介紹 本文記錄的是利用GnConv優(yōu)化YOLOv9的目標檢測方法研究。YOLOv9在進行目標檢測時,需要對不同層次的特征進行融合。GnConv可以考慮更高階的空間交互,能夠更好地捕捉特征之間的復雜關(guān)系,從而增強特征融合的效果,提高?!?article class="baidu_pl">

一、本文介紹

本文記錄的是利用GnConv優(yōu)化YOLOv9的目標檢測方法研究。YOLOv9在進行目標檢測時,需要對不同層次的特征進行融合。GnConv可以考慮更高階的空間交互,能夠更好地捕捉特征之間的復雜關(guān)系,從而增強特征融合的效果,提高模型對目標的檢測能力。

文章目錄

  • 一、本文介紹
  • 二、HorNet原理介紹
    • 2.1、GnConv設計原理
    • 2.2、GnConv計算公式
    • 2.3、優(yōu)勢
  • 三、GnConv的實現(xiàn)代碼
  • 四、添加步驟
    • 4.1 修改common.py
      • 4.1.1 創(chuàng)新模塊?
    • 4.2 修改yolo.py
  • 五、yaml模型文件
    • 5.1 模型改進?
  • 六、成功運行結(jié)果


二、HorNet原理介紹

HorNet: 利用遞歸門控卷積實現(xiàn)高效高階空間交互

GnConv(Recursive Gated Convolution,遞歸門控卷積)是論文中提出的一種高效操作,用于實現(xiàn)長期和高階空間交互,其設計原理、計算公式和優(yōu)勢如下:

2.1、GnConv設計原理

  • 輸入自適應交互與門控卷積Vision Transformer的成功主要依賴于對視覺數(shù)據(jù)中空間交互的適當建模,與簡單使用靜態(tài)卷積核聚合相鄰特征的CNN不同,Vision Transformer應用多頭自注意力來動態(tài)生成權(quán)重以混合空間標記,但自注意力關(guān)于輸入大小的二次復雜度在很大程度上阻礙了其應用,尤其是在需要更高分辨率特征圖的下游任務中。在這項工作中,作者尋求一種更有效和高效的方法來執(zhí)行空間交互,使用門控卷積(gConv)來實現(xiàn)輸入自適應的空間混合。
  • 高階交互與遞歸門控:在通過gConv實現(xiàn)了高效的一階空間交互后,作者設計了遞歸門控卷積(GnConv)來通過引入高階交互進一步增強模型容量。具體來說,首先使用多個線性投影層( ? i n \phi_{in} ?in?)獲得一組投影特征( p 0 p_0 p0? q k q_k qk?),然后通過遞歸的方式執(zhí)行門控卷積( p k + 1 = f k ( q k ) ⊙ g k ( p k ) / α p_{k + 1} = f_k(q_k) \odot g_k(p_k) / \alpha pk+1?=fk?(qk?)gk?(pk?)/α),其中 f k f_k fk?是一組深度卷積層, g k g_k gk?用于匹配不同階的維度,最后將最后一次遞歸步驟的輸出 q n q_n qn?送入投影層 ? o u t \phi_{out} ?out?以獲得 g n C o n v g^{n}Conv gnConv的結(jié)果。從遞歸公式可以看出, p k p_k pk?的交互階數(shù)在每一步后都會增加1,因此 g n C o n v gnConv gnConv實現(xiàn)了 n n n階空間交互。
  • 大核卷積與長期交互:為了使 G n C o n v GnConv GnConv能夠捕捉長期交互,作者采用了兩種實現(xiàn)方式來處理深度卷積 f f f
    • 7×7卷積:7×7是Swin TransformersConvNext的默認窗口/核大小,研究表明該核大小在ImageNet分類和各種下游任務中產(chǎn)生良好性能,因此作者遵循此配置以公平地與代表性的Vision Transformer和現(xiàn)代CNN進行比較。
    • 全局濾波器(GF):GF層通過將頻域特征與可學習的全局濾波器相乘,相當于在空間域中進行具有全局核大小和循環(huán)填充的卷積。作者使用了GF層的修改版本,即處理一半的通道與全局濾波器相乘,另一半與3×3深度卷積相乘,并僅在后期階段使用GF層以保留更多局部細節(jié)。

2.2、GnConv計算公式

門控卷積輸出

x ∈ R H W × C x \in \mathbb{R}^{H W \times C} xRHW×C為輸入特征,門控卷積 y = g C o n v ( x ) y = gConv(x) y=gConv(x)的輸出可寫為:
[ p 0 H W × C , q 0 H W × C ] = ? i n ( x ) ∈ R H W × 2 C , y = f ( q 0 ) ⊙ p 0 ∈ R H W × C , y = ? o u t ( p 1 ) ∈ R H W × C , \begin{array}{r} {\left[p_{0}^{H W \times C}, q_{0}^{H W \times C}\right]=\phi_{in }(x) \in \mathbb{R}^{H W \times 2 C},} \\ y = f\left(q_{0}\right) \odot p_{0} \in \mathbb{R}^{H W \times C}, \\ y = \phi_{out }\left(p_{1}\right) \in \mathbb{R}^{H W \times C}, \end{array} [p0HW×C?,q0HW×C?]=?in?(x)RHW×2C,y=f(q0?)p0?RHW×C,y=?out?(p1?)RHW×C,?

其中 ? i n \phi_{in} ?in? ? o u t \phi_{out} ?out?是線性投影層以執(zhí)行通道混合, f f f是深度卷積。注意到 p 1 ( i , c ) = ∑ j ∈ Ω i w i → j c q 0 ( j , c ) p 0 ( i , c ) p_{1}^{(i, c)}=\sum_{j \in \Omega_{i}} w_{i \to j}^{c} q_{0}^{(j, c)} p_{0}^{(i, c)} p1(i,c)?=jΩi??wijc?q0(j,c)?p0(i,c)?,其中 Ω i \Omega_{i} Ωi?是以為 i i i中心的局部窗口, w i → j w_{i \to j} wij?代表卷積權(quán)重。

  • 遞歸門控卷積
    [ p 0 H W × C 0 , q 0 H W × C 0 , … , q n ? 1 H W × C n ? 1 ] = ? i n ( x ) ∈ R H W × ( C 0 + ∑ 0 ≤ k ≤ n ? 1 C k ) , p k + 1 = f k ( q k ) ⊙ g k ( p k ) / α , k = 0 , 1 , … , n ? 1 , \begin{aligned} &\left[p_{0}^{H W \times C_{0}}, q_{0}^{H W \times C_{0}}, \ldots, q_{n - 1}^{H W \times C_{n - 1}}\right]=\phi_{in }(x) \in \mathbb{R}^{H W \times\left(C_{0} + \sum_{0 \leq k \leq n - 1} C_{k}\right)}, \\ &p_{k + 1} = f_{k}\left(q_{k}\right) \odot g_{k}\left(p_{k}\right) / \alpha, k = 0, 1, \ldots, n - 1, \end{aligned} ?[p0HW×C0??,q0HW×C0??,,qn?1HW×Cn?1??]=?in?(x)RHW×(C0?+0kn?1?Ck?),pk+1?=fk?(qk?)gk?(pk?)/α,k=0,1,,n?1,?
    其中 g k g_{k} gk?的定義為: g k = { I d e n t i t y , k = 0 L i n e a r ( C k ? 1 , C k ) , 1 ≤ k ≤ n ? 1 g_{k}=\begin{cases}Identity, & k = 0 \\Linear\left(C_{k - 1}, C_{k}\right), & 1 \leq k \leq n - 1\end{cases} gk?={Identity,Linear(Ck?1?,Ck?),?k=01kn?1?。
  • 計算復雜度:總FLOPs為: F L O P s ( g n C o n v ) < H W C ( 2 K 2 + 11 3 × C + 2 ) FLOPs\left(g^{n}Conv\right) < HW C\left(2K^{2} + \frac{11}{3} \times C + 2\right) FLOPs(gnConv)<HWC(2K2+311?×C+2),其中 K K K是深度卷積的核大小。

在這里插入圖片描述

2.3、優(yōu)勢

  • 高效:基于卷積的實現(xiàn)避免了自注意力的二次復雜度。在執(zhí)行空間交互時逐漸增加通道寬度的設計也使能夠以有限的復雜度實現(xiàn)更高階的交互。
  • 可擴展:將自注意力中的二階交互擴展到任意階,以進一步提高建模能力。由于不對空間卷積的類型做假設,因此(gnConv)與各種核大小和空間混合策略兼容。
  • 平移等變性:完全繼承了標準卷積的平移等變性,這為主要視覺任務引入了有益的歸納偏差,并避免了局部注意力帶來的不對稱性。

論文:https://arxiv.org/pdf/2207.14284
源碼:https://github.com/raoyongming/HorNet

三、GnConv的實現(xiàn)代碼

GnConv模塊的實現(xiàn)代碼如下:


def get_dwconv(dim, kernel, bias):return nn.Conv2d(dim, dim, kernel_size=kernel, padding=(kernel-1)//2 ,bias=bias, groups=dim)class gnConv(nn.Module):def __init__(self, dim, order=5, gflayer=None, h=14, w=8, s=1.0):super().__init__()self.order = orderself.dims = [dim // 2 ** i for i in range(order)]self.dims.reverse()self.proj_in = nn.Conv2d(dim, 2*dim, 1)if gflayer is None:self.dwconv = get_dwconv(sum(self.dims), 7, True)else:self.dwconv = gflayer(sum(self.dims), h=h, w=w)self.proj_out = nn.Conv2d(dim, dim, 1)self.pws = nn.ModuleList([nn.Conv2d(self.dims[i], self.dims[i+1], 1) for i in range(order-1)])self.scale = sdef forward(self, x, mask=None, dummy=False):# B, C, H, W = x.shape gnconv [512]by iscyy/airfused_x = self.proj_in(x)pwa, abc = torch.split(fused_x, (self.dims[0], sum(self.dims)), dim=1)dw_abc = self.dwconv(abc) * self.scaledw_list = torch.split(dw_abc, self.dims, dim=1)x = pwa * dw_list[0]for i in range(self.order -1):x = self.pws[i](x) * dw_list[i+1]x = self.proj_out(x)return x

四、添加步驟

4.1 修改common.py

此處需要修改的文件是models/common.py

common.py中定義了網(wǎng)絡結(jié)構(gòu)的通用模塊,我們想要加入新的模塊就只需要將模塊代碼放到這個文件內(nèi)即可。

4.1.1 創(chuàng)新模塊?

模塊改進方法:1??先加入gnConv模塊。
將上方的實現(xiàn)代碼粘貼到common.py文件夾下,gnConv模塊添加后如下:

在這里插入圖片描述

2??基于gnConvRepNCSPELAN4。

第二種改進方法是對YOLOv9中的RepNCSPELAN4模塊進行改進。將gnConv模塊RepNCSPELAN4 結(jié)合后,替換其中的普通卷積可以使YOLOv9實現(xiàn)更高階的空間交互,更好地捕捉特征之間的復雜關(guān)系,從而提高模型的建模能力。

改進代碼如下:

class GnRepNCSPELAN4(nn.Module):# csp-elandef __init__(self, c1, c2, c3, c4, c5=1):  # ch_in, ch_out, number, shortcut, groups, expansionsuper().__init__()self.c = c3//2self.cv1 = Conv(c1, c3, 1, 1)self.cv2 = nn.Sequential(RepNCSP(c3//2, c4, c5), gnConv(c4))self.cv3 = nn.Sequential(RepNCSP(c4, c4, c5), gnConv(c4))self.cv4 = Conv(c3+(2*c4), c2, 1, 1)def forward(self, x):y = list(self.cv1(x).chunk(2, 1))y.extend((m(y[-1])) for m in [self.cv2, self.cv3])return self.cv4(torch.cat(y, 1))def forward_split(self, x):y = list(self.cv1(x).split((self.c, self.c), 1))y.extend(m(y[-1]) for m in [self.cv2, self.cv3])return self.cv4(torch.cat(y, 1))

在這里插入圖片描述

注意?:在4.2小節(jié)中的yolo.py文件中需要聲明的模塊名稱為:gnConvGnRepNCSPELAN4

4.2 修改yolo.py

此處需要修改的文件是models/yolo.py

yolo.py用于函數(shù)調(diào)用,我們只需要將common.py中定義的新的模塊名添加到parse_model函數(shù)下即可。

gnConv模塊以及GnRepNCSPELAN4模塊添加后如下:

在這里插入圖片描述


五、yaml模型文件

5.1 模型改進?

在代碼配置完成后,配置模型的YAML文件。

此處以models/detect/yolov9-c.yaml為例,在同目錄下創(chuàng)建一個用于自己數(shù)據(jù)集訓練的模型文件yolov9-c-GnRepNCSPELAN4.yaml。

yolov9-c.yaml中的內(nèi)容復制到yolov9-c-GnRepNCSPELAN4.yaml文件下,修改nc數(shù)量等于自己數(shù)據(jù)中目標的數(shù)量。
在骨干網(wǎng)絡中,將四個RepNCSPELAN4模塊替換成GnRepNCSPELAN4模塊。

# YOLOv9# parameters
nc: 80  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # 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, GnRepNCSPELAN4, [256, 128, 64, 1]],  # 3# avg-conv down[-1, 1, ADown, [256]],  # 4-P3/8# elan-2 block[-1, 1, GnRepNCSPELAN4, [512, 256, 128, 1]],  # 5# avg-conv down[-1, 1, ADown, [512]],  # 6-P4/16# elan-2 block[-1, 1, GnRepNCSPELAN4, [512, 512, 256, 1]],  # 7# avg-conv down[-1, 1, ADown, [512]],  # 8-P5/32# elan-2 block[-1, 1, GnRepNCSPELAN4, [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)]

六、成功運行結(jié)果

分別打印網(wǎng)絡模型可以看到GnRepNCSPELAN4模塊已經(jīng)加入到模型中,并可以進行訓練了。

yolov9-c-GnRepNCSPELAN4

                from  n    params  module                                  arguments                     0                -1  1         0  models.common.Silence                   []                            1                -1  1      1856  models.common.Conv                      [3, 64, 3, 2]                 2                -1  1     73984  models.common.Conv                      [64, 128, 3, 2]               3                -1  1    212864  models.common.RepNCSPELAN4              [128, 256, 128, 64, 1]        4                -1  1    164352  models.common.ADown                     [256, 256]                    5                -1  1    847616  models.common.RepNCSPELAN4              [256, 512, 256, 128, 1]       6                -1  1    656384  models.common.ADown                     [512, 512]                    7                -1  1   2857472  models.common.RepNCSPELAN4              [512, 512, 512, 256, 1]       8                -1  1    656384  models.common.ADown                     [512, 512]                    9                -1  1   2209152  models.common.GnRepNCSPELAN4            [512, 512, 512, 256, 1]       
10                -1  1    656896  models.common.SPPELAN                   [512, 512, 256]               
11                -1  1         0  torch.nn.modules.upsampling.Upsample    [None, 2, 'nearest']          
12           [-1, 7]  1         0  models.common.Concat                    [1]                           
13                -1  1   3119616  models.common.RepNCSPELAN4              [1024, 512, 512, 256, 1]      
14                -1  1         0  torch.nn.modules.upsampling.Upsample    [None, 2, 'nearest']          
15           [-1, 5]  1         0  models.common.Concat                    [1]                           
16                -1  1    912640  models.common.RepNCSPELAN4              [1024, 256, 256, 128, 1]      
17                -1  1    164352  models.common.ADown                     [256, 256]                    
18          [-1, 13]  1         0  models.common.Concat                    [1]                           
19                -1  1   2988544  models.common.RepNCSPELAN4              [768, 512, 512, 256, 1]       
20                -1  1    656384  models.common.ADown                     [512, 512]                    
21          [-1, 10]  1         0  models.common.Concat                    [1]                           
22                -1  1   3119616  models.common.RepNCSPELAN4              [1024, 512, 512, 256, 1]      
23                 5  1    131328  models.common.CBLinear                  [512, [256]]                  
24                 7  1    393984  models.common.CBLinear                  [512, [256, 512]]             
25                 9  1    656640  models.common.CBLinear                  [512, [256, 512, 512]]        
26                 0  1      1856  models.common.Conv                      [3, 64, 3, 2]                 
27                -1  1     73984  models.common.Conv                      [64, 128, 3, 2]               
28                -1  1    212864  models.common.RepNCSPELAN4              [128, 256, 128, 64, 1]        
29                -1  1    164352  models.common.ADown                     [256, 256]                    
30  [23, 24, 25, -1]  1         0  models.common.CBFuse                    [[0, 0, 0]]                   
31                -1  1    847616  models.common.RepNCSPELAN4              [256, 512, 256, 128, 1]       
32                -1  1    656384  models.common.ADown                     [512, 512]                    
33      [24, 25, -1]  1         0  models.common.CBFuse                    [[1, 1]]                      
34                -1  1   2857472  models.common.RepNCSPELAN4              [512, 512, 512, 256, 1]       
35                -1  1    656384  models.common.ADown                     [512, 512]                    
36          [25, -1]  1         0  models.common.CBFuse                    [[2]]                         
37                -1  1   2857472  models.common.RepNCSPELAN4              [512, 512, 512, 256, 1]       
38[31, 34, 37, 16, 19, 22]  1  21725312  DualDDetect                             [80, [512, 512, 512, 256, 512, 512]]
yolov9-c-GnRepNCSPELAN4 summary: 974 layers, 50533760 parameters, 50533728 gradients, 239.4 GFLOPs
http://www.risenshineclean.com/news/30401.html

相關(guān)文章:

  • l建設銀行網(wǎng)站深圳最新消息
  • 精品網(wǎng)站建設多少錢seo怎么優(yōu)化網(wǎng)站排名
  • 如何做網(wǎng)站的優(yōu)化網(wǎng)絡營銷好找工作嗎
  • 北京南站到北京西站新手如何學seo
  • 專業(yè)做破碎機的網(wǎng)站百度在線使用
  • 沈陽做網(wǎng)站哪個好軟文寫作平臺
  • 深圳羅湖網(wǎng)站建設公司如何推廣網(wǎng)站
  • 外貿(mào)選品網(wǎng)站今天國內(nèi)最新消息
  • 永久空間網(wǎng)站鄭州高端網(wǎng)站建設
  • 做如美團式網(wǎng)站要多少錢今日最新足球推薦
  • 企業(yè)做網(wǎng)站有什么好處公眾號軟文范例100
  • 深圳做網(wǎng)站的公司排名黃岡網(wǎng)站推廣廠家
  • 唐山網(wǎng)站建設價格文案代寫
  • 做論壇網(wǎng)站網(wǎng)站怎么制作
  • 蘇州新港建設集團有限公司網(wǎng)站自媒體發(fā)布平臺
  • 南陽百度網(wǎng)站推廣河南專業(yè)網(wǎng)絡推廣公司
  • 網(wǎng)站標識代碼怎么加網(wǎng)絡產(chǎn)品運營與推廣
  • 學做餃子餡上那個網(wǎng)站推廣優(yōu)化師
  • 局域網(wǎng)建設簡單的影視網(wǎng)站seo搜狗排名點擊
  • 荔灣網(wǎng)站制作如何搜索網(wǎng)頁關(guān)鍵詞
  • 有什么網(wǎng)站可以做微信支付寶支付寶一鍵制作單頁網(wǎng)站
  • 惠州有哪些做網(wǎng)站的公司百度熱門
  • 幫客戶做網(wǎng)站平臺犯法嗎南寧關(guān)鍵詞優(yōu)化公司
  • 服裝市場網(wǎng)站建設互聯(lián)網(wǎng)營銷師報名費
  • 域名購買后網(wǎng)站搭建賬號seo是什么
  • 自己怎么做VIP視頻解網(wǎng)站汕頭網(wǎng)站建設技術(shù)外包
  • 橙子建站客服電話2020 惠州seo服務
  • 京網(wǎng)站建設公司百度地圖收錄提交入口
  • 程序員 做網(wǎng)站 微信公眾號 賺錢寧波seo推廣費用
  • 做網(wǎng)站也是一門技術(shù)惠州網(wǎng)絡營銷