GCT解读
浙江大學等機構(gòu)發(fā)布的一篇收錄于CVPR2021的文章,提出了一種新的通道注意力結(jié)構(gòu),在幾乎不引入?yún)?shù)的前提下優(yōu)于大多SOTA通道注意力模型,如SE、ECA等。這篇文章雖然叫Gaussian Context Transformer,但是和Transformer并無太多聯(lián)系,這里可以理解為高斯上下文變換器。
簡介
此前,大量的通道注意力模塊被提出用于增強卷積神經(jīng)網(wǎng)絡(luò)(CNN)的表示能力,這些方法通常使用全連接層或者線性變換來學習全局上下文和注意力激活值之間的關(guān)系(relationship)。但是,實驗結(jié)果表明,這些注意力模塊雖然引入了不少參數(shù),但也許并沒有很好地學習到這種關(guān)系。這篇論文中,作者假定這種關(guān)系是可以預先確定的,基于這個假設(shè),作者提出了一種簡單但是極其高效的通道注意力模塊,名為 Gaussian Context Transformer(GCT),它通過滿足預設(shè)關(guān)系的高斯函數(shù)來實現(xiàn)上下文特征激勵。GCT對大多數(shù)視覺網(wǎng)絡(luò)都有比較明顯的性能提升,并且性能優(yōu)于現(xiàn)有的SOTA通道注意力模型,如SENet、ECANet等,且效率更高。
-
論文標題
Gaussian Context Transformer
-
論文地址
https://openaccess.thecvf.com/content/CVPR2021/html/Ruan_Gaussian_Context_Transformer_CVPR_2021_paper.html
-
論文源碼
暫未開源
介紹
卷積神經(jīng)網(wǎng)絡(luò)(CNN)已經(jīng)在計算機視覺中取得了巨大的成功,推動了圖像分類、分割和目標檢測等任務(wù)的發(fā)展。然而,卷積核局部上下文感知的特性使得CNN難以有效捕獲圖像上的全局上下文信息,而這種全局感知對于語義任務(wù)是至關(guān)重要的。為了解決這個問題,注意力機制被引入卷積神經(jīng)網(wǎng)絡(luò)中,他們的核心思想通常是在原有網(wǎng)絡(luò)結(jié)構(gòu)的基礎(chǔ)上添加一個輕量的模塊來捕獲全局的長程依賴(global long-range dependencies)。而在這其中,通道注意力往往受到了更多的關(guān)注,因為相比之下這類注意力更加簡潔有效。此前,最著名的通道注意力為SENet,它通過捕獲逐像素的依賴自適應(yīng)地增強重要的通道并抑制不重要的通道,從而給CNN帶來了巨大的提升。通道注意力的大體范式如下,輸入一個C×H×WC\times H \times WC×H×W的特征圖,注意力模塊學習一個C×1×1C \times 1 \times 1C×1×1的注意力向量并和原始特征圖相乘,得到注意力后的結(jié)果,不論是哪種通道注意力都大體在這個范式下,關(guān)于比較經(jīng)典的視覺注意力,我也做過幾篇文章的解讀,歡迎訪問。
SENet提出之后,不少方法對其進行改進,有的簡化了特征變換模塊、有的改變了融合模式,也有的集成了空間注意力機制。不過,這些方法或多或少都引入了不少參數(shù)來學習全局上下文和注意力激活值之間的關(guān)系,然而,這樣學得的關(guān)系也許并不是足夠好的。
LCT(linear context transform)觀察所得,如下圖所示,SE傾向于學習一種負相關(guān),即全局上下文偏離均值越多,得到的注意力激活值就越小。為了更加精準地學習這種相關(guān)性,LCT使用一個逐通道地變換來替代SE中的兩個全連接層。然而,實驗表明,LCT學得的這種負相關(guān)質(zhì)量并不是很高,下圖中右側(cè)可以看出,LCT的注意力激活值波動是很大的。
為了緩解上述問題,論文作者假設(shè)全局上下文和注意力激活值之間確實是一種負相關(guān)的關(guān)系。基于這個假設(shè),作者提出了一個新的通道注意力模塊,名為Gaussian Context Transformer(GCT),該模塊通過一個表示預設(shè)負相關(guān)的高斯函數(shù)直接將全局注意力映射為注意力圖。GCT的基礎(chǔ)結(jié)構(gòu)如下圖所示,具體而言,GAP之后,GCT首先對通道向量進行標準化以穩(wěn)定全局上下文的分布,然后一個高斯函數(shù)對標準化后的全局上下文進行激勵操作(包括轉(zhuǎn)換和激活兩步)來獲得注意力激活值(attention map,注意力圖)。若高斯函數(shù)是固定的,這個模型稱為GCT-B0,需要注意,GCT-B0是一個無參數(shù)的注意力塊,它建模全局上下文不需要特征變換的學習。
上表是常見的幾個通道注意力模塊引入的參數(shù)量和性能比較,可以看到,GCT-B0在不引入任何參數(shù)的前提下就已經(jīng)有相當不錯的性能提升,這也證明了全局特征變換并非必要的。作者進一步設(shè)計了一個可學習的GCT版本,為GCT-B1,它能自適應(yīng)學習高斯函數(shù)中的標準差,因此它的參數(shù)量是一個數(shù)值。實驗表明,GCT-B1在分類任務(wù)上通常優(yōu)于GCT-B0,但是在檢測和分割任務(wù)上性能類似。
GCT
受到LCT的啟發(fā),作者認為通道注意力機制學習的其實是一種負相關(guān),基于這種假設(shè)GCT被設(shè)計用于建模全局上下文,這一整節(jié)將詳細介紹GCT的細節(jié),它的整個結(jié)構(gòu)圖如下圖所示。
Gaussian Context Transformer
GCT由三個操作構(gòu)成,包括全局上下文聚合(global context aggregation,GCA)、標準化(normalization)和高斯上下文激勵(gaussian context excitation,GCE),在上圖中它是先后進行的。
首先來看GCA操作,它是為了捕獲逐通道統(tǒng)計信息,手段是在特征圖的空間上進行全局信息的聚合,GCA有助于網(wǎng)絡(luò)捕獲長程依賴。和SE類似,這篇論文也采用GAP作為聚合的方式。具體而言,一個X∈RC×H×W\mathbf{X} \in \mathbb{R}^{C \times H \times W}X∈RC×H×W的輸入特征圖,全局上下文信息可以表述為z=avg?(X)={zk=1H×W∑i=1W∑j=1HXk(i,j):k∈{1,…,C}}\mathbf{z}=\operatorname{avg}(\mathbf{X})=\left\{z_{k}= \frac{1}{H \times W} \sum_{i=1}^{W} \sum_{j=1}^{H} \mathbf{X}_{k}(i, j): k \in\{1, \ldots, C\}\right\}z=avg(X)={zk?=H×W1?∑i=1W?∑j=1H?Xk?(i,j):k∈{1,…,C}},其中CCC為通道數(shù),HHH和WWW為特征圖的寬和高。
此前的工作接下來會通過轉(zhuǎn)換和激活來實現(xiàn)激勵操作,即先通過線性層對全局上下文進行變換然后使用sigmoid激活函數(shù)將上下文激活為注意力圖。不過,和這些工作不太一樣,GCT設(shè)計了一種新的激勵方式,它通過基于負相關(guān)假設(shè)的一個函數(shù)f(?)f(\cdot)f(?)實現(xiàn)轉(zhuǎn)換和激活操作。具體而言,定義均值偏移為z?μ\mathbf{z}-\muz?μ,這里的μ=1C∑k=1Czk\mu=\frac{1}{C} \sum_{k=1}^{C} z_{k}μ=C1?∑k=1C?zk?表示全局上下文z\mathbf{z}z的均值,均值偏移就很好地度量了z\mathbf{z}z和μ\muμ之間的偏差。但是,直接設(shè)置均值偏差作為輸入會使得f(?)f(\cdot)f(?)不穩(wěn)定,這是因為不同輸入樣本的均值偏差分布不一致。為了緩解這個問題,作者引入了一個特定實例的因子σ\sigmaσ來穩(wěn)定分布,保證0均值和1方差,這個過程描述為下面的式子,其中的σ\sigmaσ為全局上下文的標準差,通過1C∑k=1C(zk?μ)2+?\sqrt{\frac{1}{C} \sum_{k=1}^{C}\left(z_{k}-\mu\right)^{2}}+\epsilonC1?∑k=1C?(zk??μ)2?+?計算獲得(?\epsilon?為一個很小的常數(shù))。
z^=1σ(z?μ)\hat{\mathbf{z}}=\frac{1}{\sigma}(\mathbf{z}-\mu) z^=σ1?(z?μ)
可以發(fā)現(xiàn),這種獲得z^\hat{\mathbf{z}}z^的方式與對z\mathbf{z}z進行歸一化的結(jié)果一致,因此為了簡潔,記其為標準化操作z^=norm?(z)\hat{\mathbf{z}}=\operatorname{norm}(\mathbf{z})z^=norm(z)。
接著,為了滿足負相關(guān)的假設(shè),需要找到一個連續(xù)的函數(shù)f(z^)f(\hat{\mathbf{z}})f(z^)滿足下面的條件:
在已知的函數(shù)中,高斯函數(shù)滿足上面的所有條件,因此論文中采用該函數(shù),因此有下面的GCA操作的定義,其中aaa為高斯函數(shù)的幅值,設(shè)為1以滿足條件1;bbb則表示高斯函數(shù)的均值,設(shè)為0來滿足條件2;ccc則表示高斯函數(shù)的標準差,控制通道注意力圖的多樣性,標準差越大,通道間激活值多樣性越小。
G(z^)=ae?(z^?b)22c2G(\hat{\mathbf{z}})=a e^{-\frac{(\hat{\mathbf{z}}-b)^{2}}{2 c^{2}}} G(z^)=ae?2c2(z^?b)2?
通過設(shè)置,GGG可以簡化為下面的式子,這里的ccc可以是常數(shù),也可以是可學習的參數(shù),g\mathbf{g}g則為注意力激活值,它和原始特征圖相乘即可得到注意力后的特征圖。
g=G(z^)=e?z^22c2\mathbf{g}=G(\hat{\mathbf{z}})=e^{-\frac{\hat{\mathbf{z}}^{2}}{2 c^{2}}} g=G(z^)=e?2c2z^2?
將上述所有的操作組合到一個式子中構(gòu)建GCT模塊,如下所示。
Y=e?norm(avg?(X))22c2X\mathbf{Y}=e^{-\frac{norm(\operatorname{avg}(\mathbf{X}))^{2}}{2 c^{2}}} \mathbf{X} Y=e?2c2norm(avg(X))2?X
Parameter-free GCT
當標準差ccc為常數(shù)的時候,GCT就是一個parameter-free(無參)注意力模塊,稱為GCT-B0,實驗表明c=2c=2c=2可以獲得一個較好的結(jié)果。
Parameterized GCT
當然,ccc也可以是可學習的參數(shù),這個版本的GCT為GCT-B1。為了約束c∈[β,α+β]c \in[\beta, \alpha+\beta]c∈[β,α+β],通過下面的式子對其進行上下界約束,其中α\alphaα和β\betaβ是常數(shù),θ\thetaθ為可學習參數(shù),初始化為0。
c=α?sigmoid?(θ)+βc=\alpha \cdot \operatorname{sigmoid}(\theta)+\beta c=α?sigmoid(θ)+β
值得關(guān)注的是,GCT-B1只有一個可學習參數(shù)θ\thetaθ,并沒有引入其他的參數(shù)。
實現(xiàn)
由于GCT尚還沒有開源,我這里用PyTorch實現(xiàn)了一個簡單的版本,等后續(xù)開源了再更新為官方的代碼。
import torch import torch.nn as nnclass GCT(nn.Module):def __init__(self, learnable=False):super(GCT, self).__init__()self.avg_pool = nn.AdaptiveAvgPool2d(1)self.learnable = learnableif self.learnable:self.c = nn.Parameter(torch.ones(1) * 0)else:self.c = 2def forward(self, x):residual = xb, c, h, w = x.shapeattn = self.avg_pool(x).view(b, c)# normattn = self.norm(attn)# gaussian functionif self.learnable:attn = self.gaussian(attn, 3 * torch.sigmoid(self.c) + 1)else:attn = self.gaussian(attn, self.c)attn = attn.unsqueeze(-1).unsqueeze(-1)out = residual * attnreturn out@staticmethoddef norm(x):mean = x.mean(dim=-1, keepdim=True).expand_as(x)std = x.std(dim=-1, keepdim=True).expand_as(x)rst = (x - mean) / stdreturn rst@staticmethoddef gaussian(x, c):return torch.exp(-(x ** 2) / (2 * c))實驗
關(guān)于參數(shù)的消融實驗這里不多贅述了,只列舉幾個SOTA對比的結(jié)果,分別是ImageNet上圖像分類的結(jié)果、COCO上目標檢測和實例分割的結(jié)果,可以發(fā)現(xiàn),相比此前的通道注意力SOTA均有顯著改進。
作者還可視化了均值偏移和激活值在不同stage的變化,GCT是很穩(wěn)定的。
總結(jié)
這篇文章提出了一種新的通道注意力機制,GCT,僅僅通過高斯函數(shù)即可完成通道注意力的過程,幾乎沒有引入任何的參數(shù)并獲得了SOTA效果,是非常有趣且實用的工作。本文也只是我本人從自身出發(fā)對這篇文章進行的解讀,想要更詳細理解的強烈推薦閱讀原論文。最后,如果我的文章對你有所幫助,歡迎一鍵三連,你的支持是我不懈創(chuàng)作的動力。
總結(jié)
- 上一篇: 0006-ZigZag Conversi
- 下一篇: ViP解读:视觉MLP结构新作