深度學(xué)習(xí)模塊11-S2Attention模塊

10、S2Attention模塊

論文《S2-MLPV2: IMPROVED SPATIAL-SHIFT MLP ARCHITECTURE FOR VISION》

1瘤载、作用

S2-MLPv2是一個(gè)改進(jìn)的空間位移多層感知器(MLP)視覺骨架網(wǎng)絡(luò)否灾,旨在通過利用通道維度的擴(kuò)展和分割以及采用分割注意力(split-attention)操作來增強(qiáng)圖像識(shí)別準(zhǔn)確性。與傳統(tǒng)的S2-MLP相比鸣奔,S2-MLPv2在不同的部分執(zhí)行不同的空間位移操作墨技,然后利用分割注意力操作來融合這些部分。此外挎狸,該方法采用了較小尺度的圖像塊和金字塔結(jié)構(gòu)扣汪,進(jìn)一步提升圖像識(shí)別精度询件。

2拿撩、機(jī)制

1、特征圖擴(kuò)展和分割

首先沿著通道維度擴(kuò)展特征圖瞪慧,然后將擴(kuò)展后的特征圖分割成多個(gè)部分。

2茅主、空間位移操作

對(duì)每個(gè)分割的部分執(zhí)行不同的空間位移操作舞痰,以增強(qiáng)特征表征。

3诀姚、分割注意力操作

使用分割注意力操作融合經(jīng)過空間位移處理的各個(gè)部分响牛,生成融合后的特征圖。

4赫段、金字塔結(jié)構(gòu)

采用較小尺度的圖像塊和層次化的金字塔結(jié)構(gòu)呀打,以捕獲更精細(xì)的視覺細(xì)節(jié),提高模型的識(shí)別精度糯笙。

3贬丛、獨(dú)特優(yōu)勢(shì)

1、增強(qiáng)的特征表征能力

通過對(duì)特征圖進(jìn)行擴(kuò)展炬丸、分割和不同方向的空間位移操作瘫寝,S2-MLPv2能夠捕獲更加豐富的特征信息蜒蕾,提升模型的表征能力稠炬。

2、分割注意力機(jī)制

利用分割注意力操作有效地融合了不同空間位移處理的特征咪啡,進(jìn)一步增強(qiáng)了特征的表征力首启。

3、金字塔結(jié)構(gòu)的應(yīng)用

通過采用較小尺度的圖像塊和層次化的金字塔結(jié)構(gòu)撤摸,S2-MLPv2模型能夠更好地捕捉圖像中的細(xì)粒度細(xì)節(jié)毅桃,從而在圖像識(shí)別任務(wù)上達(dá)到更高的準(zhǔn)確率。

4准夷、高效的性能

即使在沒有自注意力機(jī)制和額外訓(xùn)練數(shù)據(jù)的情況下钥飞,S2-MLPv2也能在ImageNet-1K基準(zhǔn)上達(dá)到83.6%的頂級(jí)1準(zhǔn)確率,表現(xiàn)優(yōu)于其他MLP模型衫嵌,同時(shí)參數(shù)數(shù)量更少读宙,表明其在實(shí)際部署中具有競(jìng)爭(zhēng)力。

4楔绞、代碼

import numpy as np
import torch
from torch import nn
from torch.nn import init

def spatial_shift1(x):
    # 實(shí)現(xiàn)第一種空間位移结闸,位移圖像的四分之一塊
    b, w, h, c = x.size()
    # 以下四行代碼分別向左、向右酒朵、向上桦锄、向下移動(dòng)圖像的四分之一塊
    x[:, 1:, :, :c // 4] = x[:, :w - 1, :, :c // 4]
    x[:, :w - 1, :, c // 4:c // 2] = x[:, 1:, :, c // 4:c // 2]
    x[:, :, 1:, c // 2:c * 3 // 4] = x[:, :, :h - 1, c // 2:c * 3 // 4]
    x[:, :, :h - 1, 3 * c // 4:] = x[:, :, 1:, 3 * c // 4:]
    return x

def spatial_shift2(x):
    # 實(shí)現(xiàn)第二種空間位移,邏輯與spatial_shift1相似蔫耽,但位移方向不同
    b, w, h, c = x.size()
    # 對(duì)圖像的四分之一塊進(jìn)行空間位移
    x[:, :, 1:, :c // 4] = x[:, :, :h - 1, :c // 4]
    x[:, :, :h - 1, c // 4:c // 2] = x[:, :, 1:, c // 4:c // 2]
    x[:, 1:, :, c // 2:c * 3 // 4] = x[:, :w - 1, :, c // 2:c * 3 // 4]
    x[:, :w - 1, :, 3 * c // 4:] = x[:, 1:, :, 3 * c // 4:]
    return x

class SplitAttention(nn.Module):
    # 定義分割注意力模塊结耀,使用MLP層進(jìn)行特征轉(zhuǎn)換和注意力權(quán)重計(jì)算
    def __init__(self, channel=512, k=3):
        super().__init__()
        self.channel = channel
        self.k = k  # 分割的塊數(shù)
        # 定義MLP層和激活函數(shù)
        self.mlp1 = nn.Linear(channel, channel, bias=False)
        self.gelu = nn.GELU()
        self.mlp2 = nn.Linear(channel, channel * k, bias=False)
        self.softmax = nn.Softmax(1)

    def forward(self, x_all):
        # 計(jì)算分割注意力,并應(yīng)用于輸入特征
        b, k, h, w, c = x_all.shape
        x_all = x_all.reshape(b, k, -1, c)  # 重塑維度
        a = torch.sum(torch.sum(x_all, 1), 1)  # 聚合特征
        hat_a = self.mlp2(self.gelu(self.mlp1(a)))  # 通過MLP計(jì)算注意力權(quán)重
        hat_a = hat_a.reshape(b, self.k, c)  # 調(diào)整形狀
        bar_a = self.softmax(hat_a)  # 應(yīng)用softmax獲取注意力分布
        attention = bar_a.unsqueeze(-2)  # 增加維度
        out = attention * x_all  # 將注意力權(quán)重應(yīng)用于特征
        out = torch.sum(out, 1).reshape(b, h, w, c)  # 聚合并調(diào)整形狀
        return out

class S2Attention(nn.Module):
    # S2注意力模塊,整合空間位移和分割注意力
    def __init__(self, channels=512):
        super().__init__()
        # 定義MLP層
        self.mlp1 = nn.Linear(channels, channels * 3)
        self.mlp2 = nn.Linear(channels, channels)
        self.split_attention = SplitAttention()

    def forward(self, x):
        b, c, w, h = x.size()
        x = x.permute(0, 2, 3, 1)  # 調(diào)整維度順序
        x = self.mlp1(x)  # 通過MLP層擴(kuò)展特征
        x1 = spatial_shift1(x[:, :, :, :c])  # 應(yīng)用第一種空間位移
        x2 = spatial_shift2(x[:, :, :, c:c * 2])  # 應(yīng)用第二種空間位移
        x3 = x[:, :, :, c * 2:]  # 保留原始特征的一部分
        x_all = torch.stack([x1, x2, x3], 1)  # 堆疊特征
        a = self.split_attention(x_all)  # 應(yīng)用分割注意力
        x = self.mlp2(a)  # 通過另一個(gè)MLP層縮減特征維度
        x = x.permute(0, 3, 1, 2)  # 調(diào)整維度順序回原始
        return x

# 示例代碼
if __name__ == '__main__':
    input = torch.randn(50, 512, 7, 7)  # 創(chuàng)建輸入張量
    s2att = S2Attention(channels=512)  # 實(shí)例化S2注意力模塊
    output = s2att(input)  # 通過S2注意力模塊處理輸入
    print(output.shape)  # 打印輸出張量的形狀

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末图甜,一起剝皮案震驚了整個(gè)濱河市香伴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌具则,老刑警劉巖即纲,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異博肋,居然都是意外死亡低斋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門匪凡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膊畴,“玉大人,你說我怎么就攤上這事病游〈娇纾” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵衬衬,是天一觀的道長(zhǎng)买猖。 經(jīng)常有香客問我,道長(zhǎng)滋尉,這世上最難降的妖魔是什么玉控? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮狮惜,結(jié)果婚禮上高诺,老公的妹妹穿的比我還像新娘。我一直安慰自己碾篡,他們只是感情好虱而,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著开泽,像睡著了一般牡拇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上眼姐,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天诅迷,我揣著相機(jī)與錄音,去河邊找鬼众旗。 笑死罢杉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贡歧。 我是一名探鬼主播滩租,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼赋秀,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了律想?” 一聲冷哼從身側(cè)響起猎莲,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎技即,沒想到半個(gè)月后著洼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡而叼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年身笤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片葵陵。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡液荸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脱篙,到底是詐尸還是另有隱情娇钱,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布绊困,位于F島的核電站文搂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏考抄。R本人自食惡果不足惜细疚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望川梅。 院中可真熱鬧,春花似錦然遏、人聲如沸贫途。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)丢早。三九已至,卻和暖如春秧倾,著一層夾襖步出監(jiān)牢的瞬間怨酝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工那先, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留农猬,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓售淡,卻偏偏與公主長(zhǎng)得像斤葱,于是被迫代替她去往敵國(guó)和親慷垮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容