Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
models
提交
68eef24e
M
models
项目概览
PaddlePaddle
/
models
大约 1 年 前同步成功
通知
222
Star
6828
Fork
2962
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
602
列表
看板
标记
里程碑
合并请求
255
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
models
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
602
Issue
602
列表
看板
标记
里程碑
合并请求
255
合并请求
255
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
68eef24e
编写于
4月 07, 2019
作者:
S
SunGaofeng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
modify on nonlocal/Readme
上级
7265a185
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
16 addition
and
16 deletion
+16
-16
PaddleCV/video/models/nonlocal_model/README.md
PaddleCV/video/models/nonlocal_model/README.md
+16
-16
未找到文件。
PaddleCV/video/models/nonlocal_model/README.md
浏览文件 @
68eef24e
...
@@ -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上的所有点相关联,能比C
NN提取到更加全局的信息。
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和R
NN提取到更加全局的信息。
详细信息请参考论文
[
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的方式不断迭代求解。
### Non
local B
lock
### Non
-local b
lock
采用类似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+x_i"
target=
"_blank"
><img
src=
"https://latex.codecogs.com/gif.latex?Z_i&space;=&space;W_zy_i+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+x_i"
target=
"_blank"
><img
src=
"https://latex.codecogs.com/gif.latex?Z_i&space;=&space;W_zy_i+x_i"
title=
"Z_i = W_zy_i+x_i"
/></a>
</p>
</p>
Non
local操作引入的部分与Resnet中的残差项类似,通过使用Nonlocal block,可以方便的在网络中的任何地方添加Nonlocal操作,而其他地方照样可以使用原始的预训练模型进行初始化。如果将Wz初始化为0,则跟不使用Non
local block的初始情形等价。
Non
-local操作引入的部分与Resnet中的残差项类似,通过使用Non-local block,可以方便的在网络中的任何地方添加Non-local操作,而其他地方照样可以使用原始的预训练模型进行初始化。如果将Wz初始化为0,则跟不使用Non-
local block的初始情形等价。
### 具体实现
### 具体实现
下图描述了Non-local
B
lock使用内嵌高斯形式关联函数的具体实现过程,
下图描述了Non-local
b
lock使用内嵌高斯形式关联函数的具体实现过程,
<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 B
lock
使用
Eembedded Gaussian关联函数的Non-local b
lock
</p>
</p>
g(Xj)是对输入feature map做一个线性变换,使用1x1x1的卷积;theta和phi也是线性变化,同样使用1x1x1的卷积来实现。从上图中可以看到,Non
local操作只需用到通常的卷积、矩阵相乘、加法、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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录