Skip to content
TensorFlow implementation of Non-local Neural Network
Python
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
img
.DS_Store first commit Feb 21, 2019
Non_local_Net.py first commit Dec 11, 2018
README.md

README.md

《Non-local Neural Network》复现

  • Non-local Neural Network

  • 作者公开的源代码-caffe

  • 传统的卷积操作一次只是处理的一个局部邻域(local neighborhood),没有考虑到其他位置的像素对其输出的影响。这篇文章呈现的non-local操作能够捕获远距离的像素之间的依赖关系(long-range dependencies

  • non-local公式如下: $$ y_i = \frac{1}{C(x)}\sum_jf(x_i,x_j)g(x_j) $$ 以图像为例,$i, j$为像素位置,$f(·)$表示$i$和$j$之间的关联系数,也可以说是权重,$g(·)$表示像素j的信息,$C(x)$为归一化系数,整个公式表示遍历所有的点$j$,以$f$为权重,将信息$g$进行加权求和

  • 输入和输出尺寸相同

  • non-local对f和g的形式不敏感

  • Non-local block结构如下:

    non-loca.png

  • 这个结构设置通道的数量为输入x通道数的一半,这样可以减少计算量,然后通过Wz的来让输出Z跟输出X通道数保持一致,这点参考了ResNetbottleneck设计

  • 这个结构实现起来不复杂,文章这个block添加到ResNet50中,分别添加1(to res4)、5(3 to res4 and 2 to res3)、10个(to every residual block in res3 and res4non-local block

  • 论文做的是视频分类,该代码做的实现的是在MNIST数据集上的分类,添加10个non-local blockResNet50

  • 由于采用ResNet50,网络的输入尺寸为224x224,所以为了匹配尺寸,强行将28x28pad为224x224,纯粹是为了尺寸的匹配

  • 计算图:

    graph

  • MNIST上训练结果:

    screenshot

accuracy

loss

You can’t perform that action at this time.