深度學(xué)習(xí)中的注意力機(jī)制(Attention Mechanism)是一種模仿人類(lèi)視覺(jué)和認(rèn)知系統(tǒng)的方法,它允許神經(jīng)網(wǎng)絡(luò)在處理輸入數(shù)據(jù)時(shí)集中注意力于相關(guān)的部分。通過(guò)引入注意力機(jī)制,神經(jīng)網(wǎng)絡(luò)能夠自動(dòng)地學(xué)習(xí)并選擇性地關(guān)注輸入中的重要信息,提高模型的性能和泛化能力。
卷積神經(jīng)網(wǎng)絡(luò)引入的注意力機(jī)制主要有以下幾種方法:
- 在空間維度上增加注意力機(jī)制
- 在通道維度上增加注意力機(jī)制
- 在兩者的混合維度上增加注意力機(jī)制
我們將在本系列對(duì)多種注意力機(jī)制進(jìn)行講解,并使用pytorch進(jìn)行實(shí)現(xiàn),今天我們講解SENet注意力機(jī)制
SENet(Squeeze-and-Excitation Networks)注意力機(jī)制在通道維度上引入注意力機(jī)制,其核心思想在于通過(guò)網(wǎng)絡(luò)根據(jù)loss去學(xué)習(xí)特征權(quán)重,使得有效的feature map權(quán)重大,無(wú)效或效果小的feature map權(quán)重小的方式訓(xùn)練模型達(dá)到更好的結(jié)果。SE block嵌在原有的一些分類(lèi)網(wǎng)絡(luò)中不可避免地增加了一些參數(shù)和計(jì)算量,但是在效果面前還是可以接受的 。Sequeeze-and-Excitation(SE) block并不是一個(gè)完整的網(wǎng)絡(luò)結(jié)構(gòu),而是一個(gè)子結(jié)構(gòu),可以嵌到其他分類(lèi)或檢測(cè)模型中。
以上是SENet的結(jié)構(gòu)示意圖, 其關(guān)鍵操作為squeeze和excitation. 通過(guò)自動(dòng)學(xué)習(xí)獲得特征圖在每個(gè)通道上的重要程度,以此為不同通道賦予不同的權(quán)重,提升有用通道的貢獻(xiàn)程度.
實(shí)現(xiàn)機(jī)制:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-634674.html
- Squeeze: 通過(guò)全劇平均池化層,將每個(gè)通道大的二維特征(h*w)壓縮為一個(gè)實(shí)數(shù),維度變化: (C, H, W) -> (C, 1, 1)
- Excitation: 給予每個(gè)通道的一個(gè)特征權(quán)重, 然后經(jīng)過(guò)兩次全連接層的信息整合提取,構(gòu)建通道間的自相關(guān)性,輸出權(quán)重?cái)?shù)目和特征圖通道數(shù)一致, 維度變化: (C, 1, 1) -> (C, 1, 1)
- Scale: 將歸一化后的權(quán)重加權(quán)道每個(gè)通道的特征上, 論文中使用的是相乘加權(quán), 維度變化: (C, H, W) * (C, 1, 1) -> (C, H, W)
pytorch實(shí)現(xiàn):文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-634674.html
class SENet(nn.Module):
def __init__(self, in_channels, ratio=16):
super(SENet, self).__init__()
self.in_channels = in_channels
self.fgp = nn.AdaptiveAvgPool2d((1, 1))
self.fc1 = nn.Linear(self.in_channels, int(self.in_channels / ratio), bias=False)
self.act1 = nn.ReLU()
self.fc2 = nn.Linear(int(self.in_channels / ratio), self.in_channels, bias=False)
self.act2 = nn.Sigmoid()
def forward(self, x):
b, c, h, w = x.size()
output = self.fgp(x)
output = output.view(b, c)
output = self.fc1(output)
output = self.act1(output)
output = self.fc2(output)
output = self.act2(output)
output = output.view(b, c, 1, 1)
return torch.multiply(x, output)
到了這里,關(guān)于【深度學(xué)習(xí)注意力機(jī)制系列】—— SENet注意力機(jī)制(附pytorch實(shí)現(xiàn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!