機(jī)票網(wǎng)站開發(fā)百度網(wǎng)址大全官方網(wǎng)站
深度學(xué)習(xí)中的注意力機(jī)制(Attention Mechanism)是一種模仿人類視覺和認(rèn)知系統(tǒng)的方法,它允許神經(jīng)網(wǎng)絡(luò)在處理輸入數(shù)據(jù)時集中注意力于相關(guān)的部分。通過引入注意力機(jī)制,神經(jīng)網(wǎng)絡(luò)能夠自動地學(xué)習(xí)并選擇性地關(guān)注輸入中的重要信息,提高模型的性能和泛化能力。
卷積神經(jīng)網(wǎng)絡(luò)引入的注意力機(jī)制主要有以下幾種方法:
- 在空間維度上增加注意力機(jī)制
- 在通道維度上增加注意力機(jī)制
- 在兩者的混合維度上增加注意力機(jī)制
我們將在本系列對多種注意力機(jī)制進(jìn)行講解,并使用pytorch進(jìn)行實現(xiàn),今天我們講解SENet注意力機(jī)制
SENet(Squeeze-and-Excitation Networks)注意力機(jī)制在通道維度上引入注意力機(jī)制,其核心思想在于通過網(wǎng)絡(luò)根據(jù)loss去學(xué)習(xí)特征權(quán)重,使得有效的feature map權(quán)重大,無效或效果小的feature map權(quán)重小的方式訓(xùn)練模型達(dá)到更好的結(jié)果。SE block嵌在原有的一些分類網(wǎng)絡(luò)中不可避免地增加了一些參數(shù)和計算量,但是在效果面前還是可以接受的 。Sequeeze-and-Excitation(SE) block并不是一個完整的網(wǎng)絡(luò)結(jié)構(gòu),而是一個子結(jié)構(gòu),可以嵌到其他分類或檢測模型中。
以上是SENet的結(jié)構(gòu)示意圖, 其關(guān)鍵操作為squeeze和excitation. 通過自動學(xué)習(xí)獲得特征圖在每個通道上的重要程度,以此為不同通道賦予不同的權(quán)重,提升有用通道的貢獻(xiàn)程度.
實現(xiàn)機(jī)制:
- Squeeze: 通過全劇平均池化層,將每個通道大的二維特征(h*w)壓縮為一個實數(shù),維度變化: (C, H, W) -> (C, 1, 1)
- Excitation: 給予每個通道的一個特征權(quán)重, 然后經(jīng)過兩次全連接層的信息整合提取,構(gòu)建通道間的自相關(guān)性,輸出權(quán)重數(shù)目和特征圖通道數(shù)一致, 維度變化: (C, 1, 1) -> (C, 1, 1)
- Scale: 將歸一化后的權(quán)重加權(quán)道每個通道的特征上, 論文中使用的是相乘加權(quán), 維度變化: (C, H, W) * (C, 1, 1) -> (C, H, W)
pytorch實現(xiàn):
class SENet(nn.Module):def __init__(self, in_channels, ratio=16):super(SENet, self).__init__()self.in_channels = in_channelsself.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)