原文链接:https://arxiv.org/abs/1810.11579
学习捕获长距离关系是图像/视频识别的基础。现有的CNN模型一般依赖于增加深度来对这种关系进行建模,效率非常低。作者提出了“双注意力块”,这是一种新的组件,它从输入图像/视频的整个时空空间中聚集和传播信息的全局特征,使后续的卷积层能够有效地从整个空间访问特征。该组件设计为两步双注意机制,第一步通过二级注意池将整个空间的特征集合成一个紧凑的集合,第二步通过另一个注意力自适应地选择和分配特征到每个位置。
CNN天生就受到卷积运算的限制,卷积运算致力于捕获局部特征和关系,并且在建模长距离相互依赖关系方面效率低下。虽然叠加多个卷积算子可以扩大接受域,但在实践中也存在一些不利的问题。
作者提出的A2-Net的核心思想是首先将整个空间的关键特征收集到一个紧凑的集合中,然后自适应地将其分布到每个位置,这样后续的卷积层即使没有很大的接收域也可以感知整个空间的特征。
第一级的注意力集中操作有选择地从整个空间中收集关键特征,而第二级的注意力集中操作采用另一种注意力机制,自适应地分配关键特征的子集,这些特征有助于补充高级任务的每个时空位置。
A2-Net与SENet、协方差池化、Non-local、Transformer有点类似,但是不同点在于它的第一个注意力操作隐式地计算池化特征的二阶统计,并能捕获SENet中使用的全局平均池化无法捕获的复杂外观和运动相关性;它的第二注意力操作从一个紧凑的袋子中自适应地分配特征,这比 Non-local、Transformer中将所有位置的特征与每个特定位置进行穷举关联更有效。
主要贡献如下:
设 X ∈ R c × h × w X\in \mathbb{R}^{c \times h \times w} X∈Rc×h×w为输入,每个位置 i = 1 , ⋯ , h w i=1, \cdots,hw i=1,⋯,hw的特征为 v i v_i vi,定义
z i = F d i s t r ( G g a t h e r ( X ) , v i ) z_i=F_{distr}(G_{gather}(X),v_i) zi=Fdistr(Ggather(X),vi)
为输出:首先收集整个空间的特征,然后将其分配回每个输入位置 i i i,同时考虑该位置的局部特征 v i v_i vi。
这种先 g a t h e r i n g gathering gathering再 d i s t r i b u t i n g distributing distributing的想法源于SENet,而SENet在收集过程中使用 g l o b a l a v e r a g e p o o l i n g global \space average \space pooling global average pooling而产生的单个全局特性被分发到所有位置,忽略了位置之间的不同需求。
而A2-Net中,更复杂的全局关系可以被一组紧凑的特征所捕获,每个位置可以接收其自定义的全局信息,这些信息与现有的局部特征相辅相成,有助于学习更复杂的关系。
与只计算一阶统计量的传统平均池化和最大池化相比,双线性池化能更好地捕捉和保持复杂关系。
双线性池化就是将两张输入特征图 A A A和 B B B里的特征向量对 ( a i , b i ) (a_i,b_i) (ai,bi)做外积并相加:
G b i l i n e a r ( A , B ) = A B T = ∑ ∀ i a i b i T G_{bilinear}(A,B)=AB^T=\sum_{\forall i}a_i b_i^T Gbilinear(A,B)=ABT=∀i∑aibiT
其中, A = [ a 1 , ⋯ , a h w ] ∈ R m × h w A=[a_1,\cdots,a_{hw}] \in \mathbb{R}^{m \times hw} A=[a1,⋯,ahw]∈Rm×hw; B = [ b 1 , ⋯ , b h w ] ∈ R n × h w B=[b_1,\cdots,b_{hw}] \in \mathbb{R}^{n \times hw} B=[b1,⋯,bhw]∈Rn×hw。在CNNs中, A A A和 B B B可以是同层出来的特征图 A = B A=B A=B;也可以是两个不同层出来的特征图 A = ϕ ( X ; W ϕ ) A=\phi(X;W_{\phi}) A=ϕ(X;Wϕ), B = θ ( X ; W θ ) B=\theta(X;W_{\theta}) B=θ(X;Wθ), W ϕ W_{\phi} Wϕ和 W θ W_{\theta} Wθ是参数。
通过引入输出变量 G = [ g 1 , ⋯ , g n ] ∈ R m × n G=[g_1,\cdots,g_n]\in \mathbb{R}^{m \times n} G=[g1,⋯,gn]∈Rm×n并且重写第二个特征 B = [ b ˉ 1 , ⋯ , b ˉ n ] B=[\bar{b}_1,\cdots,\bar{b}_n] B=[bˉ1,⋯,bˉn], b ˉ i \bar{b}_i bˉi是一个 h w hw hw维的行向量,输出为
g i = A b ˉ i T = ∑ ∀ j b ˉ i j a j g_i=A \bar{b}_i^T=\sum_{\forall j}\bar{b}_{ij}a_j gi=AbˉiT=∀j∑bˉijaj
上述公式不仅是计算二阶统计量,输出 G G G实际上是一个视觉基元包,每个基元 g i g_i gi是通过收集局部特征用 b ˉ i \bar{b}_i bˉi加权得到的; j j j为特征图上的位置; i i i为不同的 A t t e n t i o n M a p s Attention \space Maps Attention Maps。
进一步将 s o f t m a x softmax softmax应用于 B B B, ∑ j b ˉ i j = 1 \sum_j \bar{b}_{ij}=1 ∑jbˉij=1,可得到二阶注意力池化过程为
g i = A s o f t m a x ( b ˉ i ) T g_i=A \space softmax(\bar{b}_i)^T gi=A softmax(bˉi)T
令 A = ϕ ( X ; W ϕ ) A=\phi(X;W_{\phi}) A=ϕ(X;Wϕ), B = s o f t m a x ( θ ( X ; W θ ) ) B=softmax(\theta(X;W_{\theta})) B=softmax(θ(X;Wθ)), X X X为输入的特征图。
从整个空间中收集特征后的下一步是将它们分布到输入的每个位置,这样即使使用很小的卷积核,后续的卷积层也可以感知全局信息。
不像SENet那样将相同的全局特性分布到所有的位置,而是在每个位置上根据特征 v i v_i vi的需要分布一个自适应的视觉基元包来获得更大的灵活性。
这是通过 s o f t a t t e n t i o n soft \space attention soft attention从 G g a t h e r ( X ) G_{gather}(X) Ggather(X)中选择一个特征向量子集来实现的:
z i = ∑ ∀ j v i j g j = G g a t h e r ( X ) v i , w h e r e ∑ ∀ j v i j = 1 z_i=\sum_{\forall j}v_{ij}g_j=G_{gather}(X)v_i,\space where \space \sum_{\forall j}v_{ij}=1 zi=∀j∑vijgj=Ggather(X)vi, where ∀j∑vij=1
V = s o f t m a x ( ρ ( X ; W ρ ) ) V=softmax(\rho(X;W_{\rho})) V=softmax(ρ(X;Wρ)),其中 W ρ W_{\rho} Wρ为参数。
将上面两个注意步骤结合起来,形成双注意块里模块:
Z = F d i s t r ( G g a t h e r ( X ) , V ) = G g a t h e r ( X ) s o f t m a x ( ρ ( X ; W ρ ) ) = [ ϕ ( X ; W ϕ ) s o f t m a x ( θ ( X ; W θ ) ) T ] s o f t m a x ( ρ ( X ; W ρ ) ) \begin{aligned} Z & =F_{distr}(G_{gather}(X), V) \\ & = G_{gather}(X)softmax(\rho(X;W_{\rho})) \\ & = [\phi(X;W_{\phi})softmax(\theta(X;W_{\theta}))^T]softmax(\rho(X;W_{\rho})) \end{aligned} Z=Fdistr(Ggather(X),V)=Ggather(X)softmax(ρ(X;Wρ))=[ϕ(X;Wϕ)softmax(θ(X;Wθ))T]softmax(ρ(X;Wρ))