SE注意力机制
SENet-通道注意力筆記
- 簡介
- 意義
- 目的:
- 主要操作
- 算法流程圖
- 過程
- 第一步、
- 第二步、
- 第三步、
- 第四步、
- SE模塊的結(jié)構(gòu)圖
- 實(shí)現(xiàn)代碼
- 最后
簡介
SENet是2017年ImageNet比賽的冠軍,2018年CVPR引用量第一。論文鏈接:SENet
意義
較早的將attention引入到CNN中,模塊化化設(shè)計(jì)。
目的:
SE模塊的目的是想通過一個權(quán)重矩陣,從通道域的角度賦予圖像不同位置不同的權(quán)重,得到更重要的特征信息。
主要操作
SE模塊的主要操作:擠壓(Squeeze)、激勵(Excitation)
算法流程圖
通過一系列操作得到一個1?1?C1*1*C1?1?C的權(quán)重矩陣,對原特征進(jìn)行重構(gòu)(不同顏色表示不同的數(shù)值,用來衡量通道的重要性)
過程
第一步、
Transformation (Ftr)(F{_t}{_r})(Ft?r?):給定一個input特征圖XXX,讓其經(jīng)過FtrF{_t}{_r}Ft?r?操作生成特征圖UUU。
注意:在常用的卷積神經(jīng)網(wǎng)絡(luò)中Transformation操作一般為一個卷積操作。我們通常在聊SE注意力時通常不包含這一步。
第二步、
Squeeze(Fsq(?))(F{_s}{_q}(·))(Fs?q?(?))::這一步將特征圖進(jìn)行全局平均池化,生成一個1?1?C1*1*C1?1?C的向量,這樣每個通道讓一個數(shù)值表示。
注釋:對UUU實(shí)現(xiàn)全局低維嵌入,相當(dāng)于一個數(shù)值擁有該通道的全局感受野。
公式:
此外:論文中給出了使用平均池化與最大池化的實(shí)驗(yàn)對比。
第三步、
Excitation(Fex)(F{_e}{_x})(Fe?x?):這一步通過兩層全連接層完成,通過權(quán)重W生成我們我所要的權(quán)重信息,其中W是通過學(xué)習(xí)得到的,用來顯示的建模我們我需要的特征相關(guān)性。
通過兩個全連接層W1W{_1}W1? ,W2W{_2}W2?對上一步得到的向量zzz進(jìn)行處理,得到我們想要的通道權(quán)重值sss,經(jīng)過兩層全連接層后,s中不同的數(shù)值表示不同通道的權(quán)重信息,賦予通道不同的權(quán)重。
注意:兩層全連接層之間存在一個超參數(shù)RRR, 向量zzz (1?1?C)(1*1*C)(1?1?C)經(jīng)過第一層全連接層后維度由
(1?1?C)(1*1*C)(1?1?C)變?yōu)?span id="ze8trgl8bvbq" class="katex--inline">(1?1?C/R)(1*1*C/R)(1?1?C/R),再經(jīng)過第二層全連接層為度由(1?1?C/R)(1*1*C/R)(1?1?C/R)變?yōu)?span id="ze8trgl8bvbq" class="katex--inline">(1?1?C)(1*1*C)(1?1?C)。第一層全連接層的激活函數(shù)為ReLU,第二層全連接層的激活函數(shù)為Sigmoid。
第四步、
Scale(Fscale)(F{_{scale}})(Fscale?):由算法流程圖可以看出,第四步的操作是將第三步生成權(quán)重向量sss對特征圖UUU進(jìn)行權(quán)重賦值,得到我們想要的特征圖X~\tilde XX~,其尺寸大小與特征圖UUU完全一樣,SE模塊不改變特征圖的小大。
通過生成的特征向量sss(1?1?C1*1*C1?1?C)與特征圖UUU(H?W?CH*W*CH?W?C),對應(yīng)通道相乘,即特征圖UUU中每個通道的H?WH*WH?W個數(shù)值都乘sss中對應(yīng)通道的權(quán)值。
SE模塊的結(jié)構(gòu)圖
SE模塊是一個即插即用的模塊,在上圖中左邊是在一個卷積模塊之后直接插入SE模塊,右邊是在ResNet結(jié)構(gòu)中添加了SE模塊。
實(shí)現(xiàn)代碼
import torch.nn as nnclass SEModel(nn.Module):def __init__(self, channel, reduction=16):super(SEModel, self).__init__()self.avg_pool = nn.AdaptiveAvgPool2d(1)self.fc = nn.Sequential(nn.Linear(channel, channel // reduction, bias=False),nn.ReLU(),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)y = self.fc(y).view(b, c, 1, 1)return x * y.expand_as(x)網(wǎng)上有較多的公開代碼,都可以進(jìn)行參考。
最后
SE模塊在使用時如何選擇添加的位置是值得考慮的問題,如何實(shí)現(xiàn)最大化的提升。
MobileNetV3中使用了SE模塊,通過神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索進(jìn)行了最優(yōu)位置選擇,值得思考與學(xué)習(xí)。
如有錯誤,望大家指正。B站上有很多大佬的講解視頻,喜歡視頻講解的可以看一下。
總結(jié)
- 上一篇: vue样式中背景图片路径_vue打包cs
- 下一篇: mysql 单标递归_MySql8 WI