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

news2025/4/21 21:06:21

两年前自己在实习公司做过superpoint相关的工作,当时是负责利用superpoint代替slam前端的特征点部分,来达到把特征点相关的处理放到推理计算平台上减轻CPU压力并且精度无损的目的,最终也是成功完成了这部分工作。但是当时没有留下任何的记录,这次在工作中要再次接触superpoint和superglue时,还花了不少时间去回顾,所以为了方便自己,也希望能帮到一些有需要的人去理解它,打算以自己的理解的角度在业余时间写几篇博客。暂时是想分为几篇,superpoint完整解读包括源码(本篇)、superGlue完整解读包括源码、superglue中superpoint的再实现与原版superpoint的不同之处、两个模型利用tenssort加速与cpp部署的经验分享,以及两个模型的训练。不过想法是美好的,碍于工作太忙,自己不知道能实现几篇。(另外自己虽然是本硕科班计,但是一直对network知之甚少,望有错时能被纠正)

知识所属:MagicLeap
论文地址:https://arxiv.org/abs/1712.07629
作者讲解PPT:https://github.com/magicleap/SuperPointPretrainedNetwork/blob/master/assets/DL4VSLAM_talk.pdf
作者讲解视频:https://www.bilibili.com/video/BV14V4y1T7pW/?spm_id_from=333.337.search-card.all.click&vd_source=d85bf57f8523cf0ac2f69db86f6b6bfd(搬运自B站,因为源视频需要科学上网)
论文源码:https://github.com/magicleap/SuperPointPretrainedNetwork?tab=readme-ov-file

1. 前言

superpoint从发布到现在已经六年了,其优秀的“履历”感觉在这里也不需要过多赘述。本篇博客我会直接讲解网络模型的过程、算法思路以及对应的源码,如果之前对superpoint没有了解的建议先了解一下。

2. 网络结构

在这里插入图片描述

如上图所示,superpoint是Encoder-Decoder结构。特征点检测器与描述子网络共享的是一个前向encoder,encoder结束后,二者根据任务的不同学习不同的网络参数,再通过不同的处理得到最终的结果。其中特征点位置解码器会进行softmax、reshape和nms步骤得到最终的特征点及其置信度。描述子解码器则会进行双线性插值和标准化来得到最终的结果。接下来会对各个部分进行仔细讲解,并且会附上对应代码。

2.0 源码结构解析
文件结构

主要代码都在demo_superpoint.py,superpoint_v1.pth是模型参数,assets⾥⾯是⼀些样本图⽚。
在这里插入图片描述

代码结构

在这里插入图片描述

代码里面重要的也就两个class,一个是SuperPointNet,对应卷积网络部分。另一个
SuperPointFrontend里面实现了网络的调用和两个解码器的后处理。

2.1 Shared Encoder 共享的编码网络

在这里插入图片描述

如上图所示,网络的卷积过程与代码一一对应。其中,还会涉及到维度和通道数的变化,具体如下:
在这里插入图片描述

2.2 Interest Point Decoder

在这里插入图片描述

输入图片经过上面的共享编码网络之后,就会得到一个张量
[65,H/8,W/8],这个张量中,每个像素有65个通道,放大后如上图中的坐标图。其中64个通道的值就是对应图像中8x8区域中各个位置成为特征点的概率值,第65位为dutbin位(如果没有dustbin通道,在没有特征点时,每个cell在做完softmax后某些原本响应特别小的响应被 softmax“放大”,在后续就会被错误地选为特征点;如果有dustbin通道,在没有特征点时,dustbin的值会很大,即使经过了softmax也不会将其余的64个数字“放大”。所以dustbin是为了应对没有特征的情况)

Softmax+去dustbin+reshape+confidence限制

在这里插入图片描述

首先会进行softmax,即沿着每个像素的通道维度把各个数值通过经过运算后加和为1(针对概率分布的处理)。随后去掉dustbin通道,并对维度进行处理,得到[H,W]。然后根据confidence筛选。

NMS+remove border point

在这里插入图片描述

在经过上面步骤得到初步的特征点后,此时还要进行NMS(非极大抑制),其作用就是把一个区域内最大值周边的值都设置为不成为特征点,原因是因为那些点的confidence大可能不是它本身的质量高,而是被那个最大值特征点带起来的,第二个原因就是NMS也能很好的让特征点均匀分布,有利于后续的匹配。在经过NMS后,去掉处于图像边界的特征点,最后根据confidence排序得到最终结果。
接下来对NMS的具体处理过程进行介绍:
算法的整体思路为:创建一个大小为HxW的网格上(image大小), 让每个特征点所在位置的值为1,其他的为0。遍历所有为1的位置(从confidence值大到小的顺序),将它变成-1,将其周围区域内的所有为1的值变为0( -1表示保留, 0表示抑制)。本质上: 将置信值最大的附近的特征点变味0来抑制。
具体的代码过程如下:
在这里插入图片描述

2.2 Descriptor Decoder

在这里插入图片描述

主要经过两个步骤,首先会结合拿到的特征图和特征点位置进行双线性插值,得到对应的描述子矩阵后再进行L2范数计算得到最终的描述子结果。

双线性插值

这部分采用了pytorch中的函数torch.nn.functional.grid_sample(关于这个函数的理解可以参考https://blog.csdn.net/weixin_42392454/article/details/141608192)。grid_sample 是 PyTorch 中的一个函数,它用于根据给定的采样网格(grid)对输入张量进行采样。具体流程是首先将 grid 中的归一化坐标转换为输入张量的实际坐标。然后双线性插值对每个采样点,根据其在输入张量中的实际坐标,找到周围的四个像素点,计算插值权重。使用这些权重,对周围的像素值进行加权平均,以获得采样点的值。从而得到新的输出张量。
在这里插入图片描述

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

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

相关文章

YOLOv8 基于MGD的知识蒸馏

YOLOv8 基于MGD的知识蒸馏 接着上一篇我们介绍了YOLOv8的剪枝方案和代码,本篇文章将剪枝后的模型作为学生模型,剪枝前的模型作为教师模型对剪枝模型进行蒸馏,从而进一步提到轻量模型的性能。 Channel-wise Distillation (CWD) 问题和方法 …

IDM下载器如何下载网盘文件 IDM下载器支持哪些网盘

不用开通会员,也能高速下载网盘文件。使用IDM下载加速器,直接从服务器高速下载文件,轻松突破网盘限速。掌握IDM下载网盘文件的技巧,不仅可以节省会员费用,还可以大幅提高下载效率。有关IDM下载器如何下载网盘文件&…

【Linux:线程控制】

目录 线程的创建与等待: ​编辑 代码中tid是什么? 如何看待线程函数传参? ​编辑 ​编辑创建多线程:​编辑 终止多线程: 线程分离: 线程的创建与等待: void *threadrun(void *args) {int …

QT 中如何保存matlab 能打开的.mat数据矩阵!

Windows 上安装并使用 MATIO 库来保存 MATLAB 格式的 .mat 文件,需要进行以下步骤: 1. 下载并安装 CMake MATIO 使用 CMake 构建项目,因此你需要先安装 CMake。 前往 CMake 官网下载适用于 Windows 的安装程序并安装。 2. 下载 MATIO 库源…

Unity基础-矩阵-坐标转换结果的个人理解+数学公式说明

想做一些渲染效果做到头大,根本很多空白,完全无法实现,只能先暂停一下,重新学习矩阵 目录 Unity基础-数学矩阵 1.我们利用最简单的“转换矩阵”, 2.然后,视图坐标又是如何 3.最后就是剪裁坐标 3.1 - 其…

硬件设计-利用环路设计优化PLL的输出性能

目录 前言 问题描述 问题分析步骤 杂散源头排查 245.76M 参考相噪: 30.72M VCXO的相噪性能测试如下: 解决方案 前言 LMK04832是TI 新发布的低抖动双环去抖模拟时钟, 其最高输出频率可以到达3250MHz, 输出抖动极低,3200MHz…

MySQL 中的数据库锁和表锁

在 MySQL 数据库中,为了保证数据的一致性和完整性,会使用各种类型的锁。其中,数据库锁和表锁是比较常见的两种锁类型。 一、数据库锁和表锁的概念 (一)数据库锁 数据库锁是对整个数据库进行锁定,限制对数…

尝试从 http://pypi.doubanio.com/simple 这个索引源安装 webdriver 时出现了问题

问题如下: WARNING: The repository located at pypi.doubanio.com is not a trusted or secure host and is being ignored. If this repository is available via HTTPS we recommend you use HTTPS instead, otherwise you may silence this warning and allow …

ElasticSearch备考 -- 异步检索

一、题目 通过异步方式查询earthquakes索引下Magnitude大于5的数据 二、思考 正常的查询大家可能会用的多一点,这种异步查询为了可以数据量量比较大的查询在后台执行,不用同步等待结果,待执行完成在获取结果。 三、解题 Step 1、准备基础数…

【深度强化学习基础】(一)基本概念

【深度强化学习基础】(一)基本概念 一、概率论基础知识二、强化学习领域术语三、强化学习中两个随机性的来源:四、rewards以及returns五、Value Functions1.Action-Value Function Q π ( s , a ) Q_\pi(s,a) Qπ​(s,a)1.State-Value Funct…

Yolov8改进WIoU,SIoU,EIoU,α-IoU

1,IOU原理部分 IoU(Intersection over Union)是一种在计算机视觉领域常用的性能评估指标,尤其在目标检测和图像分割任务中。它通过计算预测边界框(预测框)与真实边界框(真实框)之间的交集面积与并集面积之比来衡量预测的准确性。IoU的值越接近1,表示预测框与真实框的重…

Error while loading conda entry point: conda-libmamba-solver

问题 解决方法 conda install --solverclassic conda-forge::conda-libmamba-solver conda-forge::libmamba conda-forge::libmambapy conda-forge::libarchive

C0015.Clion中开发C++时,连接Mysql数据库方法

安装mysql数据库 CMakeLists.txt中配置mysql数据库 # 先指定mysql数据库的安装位置 include_directories("C:/Program Files/MySQL/MySQL Server 8.0/include") link_directories("C:/Program Files/MySQL/MySQL Server 8.0/lib") link_libraries(libmysq…

Python | 使用Seaborn绘制KDE核密度估计曲线

核密度估计(KDE)图,一种可视化技术,提供连续变量概率密度的详细视图。在本文中,我们将使用Iris Dataset和KDE Plot来可视化数据集。 什么是KDE图? KDE图,全称核密度估计图(Kernel Density Est…

智慧农业案例 (二)- 智能化灌溉系统

橙蜂智能公司致力于提供先进的人工智能和物联网解决方案,帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、领域知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能&…

回归预测|基于哈里斯鹰优化最小二乘支持向量机的数据回归预测Matlab程序HHO-LSSVM 多特征输入单输出含基础程序

回归预测|基于哈里斯鹰优化最小二乘支持向量机的数据回归预测Matlab程序HHO-LSSVM 多特征输入单输出含基础程序 文章目录 一、基本原理一、基本原理二、HHO-LSSVM的流程三、优缺点四、应用场景 二、实验结果三、核心代码四、代码获取五、总结 一、基本原理 HHO-LSSVM回归预测结…

校园资源共享新方案:基于SpringBoot的实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多学生、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适…

Vue之父尤雨溪成立VoidZero公告,已获得 460 万美元种子轮融资

VoidZero Inc. 创立公告 摘要: 我创立了 VoidZero Inc.,这是一家致力于构建开源、高性能、统一的开发工具链,服务于 JavaScript 生态系统的公司。我们已获得 Accel 领投的 460 万美元种子轮融资。 十五年前,当我开始使用 JavaSc…

哈尔滨自闭症学校寄宿条件与优势解析

自闭症儿童的希望之光:广州星贝育园寄宿制学校深度解析 在当今社会,自闭症儿童作为一群需要特别关注和照顾的群体,其教育与康复问题日益受到社会各界的重视。自闭症儿童不仅需要专业的康复训练,还需要一个稳定、温馨且充满爱的环…

UE5 小地图的基础方法

图片小地图,场景空间映射UI坐标 场景截图,创建UI,添加截图,映射坐标,以第三人称模版为例