SCA-CNN
《SCA-CNN: Spatial and Channel-wise Attention in Convolutional Networks for Image Captioning》
总体介绍
文章认为CNN具有三个非常重要的性质,channel,spatial,multilayer,但是现有的基于注意力机制的CNN方法大多只在网络最后一层的引入spatial attention机制,罔顾了channel和multilayer这两个特性。作者认为spatial信息是用于回答“哪里”重要,即feature map中哪些位置更为重要(对应原图中的感受野更为重要),channel信息是用于回答“哪些”重要,即feature map中的哪些channle(特征)更为重要,因为不同的channle由不同的filter得到,不同的filter可以认为是不同的特征提取子。而单单在最后一层利用spatial attention,产生了感受野过大,feature map不同位对应感受野差异性不足的问题。为此,作者提出了spactial and channle wise attention-CNN来更好的利用CNN前述的三个特性。
模型介绍
SCA-CNN在某一层的运算流程如下公式:
Vl=CNN(Xl−1)(1)γl=Φ(ht−1,Vl)(2)Xl=f(Vl,γl)(3) V^l=CNN(X^{l-1})\qquad(1)\\
\gamma^l=\Phi(h_{t-1},V_l)\qquad(2)\\
X^l=f(V^l,\gamma^l)\qquad(3)Vl=CNN(Xl−1)(1)γl=Φ(ht−1,Vl)(2)Xl=f(Vl,γl)(3)
可以看出对于我们首先会计算网络上一层的输出feature map Vl∈RH∗W∗CV^l\in R^{H*W*C}Vl∈RH∗W∗C,而后通过函数Φ()\Phi()Φ()计算出注意力γl∈RH∗W∗C\gamma^l \in R^{H*W*C}γl∈RH∗W∗C,再将得到的注意力图样与该层的输入feature map经函数f()f()f()组合得到该层的加权输入XlX^lXl,这里的ht−1h_{t-1}ht−1可以认为是来及结果层面上的指导,文章是拿image caption问题做例子,先用CNN做特征提取模块(encoder),送入LSTM得到文字输出(decoder)。公式中的ht−1h_{t-1}ht−1就是LSTM在前一时刻的隐状态,函数f()f()f()就是简单的点乘。实际上这个过程更好的顺序表述为(2),(3),(1),即先由前层的输出计算注意力,将输出与注意力点乘得到本层的真正输入,再送入本层CNN得到本层输出。
改进
上式在理论层面上没有问题,但在实操层面存在着运算量过大的问题,因为注意力图样γl∈RH∗W∗C\gamma^l\in R^{H*W*C}γl∈RH∗W∗C,我们需要至少O(kHWC)O(kHWC)O(kHWC)的内存(k和隐状态有关,但没看懂),因此作者将γl\gamma^lγl又细分为了通道层面的注意力和空间层面的注意力以分别计算,节省空间。
空间层面的注意力计算如下:
al=tanh((WsVl+bs)⊕Whsht−1)αl=softmax(Wia+bi)a^l=tanh((W_sV^l+b_s)\oplus W_{hs}h_{t-1})\\
\alpha^l=softmax(W_ia+b_i)al=tanh((WsVl+bs)⊕Whsht−1)αl=softmax(Wia+bi)
其中VVV为原始特征图样在空间层面上flatten的结果,V∈RC∗m,m=H∗WV\in R^{C*m},m=H*WV∈RC∗m,m=H∗W,最终得到αl∈Rm\alpha^l \in R^mαl∈Rm,其余参数尺寸:Ws∈Rk∗C,Whs∈Rk∗d,ht−1∈Rd,Wi∈RkW_s\in R^{k*C},W_{hs}\in R^{k*d},h_{t-1}\in R^d,W_i\in R^kWs∈Rk∗C,Whs∈Rk∗d,ht−1∈Rd,Wi∈Rk。⊕\oplus⊕为矩阵向量相加,即把向量加在矩阵的每一行上。
通道层面的注意力如下:
bl=tanh((Wc⊗vl+bc)⊕Whcht−1)βl=softmax(Wi′b+bi′)b^l=tanh((W_c\otimes v^l+b_c)\oplus W_{hc}h_{t-1})\\
\beta^l=softmax(W'_ib+b'_i)bl=tanh((Wc⊗vl+bc)⊕Whcht−1)βl=softmax(Wi′b+bi′)
其中vvv为原始特征图样在空间层面上mean pooling结果,v∈RCv\in R^Cv∈RC,最终得到β∈RC\beta \in R^Cβ∈RC
根据是先计算空间层面的注意力还是通道层面的注意力,我们的SCA-CNN也可以细分为S-C和C-S类型,值得注意的是此时后一步运算用到的特征图样已不再是原始的特征图样,而是经前一步得到注意力加权得到的图样。详细流程见下图:

由函数ϕc()\phi_c()ϕc()计算出在channel层面上的注意力分布βl∈RC\beta^l\in R^Cβl∈RC,在此基础上由函数ϕs()\phi_s()ϕs()得到了spatial层面上的注意力分布αl∈RH∗W\alpha^l\in R^H*Wαl∈RH∗W,最后将计算出的αl,βl\alpha^l,\beta^lαl,βl与原始的VlV^lVl结合得到当前的加权后feature map。
实验结果
文章实验主要是为了验证3个问题:
- 引入通道层面的注意力是否有用->通过对S,C,C-S,S-C,SAT模型效果比对,证明了当feature map层数过多时引入通道层面的注意力,模型表现更好;而将通道注意力与空间注意力结合则会达到最好的效果;
- 引入多层注意力是否有用-通过在S和C-S模型中引入不同数目的attenion module,发现在大部分实验里多层的效果要优于单层,但层数过多存在着过拟合的风险。
- 与现有SOTA模型相比,SCA-CNN效果怎么样->比大部分模型效果好的,略逊色与某些模型,要么因为是ensemble modle要么因为模型有着更优越的结构。
总结
文章的主要思路还是在最初提出的两个问题,关注"what"和"where",得到了不错的结果,强调了通道和空间都很重要,至于multilayer,感觉效果没有很明显。
SCA-CNN是一种针对图像标题生成任务的卷积网络模型,它同时考虑了通道(channel)、空间(spatial)和多层(multilayer)的重要性。传统方法主要在最后一层使用空间注意力,但SCA-CNN提出在通道和空间两个维度上分别计算注意力,以解决感受野过大和特征多样性不足的问题。模型通过计算空间和通道注意力图,对特征图进行加权,从而得到加权后的输入。实验表明,通道注意力在特征图层数较多时能提升模型性能,且结合空间注意力能达到最佳效果。SCA-CNN的引入提高了模型的表达能力,并在实验中展现出优于其他模型的性能。
34

被折叠的 条评论
为什么被折叠?



