论文笔记:Non-Local Neural Network

Abstract

卷积和循环操作都一次只在一个局部neighborhood上操作。

受到传统计算机视觉中非局部中值计算的启发,作者决定使用此方法在深度学习上。

公式

通用公式:
yi=1C(x)jf(xi,xj)g(xj) \mathbf{y}_{i}=\frac{1}{\mathcal{C}(\mathbf{x})} \sum_{\forall j} f\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right) g\left(\mathbf{x}_{j}\right)
y\mathbf{y} is output. xx 是输入信号。ii是输出的值第i位置的值,j代表所有可能位置。

y\mathbf{y}x\mathbf{x} 具有相同大小的维度。

C(x)C(x)是正则化常量

ff代表两处变量的关系

非局部模块十分的灵活,可以放在网络的前面,可以很容易与循环层,卷积层放到一起。

实例

为了简便考虑,g就作为一个简单的线性变换g(xj)=Wgxjg\left(\mathbf{x}_{j}\right)=W_{g} \mathbf{x}_{j}, 其中WgW_g是作为需要学习的参数。

接下来我们考虑函数ff:

Gaussian

f(xi,xj)=exiTxj f\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right)=e^{\mathbf{x}_{i}^{T} \mathbf{x}_{j}}

自然的想法就是使用高斯函数。其中C(x)=jf(xi,xj).\mathcal{C}(\mathbf{x})=\sum_{\forall j} f\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right).

Embedded Gaussian

f(xi,xj)=eθ(xi)Tϕ(xj) f\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right)=e^{\theta\left(\mathbf{x}_{i}\right)^{T} \phi\left(\mathbf{x}_{j}\right)}

其中θ(xi)=Wθxi\theta\left(\mathbf{x}_{i}\right)=W_{\theta} \mathbf{x}_{i} and ϕ(xj)=Wϕxj\phi\left(\mathbf{x}_{j}\right)=W_{\phi} \mathbf{x}_{j}, 我们同样可以设置C(x)=jf(xi,xj).\mathcal{C}(\mathbf{x})=\sum_{\forall j} f\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right).

于是这个计算就变成了softmax: y=softmax(xTWθTWϕx)g(x)\mathbf{y}=\operatorname{softmax}\left(\mathbf{x}^{T} W_{\theta}^{T} W_{\phi} \mathbf{x}\right) g(\mathbf{x})

Dot Product

f(xi,xj)=θ(xi)Tϕ(xj) f\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right)=\theta\left(\mathbf{x}_{i}\right)^{T} \phi\left(\mathbf{x}_{j}\right)

设置C(x)=NC(x) = N, 其中N是位置xx的个数

Concatenation

f(xi,xj)=ReLU(wfT[θ(xi),ϕ(xj)]) f\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right)=\operatorname{ReLU}\left(\mathbf{w}_{f}^{T}\left[\theta\left(\mathbf{x}_{i}\right), \phi\left(\mathbf{x}_{j}\right)\right]\right)

其中WfW_f是一个将组合映射到标量的权重向量。 我们设置 Cx=NC(x)=N.

非局部块

定义:
zi=Wzyi+xi \mathbf{z}_{i}=W_{z} \mathbf{y}_{i}+\mathbf{x}_{i}
yiy_i是式子(1)的结果, +xi+x_i表示残差连接(residual connection)是为了使我们可以添加非局部块到任何提前训练(pre-trained)的模型而不破坏模型结构(比如如果WzW_z被初始化为0)。图二是一个例子

论文笔记:Non-Local Neural Network

这里可以通过矩阵乘法和加法巧妙的实现非局部变换。

写下来截图的部分便是前文提到的embedding Gaussian的ff

论文笔记:Non-Local Neural Network

这里θ\thetaϕ\phi函数都对输入信号进行了降低通道处理。(从T×W×H×1024T\times W \times H \times 1024 降到 T×W×H×512T\times W \times H \times 512)这样可以降低计算,同时也符合瓶颈算法设计。

同时文中说可以将(1)式修改为
1c(x^)jf(xi,x^j)g(x^j) \frac{1}{c(\hat{\mathbf{x}})} \sum_{\forall j} f\left(\mathbf{x}_{i}, \hat{\mathbf{x}}_{j}\right) g\left(\hat{\mathbf{x}}_{j}\right)
其中x^\hat{x}表示池化后xx的子采样。 我们通过给θ\thetaϕ\phi添加赤化层达到这个效果,从而可以使得计算降低1/4.

实现细节

2D ConvNet baseline (C2D)

论文笔记:Non-Local Neural Network

输入的是32帧的224x224像素视频。整个模型直接使用 ResNet 在ImageNet pre-trained 的权重。只有在赤化层使用了时域。

Inflated 3D ConvNet (I3D)

把卷积核在时域上膨胀开。比如2D上的k×kk\times k 膨胀成 t×k×kt\times k\times k

因为3D计算量过于旁大,所以每两个瓶颈只膨胀一个卷积核。要么膨胀3x3成3x3x3;要么膨胀1x1成3x1x1

Non-local Network

作者在两种baseline上分别添加了1,5,10个非局部块做实验

大,所以每两个瓶颈只膨胀一个卷积核。要么膨胀3x3成3x3x3;要么膨胀1x1成3x1x1

Non-local Network

作者在两种baseline上分别添加了1,5,10个非局部块做实验

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-crjZNYL2-1596448249812)(image-20200803174903515.png)]

相关文章:

  • 2021-12-14
  • 2021-08-11
  • 2021-06-06
  • 2021-07-19
  • 2021-11-11
  • 2021-11-28
  • 2021-12-15
猜你喜欢
  • 2022-01-14
  • 2021-11-18
  • 2021-08-25
  • 2021-07-16
  • 2021-07-31
  • 2021-11-05
  • 2021-12-07
相关资源
相似解决方案