Non-local操作是晚期self-attention在视觉工作上的尝试,外围在于按照类似度加权其它特色对以后特色进行加强,实现形式非常简洁,为后续的很多相干钻研提供了参考
起源:晓飞的算法工程笔记 公众号
论文: Non-local Neural Networks
- 论文地址:https://arxiv.org/abs/1711.07971
- 论文代码:https://github.com/facebookresearch/video-nonlocal-net
Introduction
卷积操作通常在部分区域进行特征提取,想要获取范畴更广的特色信息须要反复进行卷积操作来取得,这样不仅耗时还减少了训练难度。为此,论文提出高效的non-local操作,将特色图上的特色点示意为所有特色点的加权和,用于捕获覆盖范围更广的特色信息。non-local操作也能够用于含时序的工作中,如图1的视频分类工作,可综合几帧的特色来加强以后帧的特色。
non-local操作次要有以下长处:
- 绝对于叠加卷积的操作,non-local可通过特色点间的交互间接捕获更广的特色信息。
- 从试验后果来看,简略地嵌入几层non-local操作就能高效地晋升网络性能。
- non-local操作反对可变输出,可很好地与其它网络算子配合。
Non-local Neural Networks
Formulation
首先定义通用的non-local操作:
$i$为特色图上将要计算特征值的地位坐标,$j$为特色图上的所有地位坐标,$x$为对应地位上的输出特色,$y$为加强后的输入,$f$计算$i$和$j$之间的相似性,$g$则用于对$j$的特色进行转化,$\mathcal{C}$用于对输入进行归一化。
简而言之,non-local的外围就是计算以后地位的特色与特色图所有特色间的相似性,而后依据相似性对所有特色加权输入。绝对于卷积和全连贯等参数固定的操作,non-local更加灵便。
Instantiations
在实现时,函数$f$和函数$g$的抉择很多。为了简便,函数$g$抉择为线性变换$g(x_j)=W_gx_j$,$W_g$为可学习的权重矩阵,个别为$1\times 1$的卷积。而函数$f$则能够有以下抉择(论文通过试验发现函数$f$的具体实现影响不大):
Gaussian
$x^T_i x_j$为点积类似度,也可采纳欧氏间隔,$\mathcal{C}(x)={\sum}_{\forall j}f(x_i, x_j)$,归一化相似于softmax操作。
Embedded Gaussian
$\theta(x_i)=W_{\theta}x_i$和$\phi(x_j)=W_{\phi}x_j$为两个线性变换,$\mathcal{C}(x)={\sum}_{\forall j}f(x_i, x_j)$,这个实现与self-attention非常靠近。
Dot product
先线性变换,而后通过点积计算类似度,$\mathcal{C}(x)=N$,有助于简化梯度计算。
Concatenation
间接将特色conate起来,通过权重向量$w^T_f$转化为标量输入,$\mathcal{C}(x)=N$。
Non-local Block
将公式1的non-local操作批改成non-local block,可插入到以后的网络架构中,non-local block的定义为:
公式6将non-local操作的输入线性变换后与原特色进行相加,相似于residual block的嵌入形式。
non-local block的一种实现形式如图2所示,首先对$x$进行3种不同的线性变换,而后依照公式1失去输入特色,再与原特色进行相加,基本上跟self-attention是一样的。
Experiment
各种比照试验,表2a为函数$f$的实现比照,能够看到影响不是很大。
视频分类比照。
COCO上的宰割、检测、关键点比照。
Conclusion
Non-local操作是晚期self-attention在视觉工作上的尝试,外围在于按照类似度加权其它特色对以后特色进行加强,实现形式非常简洁,为后续的很多相干钻研提供了参考。
如果本文对你有帮忙,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】