国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

YOLOv5中添加SE模塊詳解——原理+代碼

這篇具有很好參考價(jià)值的文章主要介紹了YOLOv5中添加SE模塊詳解——原理+代碼。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、SENet

論文地址:Squeeze-and-Excitation Networks [CVPR2017]
Caffe代碼地址:SENet-Caffe
Pytorch代碼地址:SENet-Pytorch

1. 設(shè)計(jì)原理

??論文中提到,在SENet提出之前,大部分工作專注于研究特征圖的空間編碼質(zhì)量(可以理解為每個(gè)通道的特征圖的特征提取質(zhì)量),即只關(guān)注每個(gè)通道中特征圖的表達(dá)能力,而沒(méi)有關(guān)注不同通道的特征圖的融合(如果一個(gè)特征圖的維度為 C × H × W C×H×W C×H×W的話,SENet之前的工作只關(guān)注了 H H H W W W維度,而沒(méi)有關(guān)注 C C C維度,不同通道的特征圖融合還是通過(guò)卷積相加的方式完成)。

??SENet關(guān)注了通道關(guān)系,提出了Squeeze-and-Excitation模塊,通過(guò)顯式地模擬通道之間的相互依賴關(guān)系,自適應(yīng)地重新校準(zhǔn)通道的特征響應(yīng)(普通卷積過(guò)程的通道關(guān)系本質(zhì)上是隱式的和局部的(除了最頂層的通道關(guān)系,因?yàn)樽铐攲拥耐ǖ琅c任務(wù)相關(guān),比如分割網(wǎng)絡(luò)的最頂層通道數(shù)為分割類別數(shù),而中間層的通道數(shù)通常是經(jīng)驗(yàn)所得))

2. SE Block

YOLOv5中添加SE模塊詳解——原理+代碼

圖1 SE Block結(jié)構(gòu)圖

??SE Block的結(jié)構(gòu)如圖1所示,首先通過(guò)卷積操作 F t r F_{tr} Ftr?將輸入特征圖 X ∈ R H ′ × W ′ × C ′ X\in R^{H'\times W'\times C'} XRH×W×C映射到特征圖 U ∈ R H × W × C U\in R^{H\times W\times C} URH×W×C,在這個(gè)過(guò)程中,用 V = [ v 1 , v 2 , . . . , v C ] V=[v_{1},v_{2},...,v_{C}] V=[v1?,v2?,...,vC?]表示卷積核的集合,輸出可表示為 U = [ u 1 , u 2 , . . . , u C ] U=[u_{1},u_{2},...,u_{C}] U=[u1?,u2?,...,uC?],則:
u c = v c ? X = ∑ s = 1 C ′ v c s ? x s u_c=v_{c}*X=\sum_{s=1}^{C'}v_{c}^s*x^s uc?=vc??X=s=1C?vcs??xs

??這里 ? * ? 表示卷積操作, u c ∈ R H × W u_{c}\in R^{H\times W} uc?RH×W, v c = [ v c 1 , v c 2 , . . . , v c C ′ ] v_{c}=[v_{c}^1,v_{c}^2,...,v_{c}^{C'}] vc?=[vc1?,vc2?,...,vcC?] X = [ x 1 , x 2 , . . . , x C ′ ] X=[x^{1},x^{2},...,x^{C'}] X=[x1,x2,...,xC], v c s v_{c}^s vcs?是一個(gè)二維卷積核,表示 v c v_{c} vc?的單個(gè)通道作用于 X X X的相應(yīng)通道上。

2.1 Squeeze:Global Information Embedding

??為了考慮輸出特征圖中每個(gè)通道的信息,論文通過(guò)全局平均池化的方式,將全局空間信息壓縮到一個(gè)通道描述符 z c z_{c} zc?中:

z c = F s q ( u c ) = 1 H × W ∑ i = 1 H ∑ j = 1 W u c ( i , j ) z_{c}=F_{sq}(u_{c})=\frac{1}{H\times W}\sum_{i=1}^{H}\sum_{j=1}^{W}u_{c}(i,j) zc?=Fsq?(uc?)=H×W1?i=1H?j=1W?uc?(i,j)

2.2 Excitation:Adaptive Recalibration

??為了完全捕獲通道依賴關(guān)系,論文選擇使用一種簡(jiǎn)單的帶有Sigmoid激活的門控機(jī)制:

s = F e x ( z , W ) = σ ( g ( z , W ) ) = σ ( W 2 δ ( W 1 z ) ) s=F_{ex}(z,W)=\sigma (g(z,W))=\sigma (W_{2}\delta (W_{1}z)) s=Fex?(z,W)=σ(g(z,W))=σ(W2?δ(W1?z))

??其中, δ \delta δ為ReLU函數(shù), W 1 ∈ R C r × C W_{1}\in R^{\frac{C}{r}\times C} W1?RrC?×C, W 2 ∈ R C × C r W_{2}\in R^{C\times\frac{C}{r}} W2?RC×rC?

??通過(guò)s重新縮放U,得到SE Block最后的輸出:

x ˉ c = F s c a l e ( u c , s c ) = s c u c \bar{x}_{c}=F_{scale}(u_{c},s_{c})=s_{c}u_{c} xˉc?=Fscale?(uc?,sc?)=sc?uc?

3. SE-Inception and SE-ResNet

??圖2為原文設(shè)計(jì)的SE-Inception模塊和SE-ResNet模塊,這是一個(gè)即插即用模塊。為了解決通道之間的依賴關(guān)系,作者使用全局平均池化操作來(lái)壓縮全局空間信息,這就是Sequeeze操作。為了利用在Sequeeze操作中聚合的信息,作者通過(guò)FC-ReLU-FC-Sigmoid操作來(lái)完全捕獲通道依賴性,這就是Excitation操作。

YOLOv5中添加SE模塊詳解——原理+代碼

圖2 SE Module
class SELayer(nn.Module):
    def __init__(self, channel, reduction=16):
        super(SELayer, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)        #全局平均池化,輸入BCHW -> 輸出 B*C*1*1
        self.fc = nn.Sequential(
            nn.Linear(channel, channel // reduction, bias=False),   #可以看到channel得被reduction整除,否則可能出問(wèn)題
            nn.ReLU(inplace=True),
            nn.Linear(channel // reduction, channel, bias=False),
            nn.Sigmoid()
        )
 
    def forward(self, x):
        b, c, _, _ = x.size()
        y = self.avg_pool(x).view(b, c)     #得到B*C*1*1,然后轉(zhuǎn)成B*C,才能送入到FC層中。
        y = self.fc(y).view(b, c, 1, 1)     #得到B*C的向量,C個(gè)值就表示C個(gè)通道的權(quán)重。把B*C變?yōu)锽*C*1*1是為了與四維的x運(yùn)算。
        return x * y.expand_as(x)           #先把B*C*1*1變成B*C*H*W大小,其中每個(gè)通道上的H*W個(gè)值都相等。*表示對(duì)應(yīng)位置相乘。

二、YOLOv5中添加SENet

1.修改common.py

??在models/common.py中添加下列代碼

class SElayer(nn.Module):
    def __init__(self, c1, c2, ratio=16):
        super(SElayer, self).__init__()
        #c*1*1
        self.avgpool = nn.AdaptiveAvgPool2d(1)
        self.l1 = nn.Linear(c1, c1 // ratio, bias=False)
        self.relu = nn.ReLU(inplace=True)
        self.l2 = nn.Linear(c1 // ratio, c1, bias=False)
        self.sig = nn.Sigmoid()

    def forward(self, x):
        b, c, _, _ = x.size()
        y = self.avgpool(x).view(b, c)
        y = self.l1(y)
        y = self.relu(y)
        y = self.l2(y)
        y = self.sig(y)
        y = y.view(b, c, 1, 1)
        return x * y.expand_as(x)

2.修改yolo.py

??在models/yolo.py中的parse_model函數(shù)中添加SElayer模塊

        if m in [Conv, GhostConv, Bottleneck, GhostBottleneck, SPP, DWConv, MixConv2d, Focus, CrossConv, BottleneckCSP,
                 C3, C3TR, ASPP, SElayer]:
            c1, c2 = ch[f], args[0]  
            if c2 != no:  
                c2 = make_divisible(c2 * gw, 8)  
            args = [c1, c2, *args[1:]] 

3.修改yolov5s.yaml

??在Backbone的倒數(shù)第二層添加SElayer,修改后的yolov5s.yaml如下所示:

# parameters
nc: 20  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple

# anchors
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 9, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3, [1024]],
   [-1, 1, SElayer, [1024]],
   [-1, 1, SPPF, [512, 512]], # 10
  ]

head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 14

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 18 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 15], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 21 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 11], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 24 (P5/32-large)

   [[18, 21, 24], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)  
  ]

參考文章

SE-ResNet的實(shí)現(xiàn)
YOLOv5-6.1添加注意力機(jī)制(SE、CBAM、ECA、CA)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-455132.html

到了這里,關(guān)于YOLOv5中添加SE模塊詳解——原理+代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【目標(biāo)檢測(cè)】yolov5改進(jìn)系列:主干網(wǎng)絡(luò)中添加SE注意力機(jī)制網(wǎng)絡(luò)

    寫在前面: 首先感謝兄弟們的關(guān)注和訂閱,讓我有創(chuàng)作的動(dòng)力,在創(chuàng)作過(guò)程我會(huì)盡最大能力,保證作品的質(zhì)量,如果有問(wèn)題,可以私信我,讓我們攜手共進(jìn),共創(chuàng)輝煌。 CNN網(wǎng)絡(luò)中,圖像或者說(shuō)特征圖Feature Map的特征主要分為空間特征(Spatial)和通道(Channel)特征。對(duì)于空間

    2023年04月16日
    瀏覽(28)
  • 基于YOLOv5+SE注意力+SPD模塊的海星檢測(cè)識(shí)別分析系統(tǒng)

    基于YOLOv5+SE注意力+SPD模塊的海星檢測(cè)識(shí)別分析系統(tǒng)

    在很多的項(xiàng)目實(shí)戰(zhàn)中驗(yàn)證分析注意力機(jī)制的加入對(duì)于模型最終性能的提升發(fā)揮著積極正向的作用,在我之前的一些文章里面也做過(guò)了一些嘗試,這里主要是想基于輕量級(jí)的s系列模型來(lái)開發(fā)構(gòu)建海底小目標(biāo)生物海星檢測(cè)系統(tǒng),在模型中加入SE注意力模塊,以期在輕量化的基礎(chǔ)上

    2024年02月05日
    瀏覽(23)
  • YOLOv5 Focus C3 各模塊詳解及代碼實(shí)現(xiàn)

    YOLOv5 Focus C3 各模塊詳解及代碼實(shí)現(xiàn)

    主要從yolov5s.yaml 的配置文件來(lái)逐一解析其中的模塊:Focus、C3、SPP、Conv、Bottleneck模塊。 這個(gè)是針對(duì)最早的v5版本進(jìn)行講解,現(xiàn)在2022最新版本是V6.2。有一些細(xì)節(jié)的差別比如Backbone部分Focus倍替換成6*6的Conv,Neck部分SPP被替換成SPPF等,想要深入學(xué)習(xí)建議去github學(xué)習(xí)源碼。 yolov5的

    2024年02月02日
    瀏覽(24)
  • YOLOv5實(shí)戰(zhàn):如何添加RepVgg模塊

    在yolov7 git倉(cāng)庫(kù)中,在common.py提供了詳細(xì)的RepConv,和與之相關(guān)的CSPRepBettleneck模塊 RepConv及RepBottleNeck代碼如下(示例): RepConv代碼段比較長(zhǎng),此處省略。 將模塊添加到config目錄下定義模塊的*.yaml文件 定義好模型,還需要對(duì)參數(shù)進(jìn)行解析,因此新添加的RepVgg模塊也需要參數(shù)解析

    2024年02月03日
    瀏覽(24)
  • 在YOLOv5中添加Swin-Transformer模塊

    在YOLOv5中添加Swin-Transformer模塊

    前段時(shí)間整理了一個(gè)可以添加SwinTransformer Block的YOLOv5代碼倉(cāng)庫(kù)。不需要任何其他的庫(kù)包,可以運(yùn)行YOLOv5程序的環(huán)境即可以正常運(yùn)行代碼。 分別進(jìn)行了SwinTransformer Block、Patch Merging、Patch Embed階段的代碼整理,以使得這些模塊可以適配于u版YOLOv5的模型構(gòu)建代碼。 和YOLOv5一樣,通

    2024年02月04日
    瀏覽(27)
  • YOLOv5改進(jìn)算法之添加CA注意力機(jī)制模塊

    YOLOv5改進(jìn)算法之添加CA注意力機(jī)制模塊

    目錄 ? 1.CA注意力機(jī)制 2.YOLOv5添加注意力機(jī)制 送書活動(dòng) ? CA(Coordinate Attention)注意力機(jī)制是一種用于加強(qiáng)深度學(xué)習(xí)模型對(duì)輸入數(shù)據(jù)的空間結(jié)構(gòu)理解的注意力機(jī)制。CA 注意力機(jī)制的核心思想是引入坐標(biāo)信息,以便模型可以更好地理解不同位置之間的關(guān)系。如下圖: 1. 輸入特征

    2024年02月09日
    瀏覽(30)
  • YOLOv5/v7 添加注意力機(jī)制,30多種模塊分析③,GCN模塊,DAN模塊

    大家好,我是哪吒。 ??本文收錄于,目標(biāo)檢測(cè)YOLO改進(jìn)指南。 本專欄均為全網(wǎng)獨(dú)家首發(fā),內(nèi)附代碼,可直接使用,改

    2024年02月08日
    瀏覽(20)
  • YOLOv5/v7 添加注意力機(jī)制,30多種模塊分析②,BAM模塊,CBAM模塊

    大家好,我是哪吒。 ??本文收錄于,目標(biāo)檢測(cè)YOLO改進(jìn)指南。 本專欄均為全網(wǎng)獨(dú)家首發(fā),內(nèi)附代碼,可直接使用,改進(jìn)的

    2024年02月09日
    瀏覽(41)
  • YOLOv5/v7 添加注意力機(jī)制,30多種模塊分析⑤,SOCA模塊 ,SimAM模塊

    大家好,我是哪吒。 ??本文收錄于,目標(biāo)檢測(cè)YOLO改進(jìn)指南。 本專欄均為全網(wǎng)獨(dú)家首發(fā),內(nèi)附代碼,可直接使用#x

    2024年02月09日
    瀏覽(20)
  • Yolov5改進(jìn)算法之添加Res2Net模塊

    Yolov5改進(jìn)算法之添加Res2Net模塊

    目錄 1. Res2Net介紹 1.1 Res2Net的背景和動(dòng)機(jī) 1.2 Res2Net的基本概念 2. YOLOV5添加Res2Net模塊 ? Res2Net (Residual Resolution Network)是一種用于圖像處理和計(jì)算機(jī)視覺任務(wù)的深度卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)。它旨在解決傳統(tǒng)的ResNet(Residual Network)存在的問(wèn)題,如對(duì)不同尺度和分辨率特征的建模不足

    2024年02月10日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包