提交 68eef24e 编写于 作者: S SunGaofeng

modify on nonlocal/Readme

上级 7265a185
...@@ -13,13 +13,13 @@ ...@@ -13,13 +13,13 @@
## 模型简介 ## 模型简介
Non-local Neural Networks是由Xiaolong Wang等研究者在2017年提出的模型,主要特点是通过引入关联函数来描述视频或者图像中像素点之间的非局域关联特性。在神经网络中,通常采用CNN或者RNN操作来增加空间或者时间邻域内的感受野,从而使得在神经网络的前向传播过程中,feature map上的像素点能够具有更多的全局信息。然而,经过一次CNN操作,输出feature map上的像素点,也只能获取其相应的感受野之内的信息,为了获得更多的上下文信息,就需要做多次卷积操作,以提升感受野的大小。Non-local模型引入了一种提取全局关联信息的方式,通过定义Nonlocal关联函数,输出feature map上的像素点,会跟输入feature map上的所有点相关联,能比CNN提取到更加全局的信息。 Non-local Neural Networks是由Xiaolong Wang等研究者在2017年提出的模型,主要特点是通过引入Non-local操作来描述距离较远的像素点之间的关联关系。提取大范围内数据点之间的关联关系,一直是一个比较重要的问题。对于序列化数据,比如语音、视频等,比较主流的做法是使用循环神经网络(RNN);对于图片来说,通常使用卷积神经网络(CNN)来提取像素之间的依赖关系。然而,CNN和RNN都只是在其空间或者时间的很小的邻域内进行特征提取,很难捕捉到距离更远位置的数据的依赖关系。借助于传统计算机视觉中的Non-local mean的思想,并将其扩展到神经网络中,通过定义输出位置和所有输入位置之间的关联函数,建立起了一种具有全局关联特性的操作,输出feature map上的每个位置,都会受到输入feature map上所有位置的数据的影响。在CNN中,经过一次卷积操作,输出feature map上的像素点,只能获取其相应的感受野之内的信息,为了获得更多的上下文信息,就需要做多次卷积操作。然而在Non-local操作中,每个输出点的感受野都相当于整个输入feature map区域,能比CNN和RNN提取到更加全局的信息。
详细信息请参考论文[Non-local Neural Networks](https://arxiv.org/abs/1711.07971v1) 详细信息请参考论文[Non-local Neural Networks](https://arxiv.org/abs/1711.07971v1)
### Nonlocal操作 ### Non-local操作
Nonlocal 关联函数的定义如下 Non-local 关联函数的定义如下
<p align="center"> <p align="center">
<a href="https://www.codecogs.com/eqnedit.php?latex=y_{i}=\frac{1}{C(x)}&space;\sum_{j}f(x_i,&space;x_j)g(x_j)" target="_blank"><img src="https://latex.codecogs.com/gif.latex?y_{i}=\frac{1}{C(x)}&space;\sum_{j}f(x_i,&space;x_j)g(x_j)" title="y_{i}=\frac{1}{C(x)} \sum_{j}f(x_i, x_j)g(x_j)" /></a> <a href="https://www.codecogs.com/eqnedit.php?latex=y_{i}=\frac{1}{C(x)}&space;\sum_{j}f(x_i,&space;x_j)g(x_j)" target="_blank"><img src="https://latex.codecogs.com/gif.latex?y_{i}=\frac{1}{C(x)}&space;\sum_{j}f(x_i,&space;x_j)g(x_j)" title="y_{i}=\frac{1}{C(x)} \sum_{j}f(x_i, x_j)g(x_j)" /></a>
...@@ -27,25 +27,25 @@ Nonlocal 关联函数的定义如下 ...@@ -27,25 +27,25 @@ Nonlocal 关联函数的定义如下
在上面的公式中,x表示输入feature map, y表示输出feature map,i是输出feature map的位置,j是输入feature map的位置,f(xi, xj)描述了输出点i跟所有输入点j之间的关联,C是根据f(xi, xj)选取的归一化函数。g(xj)是对输入feature map做一个变换操作,通常可以选取比较简单的线性变换形式;f(xi, xj)可以选取不同的形式,通常可以使用如下几种形式 在上面的公式中,x表示输入feature map, y表示输出feature map,i是输出feature map的位置,j是输入feature map的位置,f(xi, xj)描述了输出点i跟所有输入点j之间的关联,C是根据f(xi, xj)选取的归一化函数。g(xj)是对输入feature map做一个变换操作,通常可以选取比较简单的线性变换形式;f(xi, xj)可以选取不同的形式,通常可以使用如下几种形式
#### 高斯式 #### Gaussian
<p align="center"> <p align="center">
<a href="https://www.codecogs.com/eqnedit.php?latex=f(x_i,&space;x_j)&space;=&space;e^{x_i^Tx_j},&space;\qquad&space;C(x)&space;=&space;\sum_{j}f(x_i,&space;x_j)" target="_blank"><img src="https://latex.codecogs.com/gif.latex?f(x_i,&space;x_j)&space;=&space;e^{x_i^Tx_j},&space;\qquad&space;C(x)&space;=&space;\sum_{j}f(x_i,&space;x_j)" title="f(x_i, x_j) = e^{x_i^Tx_j}, \qquad C(x) = \sum_{j}f(x_i, x_j)" /></a> <a href="https://www.codecogs.com/eqnedit.php?latex=f(x_i,&space;x_j)&space;=&space;e^{x_i^Tx_j},&space;\qquad&space;C(x)&space;=&space;\sum_{j}f(x_i,&space;x_j)" target="_blank"><img src="https://latex.codecogs.com/gif.latex?f(x_i,&space;x_j)&space;=&space;e^{x_i^Tx_j},&space;\qquad&space;C(x)&space;=&space;\sum_{j}f(x_i,&space;x_j)" title="f(x_i, x_j) = e^{x_i^Tx_j}, \qquad C(x) = \sum_{j}f(x_i, x_j)" /></a>
</p> </p>
#### 内嵌高斯式 #### Embedded Gaussian
<p align="center"> <p align="center">
<a href="https://www.codecogs.com/eqnedit.php?latex=f(x_i,&space;x_j)&space;=&space;e^{{\theta(x_i)}^T\phi(x_j)},&space;\qquad&space;C(x)&space;=&space;\sum_{j}f(x_i,&space;x_j)" target="_blank"><img src="https://latex.codecogs.com/gif.latex?f(x_i,&space;x_j)&space;=&space;e^{{\theta(x_i)}^T\phi(x_j)},&space;\qquad&space;C(x)&space;=&space;\sum_{j}f(x_i,&space;x_j)" title="f(x_i, x_j) = e^{{\theta(x_i)}^T\phi(x_j)}, \qquad C(x) = \sum_{j}f(x_i, x_j)" /></a> <a href="https://www.codecogs.com/eqnedit.php?latex=f(x_i,&space;x_j)&space;=&space;e^{{\theta(x_i)}^T\phi(x_j)},&space;\qquad&space;C(x)&space;=&space;\sum_{j}f(x_i,&space;x_j)" target="_blank"><img src="https://latex.codecogs.com/gif.latex?f(x_i,&space;x_j)&space;=&space;e^{{\theta(x_i)}^T\phi(x_j)},&space;\qquad&space;C(x)&space;=&space;\sum_{j}f(x_i,&space;x_j)" title="f(x_i, x_j) = e^{{\theta(x_i)}^T\phi(x_j)}, \qquad C(x) = \sum_{j}f(x_i, x_j)" /></a>
</p> </p>
#### 内积式 #### Dot product
<p align="center"> <p align="center">
<a href="https://www.codecogs.com/eqnedit.php?latex=f(x_i,&space;x_j)&space;=&space;\theta(x_i)^T\phi(x_j),&space;\qquad&space;C(x)&space;=\mathit{N}" target="_blank"><img src="https://latex.codecogs.com/gif.latex?f(x_i,&space;x_j)&space;=&space;\theta(x_i)^T\phi(x_j),&space;\qquad&space;C(x)&space;=\mathit{N}" title="f(x_i, x_j) = \theta(x_i)^T\phi(x_j), \qquad C(x) =\mathit{N}" /></a> <a href="https://www.codecogs.com/eqnedit.php?latex=f(x_i,&space;x_j)&space;=&space;\theta(x_i)^T\phi(x_j),&space;\qquad&space;C(x)&space;=\mathit{N}" target="_blank"><img src="https://latex.codecogs.com/gif.latex?f(x_i,&space;x_j)&space;=&space;\theta(x_i)^T\phi(x_j),&space;\qquad&space;C(x)&space;=\mathit{N}" title="f(x_i, x_j) = \theta(x_i)^T\phi(x_j), \qquad C(x) =\mathit{N}" /></a>
</p> </p>
#### 拼接式 #### Concatenation
<p align="center"> <p align="center">
<a href="https://www.codecogs.com/eqnedit.php?latex=f(x_i,&space;x_j)&space;=&space;ReLU(w_f^T[\theta(x_i),\phi(x_j)]),&space;\qquad&space;C(x)&space;=\mathit{N}" target="_blank"><img src="https://latex.codecogs.com/gif.latex?f(x_i,&space;x_j)&space;=&space;ReLU(w_f^T[\theta(x_i),\phi(x_j)]),&space;\qquad&space;C(x)&space;=\mathit{N}" title="f(x_i, x_j) = ReLU(w_f^T[\theta(x_i),\phi(x_j)]), \qquad C(x) =\mathit{N}" /></a> <a href="https://www.codecogs.com/eqnedit.php?latex=f(x_i,&space;x_j)&space;=&space;ReLU(w_f^T[\theta(x_i),\phi(x_j)]),&space;\qquad&space;C(x)&space;=\mathit{N}" target="_blank"><img src="https://latex.codecogs.com/gif.latex?f(x_i,&space;x_j)&space;=&space;ReLU(w_f^T[\theta(x_i),\phi(x_j)]),&space;\qquad&space;C(x)&space;=\mathit{N}" title="f(x_i, x_j) = ReLU(w_f^T[\theta(x_i),\phi(x_j)]), \qquad C(x) =\mathit{N}" /></a>
...@@ -57,32 +57,32 @@ Nonlocal 关联函数的定义如下 ...@@ -57,32 +57,32 @@ Nonlocal 关联函数的定义如下
</p> </p>
上述函数形式中的参数可以使用随机初始化的方式进行赋值,在训练过程中通过End-2-End的方式不断迭代求解。 上述函数形式中的参数可以使用随机初始化的方式进行赋值,在训练过程中通过End-2-End的方式不断迭代求解。
### Nonlocal Block ### Non-local block
采用类似Resnet的结构,定义如下的Nonlocal block 采用类似Resnet的结构,定义如下的Non-local block
<p align="center"> <p align="center">
<a href="https://www.codecogs.com/eqnedit.php?latex=Z_i&space;=&space;W_zy_i&plus;x_i" target="_blank"><img src="https://latex.codecogs.com/gif.latex?Z_i&space;=&space;W_zy_i&plus;x_i" title="Z_i = W_zy_i+x_i" /></a> <a href="https://www.codecogs.com/eqnedit.php?latex=Z_i&space;=&space;W_zy_i&plus;x_i" target="_blank"><img src="https://latex.codecogs.com/gif.latex?Z_i&space;=&space;W_zy_i&plus;x_i" title="Z_i = W_zy_i+x_i" /></a>
</p> </p>
Nonlocal操作引入的部分与Resnet中的残差项类似,通过使用Nonlocal block,可以方便的在网络中的任何地方添加Nonlocal操作,而其他地方照样可以使用原始的预训练模型进行初始化。如果将Wz初始化为0,则跟不使用Nonlocal block的初始情形等价。 Non-local操作引入的部分与Resnet中的残差项类似,通过使用Non-local block,可以方便的在网络中的任何地方添加Non-local操作,而其他地方照样可以使用原始的预训练模型进行初始化。如果将Wz初始化为0,则跟不使用Non-local block的初始情形等价。
### 具体实现 ### 具体实现
下图描述了Non-local Block使用内嵌高斯形式关联函数的具体实现过程, 下图描述了Non-local block使用内嵌高斯形式关联函数的具体实现过程,
<p align="center"> <p align="center">
<img src="../../images/nonlocal_instantiation.png" height=488 width=585 hspace='10'/> <br /> <img src="../../images/nonlocal_instantiation.png" height=488 width=585 hspace='10'/> <br />
使用内嵌高斯形式关联函数的Non-local Block 使用Eembedded Gaussian关联函数的Non-local block
</p> </p>
g(Xj)是对输入feature map做一个线性变换,使用1x1x1的卷积;theta和phi也是线性变化,同样使用1x1x1的卷积来实现。从上图中可以看到,Nonlocal操作只需用到通常的卷积、矩阵相乘、加法、softmax等比较常用的算子,不需要额外添加新的算子,用户可以非常方便的实现组网构建模型。 g(Xj)是对输入feature map做一个线性变换,使用1x1x1的卷积;theta和phi也是线性变化,同样使用1x1x1的卷积来实现。从上图中可以看到,Non-local操作只需用到通常的卷积、矩阵相乘、加法、softmax等比较常用的算子,不需要额外添加新的算子,用户可以非常方便的实现组网以构建模型。
### 模型效果 ### 模型效果
原作者的论文中指出,Nonlocal模型在视频分类问题上取得了较好的效果,在Resnet-50基础网络上添加Non-local block,能取得比Resnet-101更好的分类效果,TOP-1准确率要高出1~2个百分点。在图像分类和目标检测问题上,也有比较明显的提升效果。 原作者的论文中指出,Non-local模型在视频分类问题上取得了较好的效果,在Resnet-50基础网络上添加Non-local block,能取得比Resnet-101更好的分类效果,TOP-1准确率要高出1~2个百分点。在图像分类和目标检测问题上,也有比较明显的提升效果。
## 数据准备 ## 数据准备
Non-local模型的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集。数据下载及准备请参考Nonlocal模型的[数据说明](../../dataset/nonlocal/README.md) Non-local模型的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集。数据下载及准备请参考Non-local模型的[数据说明](../../dataset/nonlocal/README.md)
## 模型训练 ## 模型训练
...@@ -161,5 +161,5 @@ Non-local模型的训练数据采用由DeepMind公布的Kinetics-400动作识别 ...@@ -161,5 +161,5 @@ Non-local模型的训练数据采用由DeepMind公布的Kinetics-400动作识别
## 参考论文 ## 参考论文
- [Nonlocal Neural Networks](https://arxiv.org/abs/1711.07971v1), Xiaolong Wang, Ross Girshick, Abhinav Gupta, Kaiming He - [Non-local Neural Networks](https://arxiv.org/abs/1711.07971v1), Xiaolong Wang, Ross Girshick, Abhinav Gupta, Kaiming He
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册