《Non-local Neural Networks》论文笔记

参考代码:video-nonlocal-net

1. 概述

导读:现有的CNN与RNN的网络都有很好的局部相关性(local),但是在一些任务中就需要网络具有较大的感受野范围,因而就需要一种non-local的表达形式来捕获较大范围的信息。这篇文章不同于之前的non-local的方法,它计算的是当前位置在全局中的加权和的形式。而且文章的结构是比较灵活的可以被移植到很多的网络结构中,或多或少地会带来性能的提升(其对于网络量化的影响就还需要进一步试验观察了),这篇文章的方法可以说是比较好的Attention方法了。

2. 方法设计

2.1 问题描述

这篇文章中将non-local的学习过程描述为下面的过程:
yi=1C(x)jf(xi,xj)g(xj)y_i=\frac{1}{C(x)}\sum_{\forall j}f(x_i,x_j)g(x_j)
其中,函数ff是两个输入的相关性计算,函数gg是输入的映射表达,之后C(x)=jf(xi,xj)C(x)=\sum_{\forall j}f(x_i,x_j)是归一化的参数。这里的操作带有全局属性的,并不同于卷积中局部的特性。

在计算两个输入相关性的时候有时会采用FC层的形式,这篇文章的方法与FC层的比较归纳为:

  • 1)文章的non-local的方法是基于不同位置的,而FC层是使用可学习的参数去映射两者之间的关系;
  • 2)文章的方法输出的是与输入尺寸相同的数据,且对输入输出的维度并没有限制。而FC中由于参数固化了,其对输入输出的维度是有限制的且对位置这样的关系并不敏感;

2.2 相关性函数

在上面的共识中存在两个函数f,gf,g,这两个是文章中的核心函数,分别用于计算两个输入的相似性和对输入进行映射。对此这里对两个函数的采样进行了实验并筛选出适合的相似性计算函数。

gg函数:
在文章中将这个函数固定为(核心就是相似性的计算函数):g(xj)=Wgxjg(x_j)=W_gx_j,这里对WgW_g使用111*1的卷积进行替换。

ff函数:
这个函数就是这篇文章的核心了,对此文章实验了很多相似性计算的方式如下:

  • 1)Gaussian:这里是使用高斯函数进行计算,相应的可以表示为:f(xi,xj)=exiTxjf(x_i,x_j)=e^{x_i^Tx_j}
  • 2)Embedded Gaussian:这里就是在上面的计算过程上给输入添加映射权重θ(xi)=Wθxi\theta(x_i)=W_{\theta}x_i,因而可以描述为:f(xi,xj)=eθ(xi)Tθ(xj)f(x_i,x_j)=e^{\theta(x_i)^T\theta(x_j)}
  • 3)Dot product:这里与前面的方法的区别就是去掉了底数,则表示为:f(xi,xj)=θ(xi)Tθ(xj)f(x_i,x_j)=\theta(x_i)^T\theta(x_j)
  • 4)Concatenation:这里就是将两个输入进行concat起来之后进行映射和**操作,其可以描述为:f(xi,xj)=ReLU(wfT[θ(xi)Tθ(xj)])f(x_i,x_j)=ReLU(w_f^T[\theta(x_i)^T\theta(x_j)])

至于这上面的几种相似性计算方式的性能可以参考下表所示:
《Non-local Neural Networks》论文笔记

2.3 Non-local模块

在完成输入样本的相似度计算之后,整体的non-local的框架可以描述为:
zi=Wzyi+xiz_i=W_zy_i+x_i
将其使用常用的操作进行表示可以描述为下图中的形式:
《Non-local Neural Networks》论文笔记

3. 实验结果

Kinetics性能:
《Non-local Neural Networks》论文笔记
其它任务上的性能:
《Non-local Neural Networks》论文笔记