一文看盡深度學(xué)習(xí)中的各種注意力機(jī)制

極市導(dǎo)讀
注意力機(jī)制可以幫助人類(lèi)在有限的資源下,從大量無(wú)關(guān)背景區(qū)域中篩選出具有重要價(jià)值信息的目標(biāo)區(qū)域,幫助人類(lèi)更加高效的處理視覺(jué)信息。本文總結(jié)了深度學(xué)習(xí)當(dāng)中的39個(gè)注意力機(jī)制。 >>加入極市CV技術(shù)交流群,走在計(jì)算機(jī)視覺(jué)的最前沿
導(dǎo)讀
視覺(jué)注意力機(jī)制是人類(lèi)視覺(jué)所特有的一種大腦信號(hào)處理機(jī)制,而深度學(xué)習(xí)中的注意力機(jī)制正是借鑒了人類(lèi)視覺(jué)的注意力思維方式。一般來(lái)說(shuō),人類(lèi)在觀察外界環(huán)境時(shí)會(huì)迅速的掃描全景,然后根據(jù)大腦信號(hào)的處理快速的鎖定重點(diǎn)關(guān)注的目標(biāo)區(qū)域,最終形成注意力焦點(diǎn)[1]。該機(jī)制可以幫助人類(lèi)在有限的資源下,從大量無(wú)關(guān)背景區(qū)域中篩選出具有重要價(jià)值信息的目標(biāo)區(qū)域,幫助人類(lèi)更加高效的處理視覺(jué)信息。

起源
注意力機(jī)制在計(jì)算機(jī)視覺(jué)領(lǐng)域的應(yīng)用主要使用于捕捉圖像上的respective field,而在自然語(yǔ)言處理領(lǐng)域中的應(yīng)用主要使用于定位關(guān)鍵的token。下面簡(jiǎn)單介紹下注意力機(jī)制在早期的幾個(gè)經(jīng)典應(yīng)用。

《A Model of Saliency-Based Visual Attention for Rapid Scene Analysis》[2]

這是早期將注意力機(jī)制應(yīng)用于計(jì)算機(jī)視覺(jué)領(lǐng)域的一篇代表作,文章于1998年發(fā)表于TAPMI。作者受早期靈長(zhǎng)目視覺(jué)系統(tǒng)的神經(jīng)元結(jié)構(gòu)啟發(fā),提出了一種視覺(jué)注意力系統(tǒng),可以將多尺度的圖像特征組合成單一的顯著性圖。最后,利用一個(gè)動(dòng)態(tài)神經(jīng)網(wǎng)絡(luò),并按照顯著性的順序來(lái)高效的選擇重點(diǎn)區(qū)域。
《Recurrent Models of Visual Attention》[3]

使注意力機(jī)制真正火起來(lái)的當(dāng)屬于谷歌DeepMind于2014年所提出的這篇文章,該論文首次在RNN模型上應(yīng)用了注意力機(jī)制的方法進(jìn)行圖像分類(lèi)。
《Neural Machine Translation by Jointly Learning to Align and Translate》[4]

這是由深度學(xué)習(xí)三巨頭之一Yoshua Bengio等人于2015年發(fā)表于ICLR上的一篇論文,該論文的最大貢獻(xiàn)是將注意力機(jī)制首次應(yīng)用到NLP領(lǐng)域,實(shí)現(xiàn)了同步的對(duì)齊和翻譯,解決以往神經(jīng)機(jī)器翻譯(NMT)領(lǐng)域使用Encoder-Decoder架構(gòu)的一個(gè)潛在問(wèn)題,即將信息都?jí)嚎s在固定長(zhǎng)度的向量,無(wú)法對(duì)應(yīng)長(zhǎng)句子。
《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》[5]

這篇文章由Yoshua Bengio等人于2015年在ICML上所發(fā)表的,該論文將注意力機(jī)制引入到圖像領(lǐng)域,作者提出了兩種基于注意力機(jī)制的圖像描述生成模型: 使用基本反向傳播訓(xùn)練的Soft Attetnion方法和使用強(qiáng)化學(xué)習(xí)訓(xùn)練的Hard Attention方法。
《Look Closer to See Better: Recurrent Attention Convolutional Neural Network for Fine-grained Image Recognition》[6]

這是發(fā)表于CVPR 2017年的一篇文章,作者提出了一種基于CNN的注意力機(jī)制,叫做循環(huán)注意力卷積神經(jīng)網(wǎng)絡(luò)(Recurrent Attention Convolutional Neural Network, RA-CANN),該網(wǎng)絡(luò)可以遞歸地分析局部信息,并從所獲取的局部區(qū)域中提取細(xì)粒度信息。此外,作者還引入了一個(gè)注意力生成子網(wǎng)絡(luò)(Attenion Proposal Sub-Network, APN),迭代的對(duì)整圖操作以生成對(duì)應(yīng)的子區(qū)域,最后再將各個(gè)子區(qū)域的預(yù)測(cè)記過(guò)整合起來(lái),從而后的整張圖片最終的分類(lèi)預(yù)測(cè)結(jié)果。
《Attention is All Your Need》[7]

這是由谷歌機(jī)器翻譯團(tuán)隊(duì)于2017年發(fā)表于NIPS上的一篇文章,該論文最大的貢獻(xiàn)便是拋棄了以往機(jī)器翻譯基本都會(huì)應(yīng)用的RNN或CNN等傳統(tǒng)架構(gòu),以編碼器-解碼器為基礎(chǔ),創(chuàng)新性的提出了一種Transformer架構(gòu)。該架構(gòu)可以有效的解決RNN無(wú)法并行處理以及CNN無(wú)法高效的捕捉長(zhǎng)距離依賴的問(wèn)題,近期更是被進(jìn)一步地應(yīng)用到了計(jì)算機(jī)視覺(jué)領(lǐng)域,同時(shí)在多個(gè)CV任務(wù)上取得了SOTA性能,挑戰(zhàn)CNN在CV領(lǐng)域多年的霸主地位。
發(fā)展
本文將重點(diǎn)圍繞通道、空間、自注意力、類(lèi)別等多個(gè)維度[8]介紹計(jì)算機(jī)視覺(jué)領(lǐng)域中較為出名的注意力機(jī)制方法,力爭(zhēng)用最簡(jiǎn)短的語(yǔ)言解釋得更加通俗易懂。
通道&空間注意力
通道注意力旨在顯示的建模出不同通道之間的相關(guān)性,通過(guò)網(wǎng)絡(luò)學(xué)習(xí)的方式來(lái)自動(dòng)獲取到每個(gè)特征通道的重要程度,最后再為每個(gè)通道賦予不同的權(quán)重系數(shù),從而來(lái)強(qiáng)化重要的特征抑制非重要的特征。
空間注意力旨在提升關(guān)鍵區(qū)域的特征表達(dá),本質(zhì)上是將原始圖片中的空間信息通過(guò)空間轉(zhuǎn)換模塊,變換到另一個(gè)空間中并保留關(guān)鍵信息,為每個(gè)位置生成權(quán)重掩膜(mask)并加權(quán)輸出,從而增強(qiáng)感興趣的特定目標(biāo)區(qū)域同時(shí)弱化不相關(guān)的背景區(qū)域。
SE-Net[9]
《Squeeze-and-Excitation Networks》發(fā)表于CVPR 2018,是CV領(lǐng)域?qū)⒆⒁饬C(jī)制應(yīng)用到通道維度的代表作,后續(xù)大量基于通道域的工作均是基于此進(jìn)行潤(rùn)(魔)色(改)。SE-Net是ImageNet 2017大規(guī)模圖像分類(lèi)任務(wù)的冠軍,結(jié)構(gòu)簡(jiǎn)單且效果顯著,可以通過(guò)特征重標(biāo)定的方式來(lái)自適應(yīng)地調(diào)整通道之間的特征響應(yīng)。

Squeeze 利用全局平均池化(Global Average Pooling, GAP) 操作來(lái)提取全局感受野,將所有特征通道都抽象為一個(gè)點(diǎn); Excitation 利用兩層的多層感知機(jī)(Multi-Layer Perceptron, MLP) 網(wǎng)絡(luò)來(lái)進(jìn)行非線性的特征變換,顯示地構(gòu)建特征圖之間的相關(guān)性; Transform 利用Sigmoid激活函數(shù)實(shí)現(xiàn)特征重標(biāo)定,強(qiáng)化重要特征圖,弱化非重要特征圖。
class SELayer(nn.Module):def __init__(self, channel, reduction=16):super(SELayer, self).__init__()self.avg_pool = nn.AdaptiveAvgPool2d(1)self.fc = nn.Sequential(nn.Linear(channel, channel // reduction, bias=False),nn.ReLU(inplace=True),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)
GE-Net[10]
《Gather-Excite: Exploiting Feature Context in Convolutional Neural Networks》發(fā)表于NIPS 2018,從上下文建模的角度出發(fā),提出了一種比SE-Net更一般的形式。GE-Net充分利用空間注意力來(lái)更好的挖掘特征之間的上下文信息。【代碼鏈接可訪問(wèn)github[11]】

Gather 用于從局部的空間位置上提取特征; Excite 用于將特征縮放至原始尺寸。
RA-Net[12]
《Residual attention network for image classification》發(fā)表于CVPR 2017,利用下采樣和上采樣操作提出了一種基于空間注意力機(jī)制的殘差注意力網(wǎng)絡(luò)。

以往的Attention模型大多應(yīng)用于圖像分割和顯著性檢測(cè)任務(wù),出發(fā)點(diǎn)在于將注意力集中在部分感興趣區(qū)域或顯著區(qū)域上。本文嘗試在常規(guī)的分類(lèi)網(wǎng)絡(luò)中引入側(cè)邊分支,該分支同樣是由一系列卷積和池化操作來(lái)逐漸地提取高級(jí)語(yǔ)義特征并增大網(wǎng)絡(luò)的感受野,最后再將該分支直接上采樣為原始分辨率尺寸作為特征激活圖疊加回原始輸入。

該方法提升效果好像并不明顯,而且由于引入大量額外的參數(shù),導(dǎo)致計(jì)算開(kāi)銷(xiāo)非常大。
SK-Net[13]
《Selective Kernel Networks》發(fā)表于CVPR 2019,原SE-Net的作者M(jìn)omenta也參與到這篇文章中。SK-Net主要靈感來(lái)源于Inception-Net的多分支結(jié)構(gòu)以及SE-Net的特征重標(biāo)定策略,研究的是卷積核之間的相關(guān)性,并進(jìn)一步地提出了一種選擇性卷積核模塊。SK-Net從多尺度特征表征的角度出發(fā),引入多個(gè)帶有不同感受野的并行卷積核分支來(lái)學(xué)習(xí)不同尺度下的特征圖權(quán)重,使網(wǎng)絡(luò)能夠挑選出更加合適的多尺度特征表示,不僅解決了SE-Net中單一尺度的問(wèn)題,而且也結(jié)合了多分枝結(jié)構(gòu)的思想從豐富的語(yǔ)義信息中篩選出重要的特征。

Split 采用不同感受野大小的卷積核捕獲多尺度的語(yǔ)義信息; Fuse 融合多尺度語(yǔ)義信息,增強(qiáng)特征多樣性; Select 在不同向量空間(代表不同尺度的特征信息)中進(jìn)行Softmax操作,為合適的尺度通道賦予更高的權(quán)重。
class SKConv(nn.Module):def __init__(self, features, M=2, G=32, r=16, stride=1, L=32):""" ConstructorArgs:features: input channel dimensionality.M: the number of branchs.G: num of convolution groups.r: the ratio for compute d, the length of z.stride: stride, default 1.L: the minimum dim of the vector z in paper, default 32."""super(SKConv, self).__init__()d = max(int(features/r), L)self.M = Mself.features = featuresself.convs = nn.ModuleList([])for i in range(M):self.convs.append(nn.Sequential(nn.Conv2d(features, features, kernel_size=3, stride=stride, padding=1+i, dilation=1+i, groups=G, bias=False),nn.BatchNorm2d(features),nn.ReLU(inplace=False)))self.gap = nn.AdaptiveAvgPool2d((1,1))self.fc = nn.Sequential(nn.Conv2d(features, d, kernel_size=1, stride=1, bias=False),nn.BatchNorm2d(d),nn.ReLU(inplace=False))self.fcs = nn.ModuleList([])for i in range(M):self.fcs.append(nn.Conv2d(d, features, kernel_size=1, stride=1))self.softmax = nn.Softmax(dim=1)def forward(self, x):batch_size = x.shape[0]feats = [conv(x) for conv in self.convs]feats = torch.cat(feats, dim=1)feats = feats.view(batch_size, self.M, self.features, feats.shape[2], feats.shape[3])feats_U = torch.sum(feats, dim=1)feats_S = self.gap(feats_U)feats_Z = self.fc(feats_S)attention_vectors = [fc(feats_Z) for fc in self.fcs]attention_vectors = torch.cat(attention_vectors, dim=1)attention_vectors = attention_vectors.view(batch_size, self.M, self.features, 1, 1)attention_vectors = self.softmax(attention_vectors)feats_V = torch.sum(feats*attention_vectors, dim=1)return feats_V
SPA-Net[14]
《Spatial Pyramid Attention Network for Enhanced Image Recognition》 發(fā)表于ICME 2020 并獲得了最佳學(xué)生論文??紤]到 SE-Net 這種利用 GAP 去建模全局上下文的方式會(huì)導(dǎo)致空間信息的損失,SPA-Net另辟蹊徑,利用多個(gè)自適應(yīng)平均池化(Adaptive Averatge Pooling, APP) 組成的空間金字塔結(jié)構(gòu)來(lái)建模局部和全局的上下文語(yǔ)義信息,使得空間語(yǔ)義信息被更加充分的利用到。

class CPSPPSELayer(nn.Module):def __init__(self,in_channel, channel, reduction=16):super(CPSPPSELayer, self).__init__()if in_channel != channel:self.conv1 = nn.Sequential(nn.Conv2d(in_channel, channel, kernel_size=1, stride=1, bias=False),nn.BatchNorm2d(channel),nn.ReLU(inplace=True))self.avg_pool1 = nn.AdaptiveAvgPool2d(1)self.avg_pool2 = nn.AdaptiveAvgPool2d(2)self.avg_pool4 = nn.AdaptiveAvgPool2d(4)self.fc = nn.Sequential(nn.Linear(channel*21, channel*21 // reduction, bias=False),nn.ReLU(inplace=True),nn.Linear(channel*21 // reduction, channel, bias=False),nn.Sigmoid())def forward(self, x):x = self.conv1(x) if hasattr(self, 'conv1') else xb, c, _, _ = x.size()y1 = self.avg_pool1(x).view(b, c) # like resize() in numpyy2 = self.avg_pool2(x).view(b, 4 * c)y3 = self.avg_pool4(x).view(b, 16 * c)y = torch.cat((y1, y2, y3), 1)y = self.fc(y)b, out_channel = y.size()y = y.view(b, out_channel, 1, 1)return y
ECA-Net[15]
《ECANet:Efficient Channel Attention for Deep Convolutional Neural Networks》發(fā)表于CVPR 2020,是對(duì)SE-Net中特征變換部分進(jìn)行了改進(jìn)。SE-Net的通道信息交互方式是通過(guò)全連接實(shí)現(xiàn)的,在降維和升維的過(guò)程中會(huì)損害一部分的特征表達(dá)。ECA-Net則進(jìn)一步地利用一維卷積來(lái)實(shí)現(xiàn)通道間的信息交互,相對(duì)于全連接實(shí)現(xiàn)的全局通道信息交互所帶來(lái)的計(jì)算開(kāi)銷(xiāo),ECA-Net提出了一種基于自適應(yīng)選擇卷積核大小的方法,以實(shí)現(xiàn)局部交互,從而顯著地降低模型復(fù)雜度且保持性能。

class ECALayer(nn.Module):"""Constructs a ECA module.Args:channel: Number of channels of the input feature mapk_size: Adaptive selection of kernel size"""def __init__(self, channel, k_size=3):super(ECALayer, self).__init__()self.avg_pool = nn.AdaptiveAvgPool2d(1)self.conv = nn.Conv1d(1, 1, kernel_size=k_size, padding=(k_size - 1) // 2, bias=False)self.sigmoid = nn.Sigmoid()def forward(self, x):# feature descriptor on the global spatial informationy = self.avg_pool(x)# Two different branches of ECA moduley = self.conv(y.squeeze(-1).transpose(-1, -2)).transpose(-1, -2).unsqueeze(-1)# Multi-scale information fusiony = self.sigmoid(y)return x * y.expand_as(x)
混合注意力
空間注意力由于將每個(gè)通道中的特征都做同等處理,忽略了通道間的信息交互;
通道注意力則是將一個(gè)通道內(nèi)的信息直接進(jìn)行全局處理,容易忽略空間內(nèi)的信息交互;
混合注意力主要是共同結(jié)合了通道域、空間域等注意力的形式來(lái)形成一種更加綜合的特征注意力方法。
CBAM[16]
《CBAM: Convolutional Block Attention Module》發(fā)表于CVPR 2018,在原有通道注意力的基礎(chǔ)上,銜接了一個(gè)空間注意力模塊(Spatial Attention Modul, SAM)。SAM是基于通道進(jìn)行全局平均池化以及全局最大池化操作,產(chǎn)生兩個(gè)代表不同信息的特征圖,合并后再通過(guò)一個(gè)感受野較大的7×7卷積進(jìn)行特征融合,最后再通過(guò)Sigmoid操作來(lái)生成權(quán)重圖疊加回原始的輸入特征圖,從而使得目標(biāo)區(qū)域得以增強(qiáng)??偟膩?lái)說(shuō),對(duì)于空間注意力來(lái)說(shuō),由于將每個(gè)通道中的特征都做同等處理,忽略了通道間的信息交互;而通道注意力則是將一個(gè)通道內(nèi)的信息直接進(jìn)行全局處理,容易忽略空間內(nèi)的信息交互。

作者最終通過(guò)實(shí)驗(yàn)驗(yàn)證先通道后空間的方式比先空間后通道或者通道空間并行的方式效果更佳。
# https://github.com/Jongchan/attention-module/blob/master/MODELS/cbam.pyclass CBAM(nn.Module):def __init__(self, gate_channels, reduction_ratio=16, pool_types=['avg', 'max'], no_spatial=False):super(CBAM, self).__init__()self.ChannelGate = ChannelGate(gate_channels, reduction_ratio, pool_types)self.no_spatial=no_spatialif not no_spatial:self.SpatialGate = SpatialGate()def forward(self, x):x_out = self.ChannelGate(x)if not self.no_spatial:x_out = self.SpatialGate(x_out)return x_out
BAM[17]
《BAM: Bottleneck Attention Module》發(fā)表于BMC 2018,提出了一個(gè)簡(jiǎn)單有效的注意力模型來(lái)獲取空間和通道的注意力圖。

BAM形成了一種分層的注意力機(jī)制,可以有效地抑制背景特征,使模型更加聚焦于前景特征,從而加強(qiáng)高級(jí)語(yǔ)義,實(shí)現(xiàn)更高的性能。

不同于CBAM并聯(lián)的方式,BAM以串聯(lián)的方式來(lái)相繼提取不同域的注意力圖。
scSE[18]
《Concurrent Spatial and Channel Squeeze & Excitation in Fully Convolutional Networks》發(fā)表于MICCAI 2018,是一種更輕量化的SE-Net變體,在SE的基礎(chǔ)上提出cSE、sSE、scSE這三個(gè)變種。cSE和sSE分別是根據(jù)通道和空間的重要性來(lái)校準(zhǔn)采樣。scSE則是同時(shí)進(jìn)行兩種不同采樣校準(zhǔn),得到一個(gè)更優(yōu)異的結(jié)果。

class SCSEModule(nn.Module):def __init__(self, ch, re=16):super().__init__()self.cSE = nn.Sequential(nn.AdaptiveAvgPool2d(1),nn.Conv2d(ch,ch//re,1),nn.ReLU(inplace=True),nn.Conv2d(ch//re,ch,1),nn.Sigmoid())self.sSE = nn.Sequential(nn.Conv2d(ch,ch,1),nn.Sigmoid())def forward(self, x):return x * self.cSE(x) + x * self.sSE(x)
A2-Nets[19]
《A2-Nets: Double Attention Networks》發(fā)表于NIPS 2018,提出了一種雙重注意力網(wǎng)絡(luò)。該網(wǎng)絡(luò)首先使用二階的注意力池化(Second-order Attention Pooling, SAP) 用于將整幅圖的所有關(guān)鍵特征歸納到一個(gè)集合當(dāng)中,然后再利用另一種注意力機(jī)制將這些特征分別應(yīng)用到圖像中的每個(gè)區(qū)域。

class DoubleAtten(nn.Module):"""A2-Nets: Double Attention Networks. NIPS 2018"""def __init__(self,in_c):super(DoubleAtten,self).__init__()self.in_c = in_c"""Convolve the same input feature map to produce three feature maps with the same scale, i.e., A, B, V (as shown in paper)."""self.convA = nn.Conv2d(in_c,in_c,kernel_size=1)self.convB = nn.Conv2d(in_c,in_c,kernel_size=1)self.convV = nn.Conv2d(in_c,in_c,kernel_size=1)def forward(self,input):feature_maps = self.convA(input)atten_map = self.convB(input)b, _, h, w = feature_maps.shapefeature_maps = feature_maps.view(b, 1, self.in_c, h*w) # reshape Aatten_map = atten_map.view(b, self.in_c, 1, h*w) # reshape B to generate attention mapglobal_descriptors = torch.mean((feature_maps * F.softmax(atten_map, dim=-1)),dim=-1) # Multiply the feature map and the attention weight map to generate a global feature descriptorv = self.convV(input)atten_vectors = F.softmax(v.view(b, self.in_c, h*w), dim=-1) # 生成 attention_vectorsout = torch.bmm(atten_vectors.permute(0,2,1), global_descriptors).permute(0,2,1)return out.view(b, _, h, w)
自注意力
自注意力是注意力機(jī)制的一種變體,其目的是為了減少對(duì)外部信息的依賴,盡可能地利用特征內(nèi)部固有的信息進(jìn)行注意力的交互。
Non-Local[20]
《Non-local Neural Networks》發(fā)表于CVPR 2018,是第一篇將自注意力機(jī)制引入圖像領(lǐng)域的文章。文中提出了經(jīng)典的Non-Local模塊,通過(guò)Self-Attention機(jī)制對(duì)全局上下午進(jìn)行建模,有效地捕獲長(zhǎng)距離的特征依賴。后續(xù)許多基于自注意力的方法都是根據(jù)Non-Local來(lái)改進(jìn)的?!敬a鏈接可訪問(wèn)github[21]】

自注意力流程一般是通過(guò)將原始特征圖映射為三個(gè)向量分支,即Query、Key和Value。
首先,計(jì)算Q和K的相關(guān)性權(quán)重矩陣系數(shù); 其次,通過(guò)軟操作對(duì)權(quán)重矩陣進(jìn)行歸一化; 最后,再將權(quán)重系數(shù)疊加到V上,以實(shí)現(xiàn)全局上下文信息的建模。
DA-Net[22]
《DA-Net:Dual Attention Network for Scene Segmentation》發(fā)表于CVPR 2019,該論文將Non-local的思想同時(shí)引入到了通道域和空間域,分別將空間像素點(diǎn)以及通道特征作為查詢語(yǔ)句進(jìn)行上下文建模,自適應(yīng)地整合局部特征和全局依賴。【代碼鏈接可訪問(wèn)github[23]】

Position Attention Module

PAM將更廣泛的上下文信息編碼為局部特征,從而提高了它們的代表性。
Channel Attention Module

CAM通過(guò)挖掘通道圖之間的相互依賴關(guān)系,可以強(qiáng)調(diào)相互依賴的特征圖,改進(jìn)特定語(yǔ)義的特征表示。
ANLNet[24]
《ANLNet:Asymmetric Non-local Neural Networks for Semantic Segmentation》發(fā)表于ICCV 2019,是基于Non-Local的思路往輕量化方向做改進(jìn)。Non-Local模塊是一種效果顯著的技術(shù),但同時(shí)也受限于過(guò)大計(jì)算量而難以很好地嵌入網(wǎng)絡(luò)中應(yīng)用。為了解決以上問(wèn)題,ANLNet基于Non-Local結(jié)構(gòu)并融入了金字塔采樣模塊,在充分考慮了長(zhǎng)距離依賴的前提下,融入了不同層次的特征,從而在保持性能的同時(shí)極大地減少計(jì)算量?!敬a鏈接可訪問(wèn)github[25]】

結(jié)合SPP和Non-Local,前者從不同大小區(qū)域內(nèi)提取出關(guān)鍵點(diǎn),后者對(duì)這些關(guān)鍵點(diǎn)建模長(zhǎng)距離依賴; Non-Local 需要計(jì)算每一個(gè)像素點(diǎn),可以看作是點(diǎn)對(duì)點(diǎn)建模;ANL-Net只計(jì)算通過(guò)SPP提取出的關(guān)鍵點(diǎn),可以看作是點(diǎn)對(duì)區(qū)域建模; AFNB包含兩個(gè)輸入,一個(gè)高級(jí)特征圖,一個(gè)低級(jí)特征圖,分別對(duì)應(yīng)圖中的Stage5和Stage4。其中高級(jí)特征圖作為Query,低級(jí)特征圖作為Key和Value; APNB的建模方式與AFNB類(lèi)似。
CC-Net[26]
《CCNet:Criss-Cross Attention for Semantic Segmentation》發(fā)表于ICCV 2019,同樣是同Non-Local輕量化的另一種嘗試。【代碼鏈接可訪問(wèn)github[27]】

與Non-Local的每個(gè)查詢點(diǎn)需要與其它所有點(diǎn)計(jì)算相關(guān)性的建模方式不同,CC-Net僅計(jì)算該查詢點(diǎn)與其在水平和垂直方向上的點(diǎn)相關(guān)性,并且重復(fù)計(jì)算兩次就可以獲取該點(diǎn)的全局依賴,極大減少計(jì)算量。

CC-Net基于Non-Local的思路并利用橫縱交叉方式完成對(duì)全局上下文建模。時(shí)間復(fù)雜度從變?yōu)?span role="presentation" data-formula="O(HW*(H+W-1))" data-formula-type="inline-equation" style="">,降低了1~2個(gè)數(shù)量級(jí); 和ANL-Net一樣,CC-Net也是點(diǎn)對(duì)區(qū)域建模一次建模只能獲取當(dāng)前查詢點(diǎn)上同一行和一列的信息,二次建模就可以捕捉全局信息; Loop1:右上方像素點(diǎn)(藍(lán)色)只能捕捉水平(左上)和垂直(右下)方向的像素點(diǎn)信息,但無(wú)法捕捉左下角像素點(diǎn)(綠色)信息; Loop2:右上方像素點(diǎn)(藍(lán)色)再次捕捉左上和右下的像素點(diǎn)信息時(shí),由于在Loop1左上和右下像素點(diǎn)已經(jīng)捕捉了左下的像素點(diǎn)信息,此時(shí)右上像素點(diǎn)就可以間接捕捉到左下像素點(diǎn)信息。
GC-Net[28]
《GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond》發(fā)表于ICCV 2019,受SE-Net和Non-local思想的啟發(fā)提出了一種更簡(jiǎn)化的空間自注意力模塊。Non-local采用Self-attention機(jī)制來(lái)建模全局的像素對(duì)關(guān)系,建模長(zhǎng)距離依賴,但這種基于全局像素點(diǎn)(pixel-to-pixel) 對(duì)的建模方式其計(jì)算量無(wú)疑是巨大的。SE-Net則利用GAP和MLP完成通道之間的特征重標(biāo)定,雖然輕量,但未能充分利用到全局上下文信息。因此,作者提出了GC-Net可以高效的建模全局的上下文信息。【代碼鏈接可訪問(wèn)github[29]】

類(lèi)別注意力
OCR-Net[30]
《Object-Contextual Representations for SemanticSegmentation》發(fā)表于ECCV 2020,是一種基于自注意力對(duì)類(lèi)別信息進(jìn)行建模的方法。與先前的自注意力對(duì)全局上下文建模的角度(通道和空間)不同,OCR-Net是從類(lèi)別的角度進(jìn)行建模,其利用粗分割的結(jié)果作為建模的對(duì)象,最后加權(quán)到每一個(gè)查詢點(diǎn),這是一種輕量并有效的方法。【代碼鏈接可訪問(wèn)github[31]】

Soft Object Regions 對(duì)Backbone倒數(shù)第二層所輸出的粗分割結(jié)果進(jìn)行監(jiān)督; Object Region Representations 融合粗分割和Backbone網(wǎng)絡(luò)最后一層所輸出的高級(jí)語(yǔ)義特征圖生成對(duì)象區(qū)域語(yǔ)義,每一條向量代表不同的類(lèi)別信息; Pixel-Region Relations 結(jié)合最后一層的高級(jí)語(yǔ)義特征圖以及對(duì)象區(qū)域語(yǔ)義信息,建模像素與對(duì)象區(qū)域之間的相關(guān)性; Object Contextual Representations 將像素-對(duì)象區(qū)域相關(guān)性加權(quán)到對(duì)象區(qū)域信息中,完成加權(quán)目標(biāo)類(lèi)別信息到每一個(gè)像素上; 不難發(fā)現(xiàn),這種類(lèi)別信息的建模方式是完全遵循自注意力機(jī)制(Q,K,V)的。
時(shí)間注意力
IAU-Net[32]
《IAUnet: Global Context-Aware Feature Learning for Person Re-Identification》發(fā)表于 IEEE Trans. on Neural Networks and Learning Systems,將自注意力機(jī)制的方法擴(kuò)展到時(shí)間維度并應(yīng)用于行人充識(shí)別任務(wù),有效的解決了大多數(shù)基于卷積神經(jīng)網(wǎng)絡(luò)的方法無(wú)法充分對(duì)空間-時(shí)間上下文進(jìn)行建模的弊端。【代碼鏈接可訪問(wèn)github[33]】

交互聚合模塊(Interaction-Aggregation-Update, IAU)同時(shí)包含全局空間,時(shí)間和頻道上下文信息,可用于高性能的reID; 空間-時(shí)間IAU(Spatial-Temporal IAU, STIAU)可有效地融合兩種類(lèi)型的上下文依賴; 通道IAU(Channel IAU, CIAU)模塊旨在模擬信道特征之間的語(yǔ)義上下文交互,以增強(qiáng)特征表示,尤其是對(duì)于小型視覺(jué)線索和身體部位。
頻率注意力
Fca-Net[34]
《FcaNet: Frequency Channel Attention Networks》截止至目前還未被接收,作者從頻域角度切入,證明了GAP是DCT的特例,彌補(bǔ)了現(xiàn)有通道注意力方法中特征信息不足的缺點(diǎn),將GAP推廣到一種更為一般的表示形式,即二維的離散余弦變換(Discrete Cosine Transform, DCT),并提出了多光譜通道注意力Fca-Net, 通過(guò)引入更多的頻率分量來(lái)充分的利用信息?!敬a鏈接可訪問(wèn)github[35]】

通過(guò)探討使用不同數(shù)量的頻率分量及其不同組合的影響,提出了選擇頻率分量的兩步準(zhǔn)則:
分別計(jì)算出通道注意力中每個(gè)頻率分量的結(jié)果; 根據(jù)所得結(jié)果篩選出Top-k個(gè)性能最佳的頻率分量。
全局注意力
RGA-Net[36]
《Relation-Aware Global Attention for Person Re-identification》發(fā)表于CVPR 2020,作者針對(duì)行人重識(shí)別任務(wù)提出了的一種基于關(guān)系感知的全局注意力方法?!敬a鏈接可訪問(wèn)github[37]】

作者認(rèn)為,要直觀地判斷一個(gè)特征節(jié)點(diǎn)是否重要,首先要知道其全局范圍的特征信息,以便在決策的過(guò)程中更好地探索每個(gè)特征節(jié)點(diǎn)各自的全局關(guān)系,從而學(xué)習(xí)出更魯棒的注意力特征。更詳細(xì)的解讀可參考本文[38]
高階注意力
GSoP-Net[39]
《Global Second-order Pooling Convolutional Networks》發(fā)表于CVPR 2019,通過(guò)應(yīng)用GSoP可以充分利用到圖像中的二階統(tǒng)計(jì)量,以高效的捕獲全局的上下文信息。考慮到傳統(tǒng)的一階網(wǎng)絡(luò)顯然不能夠有效的表征CNN,因?yàn)槠淠繕?biāo)是表征高維空間中數(shù)千個(gè)類(lèi)別的復(fù)雜邊界,因此學(xué)習(xí)高階表示對(duì)于增強(qiáng)非線性建模能力至關(guān)重要?!敬a鏈接可訪問(wèn)github[40]】

從底層到高層逐步引入全局的二階池化模塊,通過(guò)對(duì)整體圖像信息的相關(guān)性建模,來(lái)捕獲長(zhǎng)距離的統(tǒng)計(jì)信息,充分利用到了圖像的上下文信息。與SE等操作提倡的利用二維的GAP操作不同,GSoP通過(guò)引入?yún)f(xié)方差來(lái)計(jì)算通道之間的關(guān)系。具體來(lái)說(shuō),在利用卷積和池化進(jìn)行非線性變換以后,該協(xié)方差矩陣不僅可以用于沿通道維度進(jìn)行張量的縮放,也可以用于沿空間維度進(jìn)行張量縮放。
總結(jié)
在計(jì)算機(jī)視覺(jué)領(lǐng)域中,注意力機(jī)制大致可分為強(qiáng)注意力和軟注意力。由于強(qiáng)注意力是一種隨機(jī)的預(yù)測(cè),其強(qiáng)調(diào)的是動(dòng)態(tài)變化,雖然效果不錯(cuò),但由于不可微的性質(zhì)導(dǎo)致其應(yīng)用很受限制。與之相反的是,軟注意力是處處可微的,即能夠通過(guò)基于梯度下降法的神經(jīng)網(wǎng)絡(luò)訓(xùn)練所獲得,因此其應(yīng)用相對(duì)來(lái)說(shuō)也比較廣泛,本文所列舉的注意力方法均為軟注意力方式??偟膩?lái)說(shuō),目前所有的注意力機(jī)制方法大都是基于各個(gè)不同的維度利用有限的資源進(jìn)行信息的充分利用,本質(zhì)作用是增強(qiáng)重要特征,抑制非重要特征。注意力機(jī)制的特點(diǎn)是參數(shù)少-速度快-效果好。
References
本文亮點(diǎn)總結(jié)
如果覺(jué)得有用,就請(qǐng)分享到朋友圈吧!
公眾號(hào)后臺(tái)回復(fù)“目標(biāo)檢測(cè)競(jìng)賽”獲取目標(biāo)檢測(cè)競(jìng)賽經(jīng)驗(yàn)資源~

# CV技術(shù)社群邀請(qǐng)函 #
備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標(biāo)檢測(cè)-深圳)
即可申請(qǐng)加入極市目標(biāo)檢測(cè)/圖像分割/工業(yè)檢測(cè)/人臉/醫(yī)學(xué)影像/3D/SLAM/自動(dòng)駕駛/超分辨率/姿態(tài)估計(jì)/ReID/GAN/圖像增強(qiáng)/OCR/視頻理解等技術(shù)交流群
每月大咖直播分享、真實(shí)項(xiàng)目需求對(duì)接、求職內(nèi)推、算法競(jìng)賽、干貨資訊匯總、與 10000+來(lái)自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺(jué)開(kāi)發(fā)者互動(dòng)交流~

