论文分享[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.mzph.cn/news/833974.shtml

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

相关文章

男士内裤什么牌子的好?男士内裤五大排名品牌推荐

夏天快到了,你是不是在为内裤不够舒适透气、质量不好而困扰呢?现在市面上的男士内裤品牌众多,而且还有各种材质的分类,让大家一时也不知道该选什么好。 那么最近我也是特别购置了近期热门的几个男士内裤品牌进行测评,今…

在线教育系统开发流程设计,如何选择教育类app?有哪些优势呢?

教育培训APP是为培训机构搭建的一个智能化、个性化、信息化的网络展示平台。在线教育春天真的来了吗?据调查,我国网民规模达8.02亿,普及率57.7%。其中,手机网民规模已达7.88亿,中国APP开发数量更是超过美国成为全球第一。如何选择…

(十六)Servlet教程——Servlet文件下载

Servlet文件下载 文件下载是将服务器上的资源下载到本地,可以通过两种方式来下载服务器上的资源。第一种是使用超链接来下载,第二种是通过代码来下载。 超链接下载 在HTML或者JSP页面中使用超链接时,可以实现页面之间的跳转,但是…

如何使用google.protobuf.Struct?

google.golang.org/protobuf/types/known/structpb 包提供了一种方式来创建和操作 google.protobuf.Struct 类型的数据。google.protobuf.Struct 是一种灵活的数据类型,可以表示任何结构化数据。 以下是如何使用 structpb 包的一些示例: 创建 Struct&a…

RK3568 学习笔记 : Linux emmc 内核启动 rootfs 根文件系统无法正常挂载问题的分析

问题描述 平台 : NanoPi-R5C 开发板 RK3568 平台。 手动编译的 Linux 内核,结果发现大概率 emmc 无法正常初始化,导致 rootfs 根文件系统无法正常挂载 Linux 内核版本: 6.1 Linux 内核代码位置: https://github.com…

Sql语法1

数据库语言大概可以分为四大类 1、DML:(Database Manipulation Language):insert,update,delete 2、DQL:(Database Query Language):select 3、DCL:(Database Control Langu…

第2章 WebServer进阶

2.1 使用多线程处理多用户请求 2.1.1 多线程Socket通信 在上一章的案例中,服务端显然只能处理一次浏览器请求,请求一次浏览器端就结束程序。如何解决这个问题呢?可以采用多线程Socket通信技术,解决多用户并发请求。 在多线程Sock…

从谚语:“一手交钱,一手交货来”谈谈什么是数据库事务

事务与交易 一手交钱,一手交货 一手交钱,一手交货,谚语,意思是指钱和货当场相交,互不拖欠。出自明朝施耐庵《水浒传》第二一回。 Transaction 意思 我们先来看一下来自于剑桥英-英词典的解释: transac…

matlab中interp2函数应用

interp2 函数在 MATLAB 中用于进行二维插值。当使用 nearest 选项时,它会执行最近邻插值,即对于给定的目标点,函数将选择网格中距离其最近的点的值作为该目标点的插值结果。 以下是 interp2 函数在 nearest 模式下的用法示例,以及…

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 四、…

企业车辆管理系统参考论文(论文 + 源码)

【免费】关于企业车辆管理系统.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89282550 企业车辆管理系统 摘 要 随着经济的日益增长,车辆作为最重要的交通工具,在企事业单位中得以普及,单位的车辆数目已经远远不止简单的几辆,与此同时就产生了车辆资源的合理…

Codeforces Round 940 (Div. 2) and CodeCraft-23 D. A BIT of an Inequality

A BIT of an Inequality 题目描述 给你一个数组 a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1​,a2​,…,an​ 。求这样的图元( x , y , z x, y, z x,y,z )的个数: 1 ≤ x ≤ y ≤ z ≤ n 1 \leq x \leq y \leq z \leq n 1≤x≤y≤z≤…

汽车灯罩一般都是用什么材质做的?汽车车灯的灯罩如果破损破裂破洞了要怎么修复?

汽车灯罩一般都是用什么材质做的? 汽车灯罩一般使用的主要材质是聚碳酸酯(PC)和丙烯酸酯(PMMA)这两种塑料。这两种材料具有良好的透明性、耐候性和耐冲击性,因此非常适合用于汽车灯罩的制造。 聚碳酸酯&am…

小程序支付的款项流转与到账时间

商家做小程序,最关心的是客户通过小程序下单支付的钱,是怎么样的流转状态以及最终到哪里。因此,本文将详细解析款项最终流向何处以及多久能够到账。 一、小程序支付的款项流向 当用户在小程序内完成支付后,款项并不会直接到达商…

5月8日学习记录

_[FBCTF2019]RCEService(preg_match函数的绕过) 涉及知识点:preg_match函数绕过,json的格式,正则回溯 打开环境,要求用json的格式输入 搜索学习一下json的语法规则 数组(Array)用方括…

Map-Reduce是个什么东东?

MapReduce是一种用于使用并行分布式算法在集群计算机上处理大型数据集的编程模型及其相关实现。这一概念首先由Google普及,并随后作为Apache Hadoop项目的一部分开源发布。 MapReduce的基本工作流程: 映射(Mapping):这是第一阶段&#xff0c…

制造版图大变革!逾10座晶圆厂蓄势待发 | 百能云芯

在全球半导体产业的激烈竞争和市场需求的复杂波动中,晶圆厂建设热潮正在美国兴起,这一波建设浪潮的核心动力之一,便是美国政府推出的《芯片与科学法案》所承诺的巨额补贴,旨在提升美国在全球半导体行业的竞争力。 当地时间4月25日…

嵌入式—模块代码(一)

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 程序结构GPIO操作UART操作接收逻辑发送 以下模板代码均基于官方2023.07.17版本。 程序结构 #include "Config.h" #inc…

JSP技术讲解

目录 1、JSP简介 2、JSP体验 3、JSP运行原理 4、JSP基本语法 5、JSP指令 6、JSP内置九大对象 7、JSP标签 8、JSP配置 9、JSP排错 10、总结 在前面的Servlet学习中发现Servlet本质是一个java程序,因此Servlet更加擅长编写程序的业务逻辑,而如果要…

部署kafka后启动报错(坑):无法指定被请求的地址

启动kafka后报错:org.apache.kafka.common.KafkaException: Socket server failed to bind to 127.0.0.1:9092: 无法指定被请求的地址 1、编辑配置文件 vim config/server.properties 2、在listeners PLAINTEXT://your.host.name:9092下方添加服务器内外网地址配…