【成长day】SuperPointSuperGlue(02): Superglue论文算法学习与对应源码解析

论文工作地址:https://psarlin.com/superglue/
论文地址:https://arxiv.org/abs/1911.11763
讲解PPT:https://psarlin.com/superglue/doc/superglue_slides.pdf
论文源码:https://github.com/magicleap/SuperGluePretrainedNetwork

摘要&介绍

请添加图片描述

如上图所示,SuperGlue是一个神经网络,通过共同找到对应关系和拒绝不可匹配的点来匹配两组局部特征。它作为手工或学习的前端和后端之间的中端。使用图神经网络和注意力机制来解决一个分配优化问题。能够优雅地处理部分点的可见性和遮挡,从而产生一个部分分配。

网络结构

在这里插入图片描述

SuperGlue主要由两大部分组成。注意力图神经网络:使用关键点编码器将关键点位置p和它们的视觉描述符d映射到一个单一的向量。接着使用交替的自注意力和交叉注意力层(重复L次)来创建更强大的表示f。最优匹配层:创建一个M乘N的得分矩阵。用dustbins增强该矩阵。使用Sinkhorn算法找到最优配对。

注意力图神经网络:
1.1为关键点编码器:每个关键点的初始表示结合了其视觉外观描述子和位置,编码器使用多层感知器(MLP)将关键点位置嵌入到高维向量中;
1.2为复用图神经网络:作为一个单一的完整图,其节点是两个图像的关键点。图有两种类型的无向边,它是一个多路复用图。图内边连接同一图像内的所有其他关键点,图间边连接关键点到另一图像中的所有关键点;
1.3为注意力聚::注意机制执行聚合并计算消息。图内边基于self_atten,而图间边基于cross_atten。与数据库检索类似,基于它们的属性,检索某些元素的值。消息被计算为值的加权平均值。关键、查询和值是图神经网络的深层特征的线性投影。最终匹配描述符是线性投影。

最优匹配层:这一部分产生一个部分分配矩阵。与标准的图匹配公式相似,可以通过计算一个得分矩阵S对所有可能的匹配进行评分,并在约束下最大化总得分来获得分配P。这等价于解决一个线性分配问题。
2.1为得分预测:将成对得分表示为匹配描述符的相似度;
2.2为遮挡和可见性:为了让网络压制某些关键点,每个集合都增加了一个"dustbin",以便未匹配的关键点被明确地分配到它。得分S被增强为S¯,通过添加一个新的行和列来完成。
2.3为Sinkhorn算法:上述优化问题的解决方案对应于最优传输问题。它是匈牙利算法的一个可微版本,传统上用于二部匹配,该算法包括沿行和列迭代地标准化exp(S¯),与行和列Softmax类似。经过T次迭代后,我们删除dustbin并恢复P。

Attentional Graph Neural Network注意力图神经网络

1.1 Keypoint Encoder关键点编码器

在这里插入图片描述

如上图所示,是采用MLP全连接层将三维的特征点[x,y,conf]升维成与描述子一致的256维。随后在下一个步骤中与描述子做一个加法运算,得到的结果送入图神经网络。下面是具体的代码实现和维度变化情况:
在这里插入图片描述
在这里插入图片描述

1.2&1.3注意力图神经网络

在这里插入图片描述
这一步进行的步骤就是论文中的公式3。代码中输入是编码器输出,图像0的描述子集合desc0和图像1的描述子集合desc1。如上图中代码所示,在__init__()中首先会构建一个18层AttentionalPropagation的网络模型,每层是self或者cross(二者交叉进行)。其余forward的在代码注释里说明,需要注意的是,每个layer其实就是一次AttentionalPropagation。在这其中,主要进行的操作过程就是公式3中的后半部分,在这里面会先计算message,随后进行一次MLP(输入维度为256*2,message||x)。
在这里插入图片描述
message的计算由多头注意力机制MultiHeadedAttention实现(本文中使用的是4-head)。

多头注意力机制MultiHeadedAttention

在这里插入图片描述
在这里插入图片描述

MultiHeadedAttention的作用就是计算message,其输入输出以及执行过程如上图代码注释所示。(公式5中把q分开写是因为q的取值是固定的,k和v是一致的不固定)
具体的注意力聚合机制实现则是在函数attention里。
在这里插入图片描述
在这里插入图片描述

Optimal matching laye最优匹配层

在这里插入图片描述

sinkhorn算法概述

在经过图神经网络之后得到了n*m的权重矩阵S:

  1. 行列各添加一行和一列dustbin,为了将没有匹配上的分配进入dustbin。
  2. 设定预期的目标行a和目标列和b,再结合实际的行和和列和进行标准化。
  3. 标准化的过程为:行方向标准化->列方向标准化->循环进行。(标准化过程中的计算方式为:每个元素除以自己的实际行和,再乘以预期行和;列标准化也是如此)

具体的功能在函数log_optimal_transport和log_sinkhorn_iterations中实现:
在这里插入图片描述

在执行完sinkhorn算法后,得到最终的分配矩阵。

superglue模型的整体运行过程

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WebRTC音频 03 - 实时通信框架

WebRTC音频01 - 设备管理 WebRTC音频 02 - Windows平台设备管理 WebRTC音频 03 - 实时通信框架(本文) WebRTC音频 04 - 关键类 WebRTC音频 05 - 音频采集编码 一、前言: 前面介绍了音频设备管理,并且以windows平台为例子,介绍了ADM相关的类…

【分立元件】方形贴片固定电阻器制造流程

方形贴片固定电阻器是怎么制造的呢?我们在文章【分立元件】电阻的基础知识中介绍到电阻器中的固定电阻器,其品种有贴片电阻器。 贴片电阻器如下所示&#

vuex的store应用

1.在pakage.json加一行 2.和main同级别加一个js文件 import Vue from vue import Vuex from vuexVue.use(Vuex)export default new Vuex.Store({state: {langFlag: new Date().getTime()},mutations: {setLangFlag(state) {state.langFlag new Date().getTime()}} })3.在mai…

Shiro框架——shiro的认证

基本使用 1.环境搭建 引入pom依赖 说明:Shiro获取权限相关信息可以通过数据库获取,也可以通过ini配置文件获取 这里演示从ini文件中获取。 在resources目录下创建ini文件注:这里等号左边的(如:zhangsan),就代表用户…

STM32--基于STM32F103C8T6的OV7670摄像头显示

本文介绍基于STM32F103C8T6实现的OV7670摄像头显示设计(完整资源及代码见文末链接) 一、简介 本文实现的功能:基于STM32F103C8T6实现的OV7670摄像头模组实时在2.2寸TFT彩屏上显示出来 所需硬件: STM32F103C8T6最小系统板、OV76…

学习docker第三弹------Docker镜像以及推送拉取镜像到阿里云公有仓库和私有仓库

docker目录 1 Docker镜像dockers镜像的进一步理解 2 Docker镜像commit操作实例案例内容是ubuntu安装vim 3 将本地镜像推送至阿里云4 将阿里云镜像下载到本地仓库5 后记 1 Docker镜像 镜像,是docker的三件套之一(镜像、容器、仓库)&#xff0…

大模型~合集14

我自己的原文哦~ https://blog.51cto.com/whaosoft/12286799 # Attention as an RNN Bengio等人新作:注意力可被视为RNN,新模型媲美Transformer,但超级省内 , 既能像 Transformer 一样并行训练,推理时内存需求又不随 token 数线性…

基于因果推理的强对流降水临近预报问题研究

我国地域辽阔,自然条件复杂,灾害性天气种类繁多,地区差异性大。雷雨大风、冰雹、短时强降水等强对流天气是造成经济损失、危害生命安全最严重的一类灾害性天气。由于强对流降水具有高强度、小空间尺度等特点,一直是气象预报领域的…

vue组件传值之$attrs

1.概述:$attrs用于实现当前组件的父组件,向当前组件的子组件通信(祖-》孙) 2.具体说明:$attrs是一个对象,包含所有父组件传入的标签属性。 注意:$attrs会自动排除props中声明的属性&#xff0…

矩阵系统哪家好~矩阵短视频运营~怎么矩阵OEM

一、引言 在当今的数字化时代,矩阵系统在众多领域中发挥着至关重要的作用,如视频监控、信号切换、自动化控制等。然而,如何判断一个矩阵系统是否好用成为了许多用户面临的问题。本文将从多个方面探讨矩阵系统好用与否的判断标准,希…

Python | Leetcode Python题解之第492题构造矩形

题目: 题解: class Solution:def constructRectangle(self, area: int) -> List[int]:w int(sqrt(area))while area % w:w - 1return [area // w, w]

QtCreator14调试Qt5.15出现 Launching Debugger 错误

1、问题描述 使用QtCreator14调试程序,Launching Debugger 显示红色,无法进入调试模式。 故障现象如下: 使能Debugger Log窗口,显示: 325^error,msg"Error while executing Python code." 不过&#xff…

SpringCloud学习:Seata总结与回顾

SpringCloud学习:Seata总结与回顾 文章目录 SpringCloud学习:Seata总结与回顾1. Seata实战:测试2. Seate原理总结和面试题3. Seata总结与回顾4. 易混点 1. Seata实战:测试 测试问题 未启用分布式事务 若不使用分布式事务&#xf…

基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) PSO优化过程: PSO优化前后,模型训练对比: 数据预测对比: 误差回归对比&a…

以太网交换安全:MAC地址漂移与检测(实验:二层环路+网络攻击)

一、什么是MAC地址漂移? MAC地址漂移是指网络中设备的MAC地址在运行过程中发生变化的现象。 MAC地址是用于唯一标识网络中的设备。 MAC地址漂移是指交换机上一个VLAN内有两个端口学习到同一个MAC地址,后学习到的MAC地址表项覆盖原MAC地址表项的现象。…

I2C的学习

I2C通信的基本概念 双线制:I2C通信采用两条线进行数据传输: SDA(Serial Data Line):数据线,用于传输数据。SCL(Serial Clock Line):时钟线,用于同步数据传输。…

软件测试工程师:如何写出好的测试用例?

软件测试用例(Test Case)是软件测试过程中的一种详细文档或描述,用于描述在特定条件下,对软件系统或组件进行测试的步骤、输入数据、预期输出和预期行为。编写高质量的测试用例是确保软件质量的关键步骤之一。以下是一些编写优秀测试用例的建议&#xff…

FLexsim 实体

发生器 属性列表 到达方式 ①到达时间间隔:根据数学分布,自定义到达时间间隔 ②到达时间表 到达时间:发生器产生实体的时间;实体名称:对应时间产生的临时实体的名字 ③到达序列:批量产生多少实体。 暂存区 …

【C++贪心 单调栈】1727. 重新排列后的最大子矩阵|1926

本文涉及知识点 C贪心 C单调栈 LeetCode1727. 重新排列后的最大子矩阵 给你一个二进制矩阵 matrix ,它的大小为 m x n ,你可以将 matrix 中的 列 按任意顺序重新排列。 请你返回最优方案下将 matrix 重新排列后,全是 1 的子矩阵面积。 示例…

计算机毕业设计 零食批发商仓库管理系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…