论文分享[cvpr2018]Non-local Neural Networks非局部神经网络

论文 https://arxiv.org/abs/1711.07971

代码https://github.com/facebookresearch/video-nonlocal-net

 非局部神经网络

motivation:受计算机视觉中经典的非局部均值方法[4]的启发,非局部操作将位置的响应计算为所有位置的特征的加权和。

非局部均值方法 NLM(Non-local Means)滤波器是一种经典的图像去噪算法,基于图像中重复的局部结构,通过使用相似像素的加权平均来移除高斯噪声和其它噪声

NLM滤波器的基本思想是,在图像中寻找与当前像素周围区域的像素值相似的像素块,计算这些像素块与当前像素块之间的相似度。通过这些相似度计算权重,以这些块内的像素值作为两个像素点的相似性度量,对像素点进行加权平均,从而去除噪声。

核心思想:

 f 函数 计算xi 和和xi 有关的xj 的关系  (可以是相关性 ,自相关度)yi 输出信号

优越性与作用:捕获长距离依赖关系 如在图片中建立像素点与像素点 的关系 在视频中建立 帧与帧之间的联系,可以在计算机视觉领域其他任务的模型中插入非局部网络,而不需要其他复杂操作 达到比较好的效果,输入输出大小一致,即插即用

意义:CV 自注意力机制的核心文章,后面学者提出的注意力机制的模型 可以认为是本文特殊化的例子

摘要:

卷积和循环操作都是一次处理一个局部邻域的构建块。在本文中,我们将非局部操作作为通用构建块家族,用于捕获长距离依赖关系。受计算机视觉中经典的非局部均值方法[4]的启发,我们的非局部操作将位置响应的计算为所有位置的特征的加权和。这个构建块可以插入到许多计算机视觉架构中。在视频分类任务中,即使没有任何花里胡哨(without any bells and whistles),我们的非本地模型也可以在 Kinetics 和 Charades 数据集上竞争或优于当前的竞赛获胜者。在静态图像识别中,我们的非局部模型改进了COCO任务套件的目标检测/分割和姿态估计。

 位置响应是什么?当卷积核在图像上滑动并执行卷积操作时,它会与输入图像的不同区域进行加权求和,生成一个特征映射(Feature Map)。这个特征映射上的每个值都代表了卷积核对输入图像上相应位置的响应。在卷积神经网络中,位置响应是指卷积核对输入图像上不同位置的响应程度,它反映了输入图像中特定特征的存在和分布情况。

 1. 介绍

捕获远程依赖是深度神经网络的核心重要性。对于顺序数据(例如,在语音、语言中),循环操作 [38, 23] 是远程依赖建模的主要解决方案。对于图像数据,长距离依赖由卷积操作的深度堆栈形成的大感受野建模[14,30]。卷积和循环操作都处理局部邻域,无论是在空间还是时间;因此,只有当这些操作重复应用时,才能捕获长期依赖关系,从而通过数据逐步传播信号。重复本地操作有几个限制。首先,它的计算效率很低。其次,它会导致需要仔细解决的优化困难[23,21]。最后,这些挑战使得多跳依赖建模,例如,当需要在遥远的位置之间来回传递消息时困难。在本文中,我们提出了非局部操作作为一种有效的、简单和通用的组件,用于使用深度神经网络捕获远程依赖关系。我们提出的非局部操作是在计算机视觉中经典非局部均值运算[4]的推广。直观地说,非本地操作计算位置的响应为输入特征图中所有位置的特征的加权和(图 1)。位置集可以在空间、时间或时空中,这意味着我们的操作适用于图像、序列和视频问题。

使用非局部操作有几个优点:(a)与循环和卷积操作的渐进行为相比,非局部操作通过计算任意两个位置之间的交互直接捕获长期依赖关系,而不管它们的位置距离如何; (b) 正如我们在实验中所展示的,非本地操作是有效的,即使只有几个层(例如 5); (c) 最后,我们的非本地操作支持可变输入大小,并且可以很容易地与其他操作(例如,我们将使用的卷积)结合使用

我们展示了非局部操作在视频分类应用中的有效性。在视频中,远程交互发生在空间中的远距离像素和时间之间。单个非局部块作为我们的基本单元,可以直接以前馈方式捕获这些时空依赖关系。在一些非局部块的情况下,我们称为非局部神经网络的架构比 2D 和 3D 卷积网络 [48](包括膨胀的变体 [7])更准确地用于视频分类。此外,非局部神经网络比 3D 卷积神经网络在计算上更经济。在Kinetics[27]和Charades[44]数据集上进行了全面的消融研究。仅使用 RGB 且没有任何花里胡哨(例如光流、多尺度测试),我们的方法在两个数据集上都取得了与最新比赛获胜者相当或更好的结果。

为了证明非局部操作的普遍性,我们进一步在COCO数据集上进行了目标检测/分割和姿态估计实验[33]。在强Mask R-CNN基线的基础上[19],我们的非局部块可以以很小的额外计算成本提高所有三个任务的准确性。结合视频上的证据,这些图像实验表明非局部操作通常是有用的,可以成为设计深度神经网络的基本组成部分。

2. Related Work略 

3. Non-local Neural Networks

3.1. 公式化

遵循非局部均值运算[4],我们在深度神经网络中定义一个通用的非局部运算为:

这里 i 是要计算响应的输出位置(在空间、时间或时空中)的索引,。x 是输入信号(图像、序列、视频;通常它们的特征),yi 是与 x 相同大小的输出信号。成对函数 f 计算 i 和所有 j 之间的标量(表示关系,例如亲和力)一元函数 g 计算位置 j 处输入信号的表示响应由因子 C(x) 归一化。等式(1)中的非局部行为是由于操作中考虑了所有位置(∀j)。作为比较,卷积操作将局部邻域中的加权输入(例如,内核大小为 3 的 1D 情况下 i-1 ≤ j ≤ i + 1)和时间的一次循环操作相加,通常基于当前和最新的时间步长

非本地操作也与全连接 (fc) 层不同。等式(1)基于不同位置的关系计算响应,而 fc 使用学习的权重。换句话说,与非局部层不同,xj 和 xi 之间的关系不是 fc 中输入数据的函数。此外,我们在等式(1)中的公式支持可变大小的输入,并在输出中保持相应的大小。相反,fc 层需要固定大小的输入/输出并丢失位置对应关系(例如,从 xi 到 yi 在位置 i)。非本地操作是一个灵活的构建块,可以很容易地与卷积/循环层一起使用。它可以添加到深度神经网络的早期部分,不像最终经常使用的 fc 层。这使我们能够构建一个更丰富的层次结构,它结合了非本地和本地信息。

3.2.实例化

接下来我们描述 f 和 g 的几个版本。有趣的是,我们将通过实验(表 2a)证明我们的非本地模型对这些选择不敏感(对f和g 函数不敏感),这表明通用非本地行为是观察到的改进的主要原因。为简单起见,我们只考虑线性嵌入形式的 g:g(xj ) = Wg xj ,其中 Wg 是要学习的权重矩阵。这被实现为,例如空间中的 1×1 卷积或时空中的 1×1×1 卷积。接下来我们讨论成对函数 f 的选择。1.高斯。遵循非局部均值[4]和双边滤波器[47],f的自然选择是高斯函数。在本文中,我们考虑:

这里 xT i xj 是点积相似度。[4,47]中使用的欧几里得距离也适用,但点积在现代深度学习平台中更易于实现。归一化因子设置为 C(x) = ∑∀j f (xi, xj )

2.嵌入式高斯。高斯函数的一个简单扩展是计算嵌入空间中的相似度。在本文中,我们考虑:f (xi, xj) = eθ(xi)T φ(xj)。(3) 这里 θ(xi) = Wθ xi 和 φ(xj ) = Wφxj 是两个嵌入。如上所述,我们设置 C(x) = ∑∀j f (xi, xj)。我们注意到,最近提出的用于机器翻译的自注意力模块 [49] 是嵌入式高斯版本中非局部操作的一个特例。这可以从这样一个事实看出,对于给定的 i,成为沿维度 j 的 softmax 计算(这就是为什么现在很多计算通道注意力或者空间注意力用softmax 操作 原来不是计算得分,而是代表的f 函数)所以我们有

 图一

 

 这是[49] attention is all you need 中的自我注意形式。因此,我们的工作通过将最近的自我注意模型与非局部均值[4]的经典计算机视觉方法相结合来提供洞察力,并将[49]中的顺序自我注意网络扩展到计算机视觉中用于图像/视频识别的通用空间/时空非局部网络。尽管与 [49] 有关,但我们表明注意力行为(由于 softmax)在我们研究的应用程序中并不重要(也就是说f 函数是什么不重要,重要的是非局部这个操作。为了证明这一点,我们接下来描述了非本地操作的两个替代版本。——点积和Concatenation    实验结果相差不大

 

3.3. Non-local Block

我们将式(1)中的非本地操作包装成一个非本地块,可以合并到许多现有的体系结构中。我们将非局部块定义为:zi = Wz yi + xi,(6),其中yi在Eq.(1)中给出,“+xi”表示残差连接[21]。残差连接允许我们在任何预训练模型中插入一个新的非局部块,而不会破坏其初始行为(例如,如果 Wz 初始化为零)。图2显示了一个示例非本地块。式(2)、(3)或(4)中的两两计算可以简单地通过矩阵乘法来完成,如图2所示;(5)中的拼接版本很简单。当非局部块用于高级子采样特征图时,其成对计算是轻量级的。例如,图 2 中的典型值是 T = 4、H = W = 14 或 7。矩阵乘法所做的成对计算与标准网络中的典型卷积层相当。我们进一步采用了以下实现,使其更高效。

非本地块的实现。我们将 Wg 、 Wθ 和 Wφ 表示的通道数设置为 x 中通道数的一半。这遵循 [21] 的瓶颈设计,并将块的计算减少了大约一半。式(6)中的权重矩阵Wz计算yi上的位置嵌入,将通道数与x的通道数匹配。参见图2。子采样技巧可用于进一步减少计算。我们将等式(1)修改为:yi =1C(^x)∑∀j f (xi, ^xj )g(^xj ),其中 ^x 是 x 的子采样版本(例如,通过池化)。我们在空间域中执行此操作,可以将成对计算量减少 1/4。这个技巧不会改变非局部行为,但只会使计算更稀疏。这可以通过在图 2 中的 φ 和 g 之后添加一个最大池化层来完成。我们对本文研究的所有非本地块使用这些有效的修改。

4. 视频分类模型

为了理解非本地网络的行为,我们对视频分类任务进行了全面的消融实验。首先,我们描述了该任务的基线网络架构,然后将它们扩展到 3D ConvNets [48, 7] 和我们提出的非本地网络。

2D ConvNet 基线 (C2D)。为了隔离我们的非本地网络与3D ConvNets的时间效应,我们构建了一个简单的 2D 基线架构,其中时间维度被简单地解决(即,仅通过池化)。表 1 显示了我们在 ResNet-50 主干下的 C2D 基线。输入视频剪辑有 32 帧,每个帧有 224×224 像素。表 1 中的所有卷积本质上都是 2D 内核,它逐帧处理输入帧(实现为 1×k×k 内核)。该模型可以直接从 ImageNet 上预训练的 ResNet 权重初始化。ResNet-101 对应物以相同的方式构建。涉及时间域的唯一操作是池化层。换句话说,该基线简单地聚合时间信息。

膨胀的3D ConvNet (I3D)。如 [13, 7] 中所做的那样,可以通过“膨胀”内核将表 1 中的 C2D 模型转换为 3D 卷积对应物。例如,2Dk×k 内核可以膨胀为跨越帧的三维 t×k×k 内核。这个内核可以从 2D 模型初始化(在 ImageNet 上预训练):t×k×kkernel 中的每个 t 个平面都由预训练的 k×k 权重初始化,重新缩放 1/t。如果视频由随时间重复的单个静态帧组成,则此初始化产生的结果与在静态帧上运行的 2D 预训练模型相同。我们研究了两种情况膨胀:我们可以将残差块中的 3×3 内核膨胀为 3×3×3(类似于 [7]),或者残差块中的第一个 1×1 内核膨胀为 3×1×1(类似于 [13])。我们将这些表示为 I3D3×3×3 和 I3D3×1×1。由于 3D 卷积的计算量很大,我们只为每个 2 个残差块膨胀一个内核;膨胀更多的层显示出递减的回报。我们将conv1膨胀为5×7×7。[7]的作者表明,I3D模型比CNN+LSTM模型更准确。

Non-local network。我们将非本地块插入到 C2D 或 I3D 中,将它们转换为非局部网络。

图 3. res3 中非局部块的行为示例,由在 Kinetics 上训练的 5 块非局部模型计算。这些示例来自保留的验证视频。箭头的起点代表一个xi,终点代表xj。可视化每个xi的20个最高加权箭头。4帧来自 32 帧输入,步长为 8 帧。这些可视化显示了模型如何找到相关线索来支持其预测。

学习视频CVPR2018——Non-local Neural Networks 经典论文分享 Non-local机制 注意力机制_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/322169.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用keras识别狗狗

一、需求场景 从照片从识别出狗狗 from keras.applications.resnet50 import ResNet50 from keras.preprocessing import image from keras.applications.resnet50 import preprocess_input, decode_predictions import numpy as np# 加载预训练的ResNet50模型 model ResNet5…

Flask-HTTP请求、响应、上下文、进阶实验

本节主要目录如下: 一、请求响应循环 二、HTTP请求 2.1、请求报文 2.2、Request对象 2.3、在Flask中处理请求 2.4、请求钩子 三、HTTP响应 3.1、响应报文 3.2、在Flask中生成响应 3.3、响应格式 3.4、Cookie 3.5、session:安全的Cookie 四、…

【仪酷LabVIEW AI工具包案例】使用LabVIEW AI工具包+YOLOv5结合Dobot机械臂实现智能垃圾分类

‍‍🏡博客主页: virobotics(仪酷智能):LabVIEW深度学习、人工智能博主 🎄所属专栏:『仪酷LabVIEW AI工具包案例』 📑上期文章:『【YOLOv9】实战二:手把手教你使用TensorRT实现YOLOv…

数据结构学习——线性表、顺序表

1.线性表 线性表 ( linear list ) 是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连续的一…

项目管理-项目资源管理2/2

项目管理:每天进步一点点~ 活到老,学到老 ヾ(◍∇◍)ノ゙ 何时学习都不晚,加油 资源管理:6个过程“硅谷火箭管控” ①规划资源管理: 写计划 ②估算活动资源:估算团队资源&…

渗透之sql盲注(时间/boolean盲注)

sql盲注:sql盲注意思是我们并不能在web页面中看到具体的信息,我们只能通过输入的语句的真假来判断。从而拿到我们想要的信息。 我们通常使用ascii值来进行盲注。 目录 手动注入: 时间盲注: 布尔盲注: python脚本注…

LabVIEW波浪发电平台浮筒取能效率数据采集系统

LabVIEW波浪发电平台浮筒取能效率数据采集系统 随着化石能源的逐渐减少以及能源价格的上升,寻找可替代的、可再生的、清洁的能源成为了世界各国的共识。波浪能作为一种重要的海洋能源,因其巨大的潜力和清洁性,近年来受到了广泛关注。开发了一…

(六)JSP教程——out对象

out对象是在JSP中经常使用到的对象,它本质上是一个输出流,前面已经多次使用,我们经常使用它的print()和println()方法,这些方法主要用于实现客户端数据的输出。通过out对象也可以直接向客户端发送一个由程序动态生成的HTML文件。 …

Docker-Compose 容器集群的快速编排

Docker-compose 简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层,分别是 工程(project),服务(service)以及容器&…

JavaEE企业级开发中常用的JDK7和JDK8的时间类

JDK7时间类 全世界的时间有一个统一的计算标准 在同一条经线上的时间是一样的 格林威治时间 简称GMT 计算核心 地球自转一天是24小时 太阳直射正好是12小时 但是误差太大 现在用原子钟来代替 用铯原子震动的频率来计算时间,作为世界的标准时间UTC 中国标准时间…

在国企分公司做信息宣传新闻投稿的经验分享

作为一名国企分公司的信息宣传工作者,我亲历了从传统投稿方式到数字化转型的全过程,这段经历既充满了挑战,也收获了成长。回首最初的日子,那些用邮箱投稿的时光,至今仍让我感慨万千。 初尝辛酸,邮箱投稿的艰难岁月 刚接手信息宣传工作时,我满腔热情,却很快被现实的冷水浇了个透…

c语言实现贪吃蛇小游戏————附全代码!!!

目录 1.Win32 API 1.1控制台应用程序 1.2控制台的名称,控制台窗口大小 1.3设置控制台光标位置 COORD - 光标坐标 GetStdHandle - 获取句柄 SetConsoleCursorPosition - 设置光标位置 封装一个设置光标的函数 1.4设置控制台光标的属性 CONSOLE_CURSOR_INFO …

栈PART 1

目录 1. 栈 1.1 栈的概念和结构 1.2 栈的实现 1.2.1 栈的顺序储存结构 1.2.2 栈的基本操作 1.3 有效的括号 1. 栈 1.1 栈的概念和结构 堆栈又名栈(stack),它是一种运算受限的线性表。 限定仅在表尾进行插入和删除操作的线性表。这一端…

C++进阶之路:深入理解编程范式,从面向过程到面向对象(类与对象_上篇)

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

java-函数式编程-语法

目录 1、函数表现形式 分类 lambda表达式 参数类型可以全写,也可以全不写,但不能一部分写,一部分不写lambda 的省略策略:凡是可推导,都可以省略 方法引用 练习-判断语法正确性 练习-写出与方法引用等价的lambda表达式…

TCP三次握手四次挥手 UDP

TCP是面向链接的协议,而UDP是无连接的协议 TCP的三次握手 三次传输过程是纯粹的不涉及数据,三次握手的几个数据包中不包含数据内容。它的应用层,数据部分是空的,只是TCP实现会话建立,点到点的连接 TCP的四次挥手 第四…

VMware虚拟机提示内存不足

VMware虚拟机,k8s集群搭建内存不足的问题 疑问:我的电脑是8G8G双通道的内存,当我在搭建k8s集群时给master-2G内存,node1-3G内存,node2-3G内存; 当依次打开虚拟机到node2时VM提示“物理内存不足,…

【大学物理】双语合集听课笔记

7.5 angular momentu(角动量)_哔哩哔哩_bilibili 6.4Energy in Rotation Motion 有质量有速度的物体有动能,是不是很有道理 international system(from French systeme international,acronym,SI)of ineria kg*m^2 转…

使用 Cython 加密 Python 代码防止反编译

文章目录 前言使用 Cython 加密 Python 代码环境Python 源代码编写 Cython 编译配置文件 编译查看输出文件使用 问题error: Microsoft Visual C 14.0 or greater is requiredpyconfig.h(59): fatal error C1083: 无法打开包括文件: “io.h”: No such file or directorydynamic…

鸿蒙开发全攻略:华为应用系统如何携手嵌入式技术开启新篇章~

鸿蒙操作系统是华为自主创新的成果,打破了传统操作系统的局限。通过结合嵌入式技术,鸿蒙实现了跨平台、跨设备的高度融合,提供了流畅、智能的体验。华为应用系统与嵌入式技术的结合,提升了性能,丰富了用户体验。鸿蒙与…