【深度网络】Non-local Neural Networks

放肆的年华 提交于 2019-11-27 14:40:09

原文链接:Non-local Neural Networks

博文参考了这篇博主的部分理解,传送门:KFXW


Motivation

作者主要是想解决non-local的问题。在目前的深度网络中,一系列的卷积层构成了深度网络的主要架构,每一层网络可以理解为用一个核在该层输入上做卷积操作,由于卷积核通常是1X1, 3X3这种固定的尺寸,这使得输出feature map只能感受到对应输入fearute map点上周围点的信息,当网络层数加深时,feature map的感受野才会慢慢增大。

这使得深度网络在融合非局部信息的时候,会有明显的不足。此外,对于时序性的任务(视屏,语音,文字)而言,深度网络很难融合时序上的信息,这对这些任务而言可以说是一种信息浪费。


Contribution

基于以上原因,作者受non-local means的启发,提出了一种非局部模块(non-local block),这种模块可以将同一图像上相隔很远的像素点联系起来,也可以将视频中前后几帧中同一空间的像素联系起来。


Non-local Neural Networks

首先看看文中对non-local 的定义:
这里写图片描述
对于图像而言,Xi,Xj表示两个像素点,f 用来度量二者之间的关系,g 是一个只与Xj有关的函数。作者表示 f 和 g 的选取有很多种,示例中选取的 f 是一个高斯函数
这里写图片描述
我的理解是可以认为 f 是一个相似性的度量,对与 Xi 相似的 Xj 给予更大权重。 g 是一个简单的乘法:这里写图片描述
C(x)相当于做了一个softmax。

non-local与卷积(conv)操作或者全连接(fc)的区别在与:
卷积操作每一层只能感知到卷积核大小区域的像素,所以是 local的。而fc只能做固定size的全连接,non-local可用于可变的size上,此外,non-local对空间上变化敏感,而fc是用学习得到的固定权值(不知道是不是这么理解)

这里写图片描述
这是从上面那个博主那扒来的一张图,详细解释了每一步操作对应的block中的结构,可以看到,整个non-local block可以嵌入在前向网络上,不会影响原始的主干网络。


Implementation

这里只简单记录一下在video上的实现,假如输入是TxHxWx1024的feature map,然后用tx1x1的核去做卷积,这里图片序列是要做padding的,具体是用 0 padding还是用图片padding不知道,没实验过。如果输出是一张图的feature map(1xHxWx1024),需要在输出后再做一个卷积。


Experiment

实验表格就不贴了,就是在各种model下普遍涨点,主要注意以下几个结论:
1. Non-Local block放入网络主干的位置:放在网络浅层性能提升更明显,高层提升作用下降。
2. 对视频任务而言,同时作用在时序和空间上(3D)比单独作用于时序或空间上要好。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!