溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

local注意力怎么生成

發(fā)布時間:2022-03-18 16:54:32 來源:億速云 閱讀:155 作者:iii 欄目:云計算

這篇文章主要介紹了local注意力怎么生成的相關(guān)知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇local注意力怎么生成文章都會有所收獲,下面我們一起來看看吧。

soft attention(包括空間注意力、通道注意力)軟注意學(xué)習(xí)的目的是選擇細粒度的重要像素點,它們是pixel級。

hard attention( local 注意力) 硬注意學(xué)習(xí)則致力于搜索粗糙的潛在判別區(qū)域,它們是region級。
他們在功能上有很大的互補性。他們的結(jié)合使用可以提高模型的性能

下面講解空間注意力、通道注意力、local 注意力的生成

通道注意力:
就是對于每個channel賦予不同的權(quán)重,比如1,2處馬的形狀比較明顯,所以理所當然,對1,2通道的權(quán)重比較大,3,4處權(quán)重小。

空間注意力:
空間注意力是對64個通道進行mean的一個操作,得到一個(w x h)的權(quán)重,mean的操作就學(xué)到了所有通道的整體分布,而拋棄了奇異的通道。比如說1,2的圖可以很好的描繪出馬的形狀,而3,4就不行(但本質(zhì)上它也是要顯示出馬的形狀),但是通過mean后,得到的w x h權(quán)值共享后,給了3,4一定的權(quán)值描述,相當于給3,4一定的注意力,這樣它們也可以描繪出馬的形狀。

代碼

class SpatialAttn(nn.Module):  # 輸入x.shape=(32,3,256,128),對第三維度通道求mean=(32,1,256,128),一個卷積照片縮小一半,upsample恢復(fù),再經(jīng)過1x1 convdef __init__(self):super(SpatialAttn, self).__init__()self.conv1 = ConvBlock(1, 1, 3, s=2, p=1)self.conv2 = ConvBlock(1, 1, 1)def forward(self, x):# global cross-channel averagingx = x.mean(1, keepdim=True)  # x.shape=(32,3,256,128)  x.mean.shape按照通道求均值=(32,1,256,128)# 3-by-3 convx = self.conv1(x)  # x.shape=(32,1,128,64)# bilinear resizingx = F.upsample(x, (x.size(2) * 2, x.size(3) * 2), mode='bilinear', align_corners=True)  # x.shape=(32,1,256,128)# scaling convx = self.conv2(x)  # x.shape=(32,1,256,128)return xclass ChannelAttn(nn.Module):def __init__(self, in_channels, reduction_rate=16):super(ChannelAttn, self).__init__()assert in_channels % reduction_rate == 0self.conv1 = ConvBlock(in_channels, in_channels // reduction_rate, 1)self.conv2 = ConvBlock(in_channels // reduction_rate, in_channels, 1)def forward(self, x):# squeeze operation (global average pooling)# x.shape=(32, 16, 256, 128)x = F.avg_pool2d(x, x.size()[2:])#torch.size([32,16,1,1])# excitation operation (2 conv layers)x = self.conv1(x)#torch.size([32,1,1,1])x = self.conv2(x)#torch.size([32,16,1,1])return xclass SoftAttn(nn.Module):#軟注意力(32,16,256,128)=空間注意力的輸出(32,1,256,128)乘上通道注意力(32,16,1,1)def __init__(self, in_channels):super(SoftAttn, self).__init__()self.spatial_attn = SpatialAttn()self.channel_attn = ChannelAttn(in_channels)self.conv = ConvBlock(in_channels, in_channels, 1)def forward(self, x):#x.shape(32,16,256,128)y_spatial = self.spatial_attn(x)#32,1,256,128y_channel = self.channel_attn(x)#32,16,1,1y = y_spatial * y_channel#32,16,256,128y = F.sigmoid(self.conv(y))return y#torch.Size([32, 16, 256, 128])

關(guān)于“l(fā)ocal注意力怎么生成”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“l(fā)ocal注意力怎么生成”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI