《论文阅读27》SuperGlue: Learning Feature Matching with Graph Neural Networks
一、论文
- 研究领域: 图像特征点匹配
- 论文:SuperGlue: Learning Feature Matching with Graph Neural Networks
- CVPR 2020
- veido
- 论文code
二、论文简述
[参考] [参考] [参考]






三、论文详述
SuperGlue:使用图神经网络学习特征匹配
本文介绍了SuperGlue,一种神经网络,通过共同寻找对应点和拒绝不匹配点来匹配两组本地特征。分配估计通过解决一个可微的最优运输问题,其成本预测的图形神经网络。我们引入了一个灵活的上下文聚合机制的基础上的注意力,使SuperGlue的原因有关的基础3D场景和功能分配联合。与传统的手工设计的启发式算法相比,我们的技术通过从图像对进行端到端的训练来学习3D世界的几何变换和规则。SuperGlue优于其他学习方法,并在具有挑战性的真实世界室内和室外环境中的姿态估计任务上取得了最先进的结果。所提出的方法在现代GPU上实时执行匹配,并且可以容易地集成到现代SfM或SLAM系统中
- Introduction
图像中的点之间的对应关系对于在几何计算机视觉任务(诸如同时定位和映射(SLAM)和运动恢复结构(SfM))中估计3D结构和相机姿态是必不可少的。这种对应性通常通过匹配局部特征来估计,这是一种被称为数据关联的过程。大的视点和光照变化、遮挡、模糊和缺乏纹理是使2D到2D数据关联特别具有挑战性的因素。
在本文中,我们提出了一种新的思维方式的特征匹配问题。本文提出了一种基于SuperGlue神经网络的局部特征匹配算法,该算法不需要学习任务不可知的局部特征,然后通过简单的匹配启发式算法和技巧来完成匹配过程。在SLAM环境中,通常[8]将问题分解为视觉特征提取前端和束调整或姿势估计后端,我们的网络直接位于中间- SuperGlue是一个可学习的中间端(见图1)。

与SuperGlue的特征匹配。我们的方法从现成的局部特征建立逐点对应:它充当手工或学习的前端和后端之间的中间端。SuperGlue使用图形神经网络和注意力来解决分配优化问题,并优雅地处理部分点的可见性和遮挡,从而产生部分分配。
在本文中,学习特征匹配被视为寻找两组局部特征之间的部分分配。通过求解线性分配问题,我们重新审视了经典的基于图的匹配策略,当将线性分配问题放松为最优运输问题时,可以微分地求解线性分配问题。该优化的成本函数由图神经网络(GNN)预测。受Transformer [61]成功的启发,它使用自我(图像内)和交叉(图像间)注意力来利用关键点的空间关系及其视觉外观。该公式强制执行预测的分配结构,同时使成本能够学习复杂的先验知识,优雅地处理遮挡和不可重复的关键点。我们的方法是从图像对中进行端到端的训练--我们从一个大型的带注释数据集中学习姿势估计的先验知识,使SuperGlue能够推理3D场景和分配。我们的工作可应用于各种需要高质量特征对应的多视图几何问题(见图2)。

图2:SuperGlue对应关系。对于这两个具有挑战性的室内图像对,使用SuperGlue进行匹配可以获得准确的姿势,而其他学习或手工制作的方法则会失败(对应关系被极线误差着色)。
我们展示了SuperGlue与手工制作的匹配器和学习的内点分类器相比的优越性。当与SuperPoint [18](一种深度前端)相结合时,SuperGlue推进了室内和室外姿势估计任务的最新技术,并为端到端深度SLAM铺平了道路。
- Related work
局部特征匹配通常通过以下步骤来执行:
i)检测兴趣点,
i)计算视觉描述符,
iii)将这些与最近邻(NN)搜索进行匹配,
iv)过滤不正确的匹配,
最后v)估计几何变换。
21世纪初开发的经典管道通常基于SIFT [31],过滤器匹配Lowe比率测试[31],相互检查和启发式方法,如邻域共识[59,10,6,49],并使用RANSAC [21,43]等鲁棒求解器找到变换。
最近的深度学习匹配工作通常集中在使用卷积神经网络(CNN)从数据中学习更好的稀疏检测器和局部描述符[18,19,37,45,69]。为了提高它们的区分度,一些作品使用区域特征[32]或对数极坐标补丁[20]明确地查看更广泛的背景。其他方法通过将其分类为内点和离群点来学习过滤匹配[33,44,7,71]。这些操作仍然通过NN搜索估计的匹配集,因此忽略分配结构并丢弃视觉信息。到目前为止,学习执行匹配的作品集中在密集匹配[46]或3D点云[65]上,并且仍然表现出相同的限制。相比之下,我们的可学习的中间端同时执行上下文聚合,匹配和过滤在一个单一的端到端架构。
图匹配问题通常被公式化为二次分配问题,其是NP难的,需要昂贵、复杂并且因此不切实际的求解器[30]。对于局部特征,2000年代的计算机视觉文献[5,27,57]使用了许多启发式的手工成本,使其变得复杂和脆弱。Caetano等人[9]学习更简单的线性分配的优化成本,但只使用浅层模型,而我们的SuperGlue使用深度神经网络学习灵活的成本。与图匹配相关的是最优运输问题[63] -它是一个广义线性分配,具有有效而简单的近似解,即Sinkhorn算法[55,12,39]。
点云等集合的深度学习旨在通过聚合元素之间的信息来设计置换等不变函数。一些作品通过全局池化[70,40,15]或实例归一化[60,33,32]平等地对待所有元素,而其他作品则专注于坐标或特征空间中的局部邻域[41,66]。Attention [61,64,62,26]可以通过关注特定的元素和属性来执行全局和数据相关的局部聚合,因此更加灵活。通过观察到自我注意力可以被视为完整图上的消息传递图神经网络[23,4]的实例,我们将注意力应用于具有多种类型边缘的图,类似于[28,72],并使SuperGlue能够学习关于两组局部特征的复杂推理。
- The SuperGlue Architecture
动机:在图像匹配问题中,可以利用世界的一些规律:3D世界在很大程度上是平滑的,有时是平面的,如果场景是静态的,则给定图像对的所有对应关系都从单个对极变换导出,并且一些姿势比其他姿势更可能。此外,2D关键点通常是突出的3D点的投影,如角点或斑点,因此图像之间的对应关系必须遵守某些物理约束:
i)关键点可以在另一图像中具有至多单个对应关系
ii)由于检测器的遮挡和故障,一些关键点将不匹配。用于特征匹配的有效模型应旨在找到相同3D点的重投影之间的所有对应关系,并识别没有匹配的关键点。
我们将SuperGlue(见图3)表述为解决一个优化问题,其成本由深度神经网络预测。这减轻了对领域专业知识和启发式的需求-我们直接从数据中学习相关的先验知识。
在线性规划问题中,可能会有以下形式的约束条件:
1. Ax ≤ b(不等式约束)
2. Ax = b(相等约束)其中
- A 是代表约束条件的系数矩阵。
- x 是决策变量向量。
- b 是右侧的常量向量。
假设有一个相等约束 引入松弛变量 s 将其转换为不等式约束: Ax + s = b,其中 s 为非负。松弛变量 s 的作用是衡量在满足相等约束条件时有多少 "松弛 "或剩余。
如果 s 为零,表示完全满足相等约束条件。
如果 s 为正数,则表示平等约束条件没有得到充分利用,还存在一定的松弛。
如果 s 为负数,则表示违反了相等约束条件。
加入松弛变量后,线性规划求解器就能处理不等式,并找到尽可能满足相等约束条件的解决方案,即使这些约束条件因其他约束条件而无法完全满足。
总之,引入松弛变量是为了将相等约束条件转化为不等式约束条件,同时确保非负性,这样就可以使用不等式约束问题的标准技术来求解线性规划问题。
相关文章:
《论文阅读27》SuperGlue: Learning Feature Matching with Graph Neural Networks
一、论文 研究领域: 图像特征点匹配论文:SuperGlue: Learning Feature Matching with Graph Neural NetworksCVPR 2020veido论文code 二、论文简述 [参考] [参考] [参考] 三、论文详述 SuperGlue:使用图神经网络学习特征匹配 本文介绍了…...
远程计算机或设备不接受连接解决方法
远程计算机或设备不接受连接解决方法 点击左下角开始,点击运行,输入inetcpl.cpl,点击确定,打开Internet选项。 将三个框的勾勾去掉,即为不选中状态,点击确定。 当你的电脑浏览器不能正常上网时ÿ…...
基于Python实现的快递管理系统源码+数据库,采用PyQt6实现GUI界面
快递管理系统 完整代码下载地址:快递管理系统 介绍 通过对传统的快递收发流程进行分析,完成网上快递管理系统的分析设计与开发,使客户能方便在网站上查询自己的快件信息以及网上寄件,同时管理员又能对每天的收到快件进行登记和…...
如何使用docker快速部署MinDoc文档系统
MinDoc是非常优秀的知识分享系统,但是很多刚接触的人会一脸懵逼,而且官方文档写的也并不清晰,所以和大家分享一下快速部署MinDoc的方法。 首先docker环境先自行安装好,这里不再赘述。 拉取docker镜像: docker pull …...
9月25日,每日信息差
今天是2023年9月27日,以下是为您准备的18条信息差 第一、苹果向法国监管机构提交iPhone 12软件更新,解决辐射超标问题 第二、“双节”期间,北京全市预计接待游客1283万人次,中秋国庆“双节”长假将至,北京市民和游客…...
【网络协议】Https
HTTP 协议内容都是按照⽂本的⽅式明⽂传输的,这就可能导致在传输过程中出现⼀些被篡改的情况。所以在HTTP协议的基础上,引入加密层,形成了HTTPS协议。 HTTPS 协议是由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要…...
Lostash同步Mysql数据到Elasticsearch(三)Elasticsearch模板与索引设置
logstash数据同步ES相关 同步数据时,Elasticsearch配合脚本的相关处理设置 1.模板创建更新 在kibana中执行,或者直接给ES发送请求,你懂得,不懂得百度下ES创建template PUT /_template/test-xxx {"template": "…...
python——ptp()函数
函数功能:求最大值和最小值的差值 def ptp(a, axisNone, outNone):"""沿轴的值范围(最大值-最小值)。该函数的名称来自“peak-to-peak”的首字母缩写。参数----------a:array_like输入值。axis:int,可选找到山峰的…...
SpringBoot之异常处理
文章目录 前言一、默认规则二、定制异常处理处理自定义错误页面ControllerAdviceExceptionHandler处理全局异常ResponseStatus自定义异常自定义实现 HandlerExceptionResolver 处理异常 三、异常处理自动配置原理四、异常处理流程总结 前言 包含SpringBoot默认处理规则、如何定…...
Flask-[实现websocket]-(2): flask-socketio文档学习
一、简单项目的构建 flask_websocket |---static |---js |---jquery-3.7.0.min.js |---socket.io_4.3.1.js |---templates |---home |---group_chat.html |---index.html |---app.py 1.1、python环境 python3.9.0 1.2、依赖包 Flask2.1.0 eventlet0.33.3 #使用这个性能会…...
网页中使用的图片格式
网页中使用的图片格式有以下几种,各有优缺点: JPEG:适用于照片或彩色图像,支持16.7万种颜色,有损压缩,可以调节压缩比和质量,文件较小,加载较快PNG:适用于图标或透明图像…...
【android】如何设置LD_LIBRARY_PATH?
目录 一 配置方法 1 进入Android shell 2 使用export命令 3 使用echo命令查看变量是否设置成功 二 扩展 1 LD_LIBRARY_PATH设置多个路径 2 push文件 一 配置方法 android中配置LD_LIBRARY_PATH的方法具体为: 1 进入Android shell adb shell 2 使用export…...
【hadoop3.x】一 搭建集群调优
一、基础环境安装 https://blog.csdn.net/fen_dou_shao_nian/article/details/120945221 二、hadoop运行环境搭建 2.1 模板虚拟机环境准备 0)安装模板虚拟机,IP 地址 192.168.10.100、主机名称 hadoop100、内存 4G、硬盘 50G 1)hadoop100…...
linux使用操作[2]
文章目录 版权声明网络传输ping命令wget命令curl命令端口linux端口端口命令和工具 进程管理查看进程关闭进程 主机状态top命令内容详解磁盘信息监控 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明,所有版权属于黑马程序员或相…...
华南理工大学电子与信息学院23年预推免复试面试经验贴
运气较好,复试分数90.24,电科学硕分数线84、信通83、专硕电子与信息74. 面试流程: 1:5min ppt的介绍。其中前2min用英语简要介绍基本信息,后3min可用英语也可用中文 介绍具体项目信息如大创、科研、竞赛等(…...
Linux网络编程- ether_header iphdr tcphdr
struct ether_header struct ether_header 是一个数据结构,用于表示以太网(Ethernet)帧的头部。这个结构体在 <netinet/if_ether.h> 头文件中定义。当你处理或分析以太网帧时,可以使用这个结构体来访问和解读 Ethernet 头部…...
wpf中的StaticResource和DynamicResource
不同点一:StaticResource是程序载入时对资源的一次性使用,之后就不在访问了 DynamicResouce则是程序运行过程中回去访问资源 样例:在xaml中定义好的资源 <Window.Resources><SolidColorBrush x:Key"borderRed" Color"…...
数据结构与算法基础-(3)
🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…...
maven中relativepath标签的含义
一 relative标签的含义 1.1 作用 这个<parent>下面的<relativePath>属性:parent的pom文件的路径。 relativePath 的作用是为了找到父级工程的pom.xml;因为子工程需要继承父工程的pom.xml文件中的内容。然后relativePath 标签内的值使用相对路径定位…...
Greenplum 对比 Hadoop
Greenplum属于MPP架构,和Hadoop一样都是为了解决大规模数据的并行计算而出现的技术,两者的相似点在于: 分布式存储,数据分布在多个节点服务器上分布式并行计算框架支持横向扩展来提高整体的计算能力和存储容量都支持X86开放集群架…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
