Non-local Neural Networks
1 介绍
卷积和循环操作都是对局部邻域进行处理(时间/空间),因此必须经过重复的卷积循环,逐渐传播数据中的信号,最终才能获得长距离的信息依赖关系。
但是这种局部处理的重复存在一定局限性:
1)计算低效
2)优化困难
3)长距离信息需要来回传递时,很难对这种多次跳跃的联系进行建模
所以本文弄了一种一般化的non-local操作(基于cv领域的经典non-local均值)
这个操作基于整个特征图上的全部位置计算响应,好处有:
1)和重复处理相比,可以直接计算任意两个位置的长距离信息依赖
2)更有效,层数少效果也不错
3)输入尺寸可变,很容易结合其他操作
本文展示了视频分类的处理结果,non-local的一个单元就可以捕捉视频的长范围时空信息,整个结构优于简单的2D,3D卷积网络。结果更准确,计算更省资源。
为了阐述non-local的通用性,文章进一步在COCO数据集上做了目标检测/分割/位姿估计的实验。结论是non-local在这三个任务中都提高了准确率,且只有很小的额外计算量。non-local具有通用性,可作为基础结构在神经网络中使用。
2 和non-local有关的工作
2.1 non-local图像处理
我理解的话,这部分是在讲non-local思想的历史,包括:
1)全局滤波操作,基于图像块的相似性计算贡献
2)BM3D,块匹配的思想,该方法和神经网络比基础也很牢固。
这种non-local匹配的思想也是纹理分析,超分重建,修复图像算法的精髓之处。
2.2 图模型
长距离依赖可以用图模型进行建模,例如条件随机场CRF。在深度神经网络领域,CRF可以做语义分割后处理工作。
对CRF的平均场进行迭代推测的过程,可以转化成RN。相反,我们的non-local只需要简单的前馈计算(不用循环)并且主要用在分类和检测。总而言之,这些方法都和图神经网络相关。
- 搞懂CRF,写篇笔记
2.3 前馈序列建模
最近语音和语言序列都在用前馈网络建模。在这些方法中,长距离依赖主要通过大感受野和很深的一维卷积来捕获。这些前馈网络可并行,也比递归模型效果好。
2.4 自注意力机制
本文工作引入了自注意力机制的思想。自注意力模块通过对嵌入空间的全部序列加权平均,得到序列中关注位置的响应。我们将这种方法从机器翻译领域迁移到了计算机视觉领域,变为了更通用的non-local方法。
2.5 交互网络
交互网络(Interaction Networks,IN)常用于物理问题建模-处理物体成对的相互影响;
它的变体Relation Networks也是计算输入图的成对位置特征间函数关系;
而本文non-local也是处理的成对数据(后文有解释),由此可看出有non-local的作用之关键。
2.6 视频分类
视频分类的一个自然方法是,结合优秀的RNN和CNN。与此相反,前馈网络是基于时空上的3D卷积思想完成的。除了这些端到端的方法,光流和轨迹法也很好用。而这两种就是non-local的思想。
3 Non-local Nerual Networks(关键部分)
3.1 表示
神经网络中的non-local操作被定义为:
y
i
=
1
C
(
x
)
∑
∀
j
f
(
x
i
,
x
j
)
g
(
x
j
)
(1)
\mathbf y_i=\frac{1}{C(\mathbf x)}\sum_{\forall j}f(\mathbf x_i,\mathbf x_j)g(\mathbf x_j) \tag 1
yi=C(x)1∀j∑f(xi,xj)g(xj)(1)
式(1)中,
y
\mathbf y
y是输出,
x
\mathbf x
x是输入,两者尺寸相同。
i
i
i是当前遍历位置,
j
j
j是所有可能的位置。
f
f
f计算位置
i
i
i和位置
j
j
j的联系(相似性等),并得到一个标量,
g
g
g是一元函数,得到输入
x
\mathbf x
x在位置
j
j
j的表征。
最终结果响应用
C
(
x
)
C(\mathbf x)
C(x)归一化。
应该能明显看出不是局部处理。
这个non-local处理和fc不同,fc中是训练好的权重,不是
x
i
,
x
j
\mathbf x_i,\mathbf x_j
xi,xj相关的函数。non-local尺寸可变,fc需要固定尺寸并且损失了输入输出对应位置的相关信息。
non-local的灵活性使它可以与很多结构结合,和局部操作结合后层信息将更丰富。
3.2 实例化
下面考虑 f f f和 g g g两个函数的形式:
为了简化,
g
g
g只考虑线性的情况,即
g
(
x
j
)
=
W
g
x
j
g(\mathbf x_j)=W_g\mathbf x_j
g(xj)=Wgxj,在这里,权重矩阵可以被理解为空间中的1×1卷积或者时空中的1×1×1卷积。
(我看了下论文和代码,个人的理解是:这里和下面做的都是整体操作)
假设最初
x
\mathbf x
x是
224
∗
224
∗
32
224*224*32
224∗224∗32的,分别对应长,宽,通道数
那经过
g
g
g的结果
g
(
x
)
g(\mathbf x)
g(x)就应该是
224
∗
224
∗
16
224*224*16
224∗224∗16的,也就是说
W
g
W_g
Wg的参数量是
1
∗
1
∗
16
1*1*16
1∗1∗16
f f f的话,文章里考虑了四种情况,注意下这里也都是整体操作就好。
1)高斯函数
f
(
x
i
,
x
j
)
=
e
x
i
T
x
j
(2)
f(\mathbf x_i,\mathbf x_j)=e^{\mathbf x_i^T \mathbf x_j} \tag 2
f(xi,xj)=exiTxj(2)
2)嵌入高斯函数(将离散变量转为连续变量)
f
(
x
i
,
x
j
)
=
e
θ
(
x
i
)
T
ϕ
(
x
j
)
(3)
f(\mathbf x_i,\mathbf x_j)=e^{\theta (\mathbf x_i)^T \phi (\mathbf x_j)} \tag 3
f(xi,xj)=eθ(xi)Tϕ(xj)(3)
在上述尺度下,这两个式子最终得到的
f
f
f都是
(
224
∗
224
)
∗
(
224
∗
224
)
(224*224)*(224*224)
(224∗224)∗(224∗224)的
f
f
f的第
i
i
i行,第
j
j
j列,就表示位置
i
i
i和
j
j
j的相似性,因此标量相乘就可以转化为向量内积的形式。以式(3)为例,算出来的结果可以看作:
f
=
e
θ
(
x
)
T
ϕ
(
x
)
(3’)
f=e^{\theta (\mathbf x)^T \phi (\mathbf x)} \tag{3’}
f=eθ(x)Tϕ(x)(3’)
其中,
x
\mathbf x
x的尺寸是
1
∗
(
224
∗
224
)
∗
32
1*(224*224)*32
1∗(224∗224)∗32,
θ
\theta
θ和
ϕ
\phi
ϕ和
W
g
W_g
Wg操作相同。
在归一化时,原文令
C
(
x
)
=
∑
∀
j
f
(
x
i
,
x
j
)
C(\mathbf x)=\sum_{\forall j}f(\mathbf x_i,\mathbf x_j)
C(x)=∑∀jf(xi,xj)
这两个式子带入到(1)可以视为自注意力机制的形式,即:
y
=
s
o
f
t
m
a
x
(
x
T
W
θ
T
W
ϕ
x
)
g
(
x
)
(4)
\mathbf y=softmax(\mathbf x^T W_\theta^T W_\phi \mathbf x)g(\mathbf x) \tag 4
y=softmax(xTWθTWϕx)g(x)(4)
其中,
s
o
f
t
m
a
x
(
x
)
=
[
e
x
1
∑
i
e
x
i
,
.
.
.
,
e
x
n
∑
i
e
x
i
]
(5)
softmax(x)=[\frac{e^{x_1}}{\sum_{i}{e^{x_i}}},...,\frac{e^{x_n}}{\sum_{i}{e^{x_i}}}] \tag 5
softmax(x)=[∑iexiex1,...,∑iexiexn](5)
x是一维行向量。
式(4)是对
x
T
W
θ
T
W
ϕ
x
\mathbf x^T W_\theta^T W_\phi \mathbf x
xTWθTWϕx这个
(
224
∗
224
)
∗
(
224
∗
224
)
(224*224)*(224*224)
(224∗224)∗(224∗224)矩阵的每一行做softmax,结果还是
(
224
∗
224
)
∗
(
224
∗
224
)
(224*224)*(224*224)
(224∗224)∗(224∗224)的,再和
(
224
∗
224
)
∗
16
(224*224)*16
(224∗224)∗16的
g
(
x
)
g(\mathbf x)
g(x)做点乘,最后生成
224
∗
224
∗
16
224*224*16
224∗224∗16的输出y。
(这里我有个小疑问, g ( x j ) g(\mathbf x_j) g(xj)的结果一定在0-1之间吗?因为softmax的结果就是和为1了,如果要保证y在0-1就必须要 g ( x j ) g(\mathbf x_j) g(xj)全部在0-1之间吧)
3)点积
f
(
x
i
,
x
j
)
=
θ
(
x
i
)
T
ϕ
(
x
j
)
(6)
f(\mathbf x_i,\mathbf x_j)=\theta (\mathbf x_i)^T \phi (\mathbf x_j) \tag{6}
f(xi,xj)=θ(xi)Tϕ(xj)(6)
4)串联
f
(
x
i
,
x
j
)
=
R
E
L
U
(
w
f
T
[
θ
(
x
i
)
,
ϕ
(
x
j
)
]
)
(7)
f(\mathbf x_i,\mathbf x_j)=RELU(\mathbf w_f^T[\theta (\mathbf x_i), \phi (\mathbf x_j)]) \tag{7}
f(xi,xj)=RELU(wfT[θ(xi),ϕ(xj)])(7)
这里[·,·]就代表了串联操作。
实在是没懂,我感觉应该是把两个行向量竖着拼一起啊,假设先不考虑向量,只考虑
θ
(
x
i
)
\theta(\mathbf x_i)
θ(xi)这两个都是数值的话,也应该是行向量和列向量内积才能转换成标量啊。
个人理解:
这步串联是把[]内部变成
2
∗
(
224
∗
224
)
2*(224*224)
2∗(224∗224)的尺度,
w
f
T
\mathbf w_f^T
wfT的尺度则是
(
224
∗
224
)
∗
2
(224*224)*2
(224∗224)∗2。不知道原意是什么样的。
总之后两种方法归一化的时候就简单取C=N,在我的例子里就是224*224,这样就不涉及softmax公式,没有引入自注意力机制,同时在求反向梯度时难度降低。
作者用不同的表达形式阐明了non-local的灵活性。
3.3 Non-local Block
这一部分主要是把3.2的式(3)抽出来,搭了一个基本的结构,上一部分也基本都解释了,不同之处就是最后加了个残差。原文的图比较简单,其他博客有细节图如下:
实际上,图中有一些小技巧:
其他公式也可以变换出来。
先降采样再上采样的bottleneck是为了提高计算效率,相似地,也可以利用子采样空间进行计算来降低计算量,例如在
ϕ
\phi
ϕ和
g
g
g的后面加maxpool(空间尺度缩小)。
这里残差表示为:
z
i
=
W
z
y
i
+
x
i
\mathbf z_i=W_z \mathbf y_i+\mathbf x_i
zi=Wzyi+xi
是为了在初始化权重矩阵
W
z
W_z
Wz为0时不会对原始模型
x
x
x产生影响。
具体实现上感觉多了挺多优化计算的地方,用矩阵的速度也不慢,挺值得学习的。
原文Figure2下面有这样一句有点奇怪:
The softmax operation is performed on each row.
理解为图中每条线都进行了softmax可能比较合适?虽然能解释之前我对 g g g的疑问,但是在代码里好像并未看到这样操作。
4 视频分类模型
处理视频分类问题,作者对比了2D卷积(C2D),膨胀3D网络(I3D),还有在它们里面加non-local结构的结果。
C2D结构如下:
I3D的膨胀方式为:
把3×3的kernel膨胀为3×3×3,1×1的kernel膨胀为3×1×1,每两个block膨胀一个kernel,conv1的核膨胀为5×7×7.
I3D的精确度高于CNN+LSTM。
实现细节
对预训练模型设置了一堆参数。
对non-local这部分权重参数,用MSRA初始化,做残差前的
W
z
W_z
Wz用卷积代替,在
W
z
W_z
Wz后面又加了BN层,BN的权重初始化为0,保证初始是个恒等映射。然后就可以随便加在别的地方了。
5 视频分类实验
在Kinetics和Charades两个数据集上都做了实验。
5.1 Kinetics数据集上的实验
文章结论自然是加non-local效果更优异,结果显示出比较重要的几个现象是:
1)non-local block个数越多,结果越好,并且不是因为它加深了网络,而是non-local在发挥着作用
2)四种
f
f
f的设计方法对结果影响并不大,也就是说self-attention应用于softmax的过程并没有那么重要,重要的是non-local本身
3)non-local加入位置越接近底层,感受的空间信息越少,发挥的优势越少,但是计算量小,计算速度快
4)non-local应用在时空的效果比单独的效果都要好
5)non-local C2D比I3D精确,计算量更少
6)non-local I3D比I3D精确,说明non-local和3D卷积是互补操作,可以共同作用
5.2 Charades数据集上的实验
non-local I3D最好。
6 COCO数据集实验
这部分实验需要注意的是,只加入1个non-local block的时候精度有所提高,但是数量越多,精度越低。
这篇文章网上也有很多分析,也有大佬尝试和自己的工作结合,感觉这种便于使用的模块确实可以自己试着写一个,至少把接口写好,想要用的时候就拿出来试试,没准就能派上用场呢。