NLNet论文总结和代码实现

news/2024/7/24 7:49:14 标签: NLNet, 多头注意力

Non-local Neural Networks(非局部神经网络):使用自注意力机制捕获远程依赖。

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

源码:

长距离依赖关系,顾名思义,是要和远程建立关系,在long-range的情况下有关联。在cv领域,就是考虑一个像素的时候同时考虑其邻域,甚至是邻域的邻域....,能够建模两个较远像素之间的关系,例如是不是同属一个类等等。

引用博文:MedT

一、背景和出发点

卷积运算是一次处理一个局部邻域的构建块,在捕获远程依赖关系时有许多的局限,例如:它的计算效率很低;它会导致优化困难等。作者受经典的非局部均值方法(non-local means)的启发,提出了一种非局部模块作为一种高效、通用的组件,用于在深度神经网络中捕获远程依赖关系

(该非局部模块结合了多头注意力机制。)

二、创新点

1. 与RNN和CNN的渐进行为相反,非局部运算通过计算任意两个位置之间的交互来直接捕获远程依赖,而不管它们的位置距离如何。

2. 正如本文在实验中所展示的,非局部操作是高效的,即使只有几层(例如5层),也能达到最佳效果

3. 该非局部操作保持可变的输入大小,并且可以轻松地与其他操作(例如,我们将使用的卷积)组合

三、Non-local Neural Networks(非局部神经网络)

3.1 非局部操作的一般定义

其中,i 是输入特征中要被计算的位置,jx_i 所有可能关联到位置的索引。f 是位置间的类同标量函数,用于计算两位置间的相关性。g 是位置输入信号函数,对输入的特征进行赋权,C(x)是归一化因子。

上述的非局部操作看后可能会感到一头雾水,我们需要简单了解一下前继论文:non-local means,非局部均值滤波

算法思想:图像的长边缘,纹理结构都是相似的,因此,在同一幅图像中, 对相似区域进行分类并加权平均得到的去噪图像,也应该能提高去噪效果。

方法:NLM是非局部均值操作,对每个滤波点都利用了整张图像的信息。对像素点 i 做NLM操作,先遍历整张图像,求出 i 与其他像素点的相似度,再与不同位置的像素点的灰度化值相乘(根据邻域间的相似性均值大小确定像素的权值),累加求均值,就得到 i 的滤波值。

公式

其中,NL(i)表示为 i 的滤波值,v(j) 表示像素点 j 的灰度值,j\in Ij需要遍历全图w ( i , j )v(j) 的权重,由 i , j 两像素点之间的相似度来得到。

如果仅仅比较 i,j 像素值来作为相似度的依据,不能正确反映 i,j 的关系,所以通常选其邻域N ( i ) , N ( j ),邻域大小可以自己选择。

参考:Non-Local Means(非局部均值滤波)、

均值、中值、高斯、non-local means算法详解 、

Non-local Net理解_非局部模块

由上述的non-local means转到本文的Non-local操作的定义,可知,f(x_i,x_j) 用于计算像素域 x_ix_j相似度,作为像素域 x_j的权重,这样通过累加求均值,获得的y_i便捕获了整张图像的长距离依赖关系。(y_i可以看作整张图像与在y_i位置上的原像素的相似度相乘求均值得到的。)

3.2 实例

计算像素邻域间的相似性的四种方法:

1. 高斯函数

2. 嵌入式高斯函数

3. 点乘

4. Concatenation(标注[40]提出的方法)

其中,[·,·] 表示维度拼接操作。

四、Non-local Block(NL模块)


http://www.niftyadmin.cn/n/4966596.html

相关文章

线性代数的学习和整理12: 矩阵与行列式,计算上的差别对比

目录 1 行列式和矩阵的比较 2 简单总结矩阵与行列式的不同 3 加减乘除的不同 3.1 加法不同 3.2 减法不同 3.3 标量乘法/数乘 3.3.1 标准的数乘对比 3.3.2 其他数乘对比 3.4 乘法 4 初等线性变换的不同 4.1 对矩阵进行线性变换 4.2 对行列式进行线性变换呢&#xf…

ubuntu安装pyenv

Pyenv是一种轻量级的Python版本管理工具,它可以让你在同一台机器上同时管理多个Python版本。这个工具对于开发者来说非常有用,因为在不同的项目中可能需要使用不同版本的Python。下面是在Ubuntu系统上安装pyenv,并配置环境变量的步骤&#xf…

按软件开发阶段的角度划分:单元测试、集成测试、系统测试、验收测试

1.单元测试(Unit Testing) 单元测试,又称模块测试。对软件的组成单位进行测试,其目的是检验软件基本组成单位的正确性。测试的对象是软件里测试的最小单位:模块。 测试阶段:编码后或者编码前(…

Flask-Sockets和Flask-Login联合实现websocket的登录认证功能

flask_login 提供了一个方便的方式来管理用户会话。当你在 Flask 的 HTTP 视图中使用它时,你可以简单地使用 login_required 装饰器来确保用户已登录。 但是,flask_sockets 并没有直接与 flask_login 集成。如果你想在建立 WebSocket 连接时检查用户是否…

基于 CentOS 7 构建 LVS-DR 群集,配置nginx负载均衡。

基于 CentOS 7 构建 LVS-DR 群集。 关闭防火墙 [rootlocalhost ~]# systemctl stop firewalld 安装ifconfig yum install net-tools.x86_64 -y 准备四台虚拟机 IP 用途 19.168.244.144 客户端 192.168.244.145 lvs 192.168.244.148 RS 192.168.244.149 RS 在DS上 …

十、pikachu之php反序列化

文章目录 1、php反序列化概述2、实战3、关于Magic function4、__wakeup()和destruct() 1、php反序列化概述 在理解这个漏洞前,首先搞清楚php中serialize(),unserialize()这两个函数。 (1)序列化serialize():就是把一个…

Rust源码编译

Rust源码编译 rustc编译hello.rs Rust程序源代码文件后缀名为.rs程序文件命名规范为小写字母加下划线,比如hello_world.rs // hello.rs fn main() {println!("hello world"); } // fn 表示函数 // main 表示函数名,()内是参数 // {}内是函数…

第三届计算机、物联网与控制工程国际学术会议(CITCE 2023)

第三届计算机、物联网与控制工程国际学术会议(CITCE 2023) The 3rd International Conference on Computer, Internet of Things and Control Engineering(CITCE 2023) 第三届计算机、物联网与控制工程国际学术会议(CITCE 2023)…