GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond 阅读笔记

本贴最后更新于 1715 天前,其中的信息可能已经时移俗易

1.简介

本文主要梳理下 Squeeze-and Excitation Networks(SEN),Non-local Neural Networks(NLN)以及 Global Context Net(GCN)。首先讲下什么是 Non-local,我们知道卷积操作是 local 的,虽然我们可以通过叠加卷积核来增大感受野但这毕竟是有限的。基于此 NLN 的作者将 self-attention 引入计算机视觉来解决长距离依赖问题,并且希望对于不同的 position 关注的 position 是不一样的(类似于 nlp 中每个单词对其他所有单词的关注程度)。然而 GCN 的作者在做实验可视化的时候发现对于不同的 query position 得到 attention map 是几乎一样的,基于此 GCN 作者对 NL block 进行简化并得出 Global Context Modeling Framework 即上下文建模的一般框架,发现 SE block 就是上下文建模的一个实例,最后作者设计了一个 Global Context Block 既能像 Non-local 一样解决长距离依赖问题又与 SE 一样轻量。

2.正文

Squeeze-and-Excitation Networks

image.png

首先我们来讲讲 SE Net。X 是原始图像,F_{tr}就是我们熟知的卷积操作,F_{sq}是 Squeeze 模块,做的事情就是在所有 position 上即 HW 维度上做全局平均池化得到 C 维向量 z,数学语言描述为:

z_c=F_{sq}(u_c)=\frac{1}{H*W}\sum_{i=1}^H\sum_{j=1}^Wu_c(i,j)

接下来就是F_{ex}即 Excitation 模块,Excitation 模块其实就是两个全连接层,第一层映射到 C/r 维上接 RELU 激活函数,第二层再映射回 C 维上接 sigmoid 激活函数得到 C 维向量 s,r 是维度衰减比率其实就是一个 bottleneck 的设计以减小参数量(从C^2减小到 2C*C/r),数学语言描述为:

s=F_{ex}(z,W)=\sigma(g(z,W))=\sigma(W_2\delta(W_1,z))

\delta表示 RELU 函数,\sigma表示 sigmoid 函数。最后就是F_{scale}特征融合的过程,对 U 的 C 维上每一个 feature map 广播乘以 C 维向量 s 对应的值。向量 s 的值都是[0,1]之间,融合过程其实就是强化重要的通道削弱不那么重要的通道。

为什么要加全连接层呢?

z 向量是通过全局平均池化得到的,没有可以学习的参数,所以文中称 z 为静态向量,这也是全连接层称为 Excitation 激活的原因。

Non-local Neural Networks

image.png

首先定义以下公式:

y_i=\frac{1}{C(x)}\sum_{\forall j}f(x_i,x_j)g(x_j)

i 表示输出的 position(图像的话就是 space,文本的话就是 time,视频的话就是 space time)的索引,f(x_i,x_j)计算的是输入 postion i 和 position j 的相关程度是一个标量,g(x_j)计算输入信号在 position j 的值是把一个标量映射为一个向量,C(x)是一个归一化因子。那么y_i的值是通过输入x_i去枚举所有 postion 计算相关程度并乘以对应的g(x_j)最后归一化,可以看出其实这就是 self-attention 的思想。

接下来我们看看 g 函数和不同的 f 函数:

简化起见,作者定义 g 为一个线性映射g(x_j)=W_gx_j,用 1x1 的卷积表示,因为 1x1 的卷积可以看成是线性映射。

Gaussian:f(x_i,x_j)=e^{x_i^Tx_j},C(x)=\sum _{\forall j} f(x_i,x_j)

Embedded\quad Gaussian:f(x_i,x_j)=e^{\theta(x_i)^T\phi(x_j)},\theta(x_i)=W_{\theta}x_i,\phi(x_j)=W_{\phi}x_j,\theta和\phi是两个线性映射,C(x)=\sum _{\forall j} f(x_i,x_j)

Dot\quad product:f(x_i,x_j)=\theta(x_i)^T\phi(x_j),C(X)=N,N=H*W

Concatenation:f(x_i,x_j)=ReLU(w_f^T[\theta(x_i),\phi(x_j)])

最后就是一个线性映射 + 残差连接,z_i=W_zy_i+x_i

可以看出,Embedded Gaussian 其实就是 self-attention 的公式,Embedded Gaussian 也是最常用的 f 函数。这篇论文其实就是 self-attention 在 CV 中的应用,但有趣的是对于不同 query position 得到的 attention map 是几乎一样的,这在下文还会提到。

Global Context Networks

上文我们说到 Non-local 作者将 self-attension 机制在 cv 中应用,希望对于不同 query position 能够得到不同的 attention map,然后不幸的是 GCN 作者在 COCO 数据集上做可视化实验随机挑 6 张图片的 3 个 query position 所得到的 attention map 对应的热力图发现不同的 query 热力图是几乎一毛一样的(见下图,红色的点表示 query position),基于此作者对 NL block 进行简化。

image.png

Analysis of Non-local Netwokrs

既然是不依赖于 query 的,那么首先就可以把 query 去掉,为简化标记w_{ij}=\frac{f(x_i,x_j)}{C(x)},原始的 Embedded Gaussian 的 f 函数为w_{ij}=\frac{exp(<W_qx_i,W_kx_j>)}{\sum_mexp(W_qx_i,W_kx_m)},那么简化之后的 NL block 可以表示为:

image.png

为了进一步减小计算量,作者把W_v矩阵移到求和式子的外边,这样对于图像计算量浮点运算次数就从O(HWC^2)降到了O(C^2),进一步简化的 NL-block 公式以及网络架构图如下:

image.png

image.png

Global Context Modeling Framework

作者抽象出全局上下文建模的一般框架:

a)全局注意力池化,采用 1x1 的卷积W_k和 softmax 函数得到 attention 的权重,再对 attention 池化得到全局上下文特征。

b)通过 1x1 的卷积W_v做特征转换。

c)特征融合,对每个 postion 加上全局上下文特征。

公式描述如下:

image.png

\sum_j\alpha_jx_j表示上下文建模,\alpha_j为每个 position 的权重;\delta表示 feature transform;F(:,:)表示特征融合。作者发现 SE block 其实就是这个上下文建模框架的一个实例。对于 SE block 而言,\alpha_j=\frac{1}{N_p}N_p为 position 的数量,\delta为全连接 RELU 全连接 sigmoid,F 为对应通道广播相乘。

image.png

Global Context block

最后作者提出全局上下文建模的一个实例称之为 GC block,其实就是把之前简化的 NL block 的 transform 模块改成类似于 SE block 中的 transform 模块以进一步减小参数量。

image.png

总结

Non-local 通过 self-attenion 解决了长距离依赖的问题,但实验表明 attention map 是不依赖于 query 的,也就是说其实并没有学到 attention 的知识只是学到了全局上下文(虽然说这个上下文是通过不同 position 加权得到但是这个上下文是不依赖于 query 的)。基于此 GC 作者对此进行简化并吸收 SE block 中的 bottleneck 设计减小参数量使得 GC block 既能像 NL block 捕捉长距离依赖又像 SE block 一样轻量。值得一提的是虽然说 SE block 是 Global Context Modeling Framwork 的一个实例化,但其实还是不太一样,SE block 做的是强化重要的通道削弱不那么重要的通道是在通道上的 attention,而 GC block 是对每个 position 加上一个上下文并不是 position 上的 attention。最后 GC block 和 SE block 都是非常轻量的组件,可以轻松的与其他网络结合。

参考文献

Squeeze-and-Excitation Networks

Non-local Neural Networks

GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond

  • 细粒度识别
    2 引用 • 2 回帖
  • 计算机视觉
    5 引用 • 2 回帖
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    53 引用 • 40 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • hailangjiang
    作者

    😂 😂 不能够不能够

  • 其他回帖
  • visus

    彦祖哥,我要给你生一堆猴子

    1 回复