NLN: 非局部神经网络

简介: 前面我们介绍了transformer的结构,这一篇是将transformer思想用于CV中的论文,创新点不多,值得写的地方也不多,但还是决定写一下,因为这篇论文可以用来给大家看看transformer用于CV会起到一些什么样的作用,以及transformer可以怎样用于CV中。 介绍transformer结构的时候提到了transformer最大的一个点是可以处理长距离的文本之间的联系,在CV中可以用于处理更大范围的感受野的信息,而不需要通过一层一层的堆叠卷积核来扩大感受野。在NLN中提出构建一个non-local block来实现这一点。

前面我们介绍了transformer的结构,这一篇是将transformer思想用于CV中的论文,创新点不多,值得写的地方也不多,但还是决定写一下,因为这篇论文可以用来给大家看看transformer用于CV会起到一些什么样的作用,以及transformer可以怎样用于CV中。


   介绍transformer结构的时候提到了transformer最大的一个点是可以处理长距离的文本之间的联系,在CV中可以用于处理更大范围的感受野的信息,而不需要通过一层一层的堆叠卷积核来扩大感受野。在NLN中提出构建一个non-local block来实现这一点。

 

Non-local Block

9d2732d9bc117440d8769c5c025a0ace.png

由于在CNN结构中使用3维张量,在transformer中求Q与K相似度时,计算是全连接的形式,在CV中若使用全连接将是H的四次方,计算量与参数量都将极为巨大。因此在降采样到4*7*7 或4*14*14时才使用Non-local Block。(T指的是时间维度上的维度大小)


其实按照我的理解,当feature maps只有14*14或7*7时,即便没有使用Non-local Block,CNN卷积核对这个大小的feature maps操作可获取的感受野也已经基本接近于全局感受野了,因此这里实际上已经退化成普通的CNN模型了,只不过比CNN模型多了一个计算各个位置上的相似度再进行加权的注意力作用罢了。换句话而言,Non-local Block在这里并没有扩大感受野,只起到了一个注意力模块的作用。


因此,我认为更合理的操作应该是上次解读的那篇论文FPT《feature pyramid transformer》的那三种方式。


注意,Non-local Block中使用了残差链接,这意味着可以把这个Block添加到一些现有的预训练的模型上,就像SElayer一样,因此这也是一个即插即用的模块。


   这一部分只是稍微介绍一下这个Block以及个人看法,下面部分才是写本文的出发点所在。


Transformer的作用


在图像识别领域,使用卷积核来提取空间、时间维度上的信息,提取信息后通过损失函数来回传梯度更新参数,因此,对于怎样提取高维度的语义信息这一过程是十分抽象的。它的目标是降低loss值,但怎样去降低并不明确。


在加入transformer的self-attention思想后,似乎给了模型一个稍微明确一点的方法去降低Loss值,即模型去寻找图像空间上局部的语义信息、non-local上相关性、前后帧内容上的相关性,这样可以使得准确率更高或者说损失函数更低。


因此,我认为在加入transformer后由于方法更明确一点,模型的效率会提升,可以需要更少的数据和更短的训练时间即可达到传统CNN模型的效果。

 

如下图所示,这是一个使用Non-Local Block模块的动作识别的应用,模型更加关注了那些跟该动作相关的局部区域,以及前后帧之间的相关性。如图二,该行为是一个人在打篮球,模型将注意点放在了球,球的轨迹,手和脚的运动变化上,而这一部分也正是识别这一行为的关键信息。


82a079abb6f11b3c74cca475ee021db0.png

85be19d8572e90bd29a651cffbfab26d.png

49ff7d82bd73463f87d442c9cf49c8ea.png

如有错误,欢迎留言指出.

 

相关文章
|
机器学习/深度学习 编译器 PyTorch
图神经网络通用框架 —— NLNN非局部神经网络
图神经网络通用框架 —— NLNN非局部神经网络
448 0
图神经网络通用框架 —— NLNN非局部神经网络
|
机器学习/深度学习 计算机视觉
非局部神经网络,打造未来神经网络基本组件
将非局部计算作为获取长时记忆的通用模块,提高神经网络性能在深度神经网络中,获取长时记忆(long-range dependency)至关重要。对于序列数据(例如语音、语言),递归运算(recurrent operation)是长时记忆建模的主要解决方案。
1218 0
|
机器学习/深度学习 计算机视觉
【何恺明最新论文】非局部神经网络,打造未来神经网络基本组件
何恺明又出论文了,这次与CMU和FAIR的几位作者合作,提出了“非局部神经网络”。受计算机视觉中的经典非局部均值方法的启发而来,非局部网络可以作为一个简单高效的通用模块,嵌入现有视觉模型中,实验证明能够提高图像及视频分类精度,用作者的话说,在视频分类任务上,即使没有任何花里胡哨的处理,我们的非局部模型也能在 Kinetics 和 Charades 数据集上获得与一些当前视觉竞赛的冠军模型相当乃至更好的效果。
2050 0
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch代码实现神经网络
这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。
|
4月前
|
机器学习/深度学习 数据可视化 Python
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
该博客展示了如何通过Python预处理神经网络权重矩阵并将其导出为表格,然后使用Chiplot网站来可视化神经网络的神经元节点之间的连接。
57 0
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
|
4月前
|
机器学习/深度学习 Linux TensorFlow
【Tensorflow+keras】用代码给神经网络结构绘图
文章提供了使用TensorFlow和Keras来绘制神经网络结构图的方法,并给出了具体的代码示例。
59 0
|
4月前
|
机器学习/深度学习 自然语言处理 TensorFlow

热门文章

最新文章