Non-local Neural Networks

论文地址:https://arxiv.org/abs/1711.07971v1

问题背景:

由于经典的卷积和循环神经网络每次都只是针对局部 local neighborhood 进行处理,比如卷积操作只关注局部感受野(也就是卷积核覆盖的局部范围)的信息,这是典型的local operation,如果要增大神经元的感受野,你可能会想到将卷积核的大小设置成 feature map的尺寸,这样就能感受到全局的信息了。但是如果这样做的话,会大大增加计算量。现在的做法一般是堆叠的卷积层和池化层来实现,但是这样计算量和复杂度都会增加,并且feature map的尺寸会较小。

所以如何提取远距离像素点(long-range)的关系? 这个问题应运而生。

为了更好地说明问题,请看下面的叙述:

假设有一个 3×3 的卷积核,那我们的每一个激活值就只与这 9 个点的值有关,所以也就是局部(local)的。所谓非局部(non-local),也就是说,每一个激活值可能不至与它相邻近的点有关,还可能与离它比较远的点也有关。比如下面第一帧的球,就与后两帧的球相关。
在这里插入图片描述因此,作者提出的非局部操作(non-local operation computes)计算某一位置的响应为所有位置特征的加权和,这些位置可以是空间的、时间的或者时空的。比如上面的例子就是时空的。

non-local operation的几个优点:
(a)与循环和卷积操作的渐进行为相反,non-local operation通过计算任意两个位置之间的相互关系直接捕获远程依赖性,而不管它们的位置距离如何;
(b)非常有效,即使只有几层(例如5)也能达到最佳效果;
(c)最后,non-local operation保持可变的输入大小,并且可以很容易地与其他操作组合(例如卷积)。

网络构架

在这里插入图片描述
按照非局部均值的定义,我们定义在深度神经网络中的non-local操作如上式:
其中x表示输入信号(图片,序列,视频等,也可能是它们的features map),y表示输出信号,其size和x相同。f(xi,xj)用来计算i和所有可能关联的位置j之间pairwise的关系,这个关系可以是比如i和j的位置距离越远,f值越小,表示j位置对i影响越小。g(xj)用于计算输入信号在j位置的特征值。C(x)是归一化参数。

理解
C(x)为固定的一个函数,用来做标准化

f(x_i, x_j)是计算相关性(计算每个像素和全部位置像素的相关性。)的函数,作为一个加权系数。

g(x_j)为对输入feature的操作。

y_i得到attention的第i位置的特征

对比:
1与现有的堆积卷积操作进行对比: conv 操作是对一个局部邻域内的特征值进行加权求和,比如kernel size=3时,i−1≤j≤i+1。 recurrent的操作则是i时刻的值仅基于当前时刻或前一时刻(j=i or i-1)。而这里的non-local计算的是某一点像素 i 和所有像素 j 之间的相似性,注意这里的 j 是遍历整个features map 上所有的像素点的。

2 non-local操作与fc(a fully-connected layer)的区别:

  1. 本文中所提到的计算俩点关联度的函数是基于不同位置的。而fc是需要通过学习而获得。
  2. non-local operation 可以应对不同大小的输入而且可以保证输出和输入大小一致。而fc层则只能有固定大小的输入输出。所以可以很灵活的嵌入到现有的网络中间去。

具体实现方法:
将f函数和g函数实例化。
但是实验显示f和g函数的改变对non-local的结果并没有太大影响,表明non-local这个行为才是主要的提升因素。
那么为了方便起见,我们只是考虑g是线性情况,即
在这里插入图片描述其中Wg是一个可学的权重矩阵,实际中是通过空间域的 11conv或时空域的 11*1 conv实现的。

下面介绍一下常用的f的不同形式。

Gaussian:从非局部均值和双边滤波器来看,常见的f是高斯函数,其中xTi 和xj是点乘相似度(dot-product similarity)。也可以用欧式距离,但是点乘在深度学习平台上更好实现。此时归一化参数C(x)=∑∀j f(xi,xj)

在这里插入图片描述Embedded Gaussian:在这里插入图片描述Dot product:在这里插入图片描述Concatenation: Concat是在Relation Networks 中用到的pairwise function。我们也给出了一个concat形式的f,其中wf是能够将concat的向量转换成一个标量的权重向量。这里设置C(x)=N如下:
在这里插入图片描述
以上是四种不同的f函数,用来计算第i个像素与所有的j上的像素的相关性。

经过上面的步骤我们就可以得到一个yi,将non-local操作变形成一个non-local block,以便其可以被插入到已有的结构中。然后与原来的特征图相加就得到一个新的输出Zi。
在这里插入图片描述一个示例的non-local block如图所示,我们看到式(2),(3),(4)中的这些pairwise function可以通过矩阵乘法来进行,(5)则可以直接concat得到。
在这里插入图片描述
图片来自博客

以上为Non-local Neural Networks的核心算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值