【关键点检测和描述】SuperPoint

一、引言

论文: SuperPoint: Self-Supervised Interest Point Detection and Description
作者: Magic Leap
代码: SuperPoint
特点: 提出Homographic Adaptation策略,提升模型从虚拟数据迁移到真实数据的表现;提出自监督训练的双分支网络框架,无需人工标记真实数据的关键点并能够同时实现关键点检测和描述符生成。

二、框架

SuperPoint的整体流程包括如下三个部分:

(a)使用有标签的虚拟三维物体数据集进行预训练,获取一个基础的关键点检测器。
(b)使用预训练好的关键点检测器对经过Homographic Adaptation中各种变换后的无标签的真实数据集进行关键点预测,然后每个图像都被整合出一个关键点集合。
(c)使用整合出的关键点集合作为伪标签同时训练关键点和描述符网络的双分支,获取一个可以同时预测关键点和描述符的模型。

2.1 关键点预训练

进行真实数据的关键点手工标注费时费力,作者先使用虚拟数据集进行预训练,该数据集是自己生成的、有关键点标签的,具有图形简单、数量多、关键点明确等特点。

预训练的关键点检测模型被称为MagicPoint,检测流程如下:

首先,该模型输入的是灰度图,所有输入的维度都要先从彩色的 M × N × 3 M\times N\times 3 M×N×3转为灰度的 M × N × 1 M\times N\times 1 M×N×1

其次,是MagicPoint模型,其结构图如下:

其中,编码器部分主要包括卷积最大池化操作,多次卷积使输出通道数从1变为128,三次最大池化使输出宽高变为输入宽高的 1 / 8 1/8 1/8(每次缩小 1 / 2 1/2 1/2)。因此,编码器的输出维度为 H c × W c × 128 H_c\times W_c\times 128 Hc×Wc×128 H c = H / 8 , W c = W / 8 H_c=H/8,W_c=W/8 Hc=H/8,Wc=W/8)。

特征图的宽高均缩小了8倍,但我们希望检测出的关键点坐标在原图尺度上,所以作者通过两次卷积操作将特征图的通道数从128变为了65。65包括 8 × 8 8\times 8 8×8个像素点和1个dustbin点。 8 × 8 8\times 8 8×8是因为还原至原图尺寸时当前的一个像素点应该对应原图的64个像素点。额外的1个dustbin点对应非关键像素点,当剩余64个像素点均不是关键点时它能保证结果的正确性。

具体来说, H c × W c × 65 H_c\times W_c\times 65 Hc×Wc×65的特征图会对当前每个像素点上的65个通道值进行softmax,在去掉最后的dustbin点后进行reshape,经过softmax后的64个值按8个一行依次放置便还原出了与原图对应的64个像素点。

可见,如果没有dustbin点,这64个通道值中必然会有较大的值出现,经过softmax后这些值就会更加突出,无关键点的情况就永远得不到表达。

如上图所示,有了dustbin点,64个像素点都不是关键点时dustbin点的值会很大,softmax并去掉dustbin点后剩下的64个通道值都很小,从而可以正确地表达无关键点的情况。

NMS不需要在训练阶段执行,而是在推理阶段,这是为了避免关键点被重复表达。

与目标检测时剔除多余框所使用的NMS不同,这里的NMS并不是通过IoU进行剔除,而是通过最大池化实现的。

下面以一个随机的矩阵为例说明NMS的过程:

该例子中最大池化核大小为 3 × 3 3\times 3 3×3,最大池化前需要进行padding以保证最终输出尺寸的一致性,经最大池化后的矩阵与原矩阵同位置元素进行对比,相同的保留,剩余的再进行下一次NMS(源码中共两次NMS)。

使用标准交叉熵为损失进行关键点检测网络的学习,这与前面的softmax是对应的,64个像素点就有一个交叉熵损失项。该方法使每64个像素点最多表达出一个关键点。

最后输出一个与原图尺寸一致的热力图,我们可以通过执行NMS、设置阈值等方法确定关键点的坐标。

2.2 关键点自标记

通过2.1 关键点预训练我们已经得到一个预训练好的关键点提取器(Base Detector),但是这个关键点提取器不具备泛化至真实数据上的能力,毕竟虚拟的简单数据与真实数据相差很大。但是真实数据的标注又很费力,所以作者提出Homographic Adaptation的方法利用预训练的关键点检测器对真实数据进行自标记以获取伪标签。

伪标签获取流程如下:

其中,无标签数据作者用的是CoCo,无标签指的是无关键点的标签。

可见,Homographic Adaptation就是先将一个无标签图片进行各种随机的变换

简单理解就是从另一个视角展示当前图中的物体,效果可能是这样:

之后,通过Warp操作扭曲变换后的图像。再使用预训练的关键点检测器进行关键点检测,然后将预测结果还原合并得到一个聚合版的热力图,取出热力值高的地方就得到了图片的关键点伪标签。

2.3 联合训练

有了真实数据的关键点伪标签,就可以用来训练模型以提升其预测真实数据关键点的能力。此外,作者还增加了一个描述符分支,在预测关键点的同时也能预测描述符(理想状态的描述符可以理解为一种稳定的特征表达,无论经过什么变换或在什么视角下,同一事物的同一个关键点的描述符一致)。

联合训练的流程如下:

联合训练时输入两张图片,一张原始图片和一张Warp之后的图片(Warp操作表示为 H \mathcal{H} H)。

其中,联合训练的模型被称为SuperPoint(图中的两个SuperPoint其实是同一个),其结构如下:

事实上,除描述符分支外,SuperPoint其余部分的网络结构与MagicPoint一致。

对于描述符分支,作者使用长度为256的特征向量来表达一个关键点。因此,作者先通过两个卷积层将原本128的通道数映射至256。之后,通过L2 Norm将每个像素点256长度的特征向量归一化。再通过torch.nn.functional.grid_sample() 取出关键点的特征向量。此时描述符分支的特征图大小为 H c × W c × 256 H_c\times W_c\times 256 Hc×Wc×256,所以grid_sample会先将4个角的坐标映射为左上(-1,-1)、右上(1,-1)、右下(1,1)、左下(-1,1),然后将关键点坐标也映射到这个范围,并以双线性插值的方式计算与关键点对应的特征向量,即描述符(这是pytorch源码中的流程,与图中流程稍有差别)。

训练时所使用的损失函数如下:

其中, X , Y \mathcal{X},Y X,Y X ′ , Y \mathcal{X}^{\prime},Y X,Y分别为原始图片和Warp后的图片; L p \mathcal{L}_p Lp标准交叉熵损失(与预训练时一样),作用于关键点检测分支,公式如下:

其实就是希望每64个像素点最多出一个关键点。

L d \mathcal{L}_d Ld为Double margin Siamese loss,作用于描述符分支,公式如下:

其中, d d d d ′ d^{\prime} d分别是与关键点对应的描述符; m p m_p mp m n m_n mn是自行设置的边界阈值; s s s是指示函数,公式如下

其中, p h w p_{hw} phw是原图上的关键点坐标, H p h w ^ \widehat{\mathcal{H}p_{hw}} Hphw 是经Warp变换后的关键点坐标, p h ′ w ′ p_{h^{\prime}w^{\prime}} phw是经Warp变换后的图片上的关键点坐标。当 H p h w ^ \widehat{\mathcal{H}p_{hw}} Hphw p h ′ w ′ p_{h^{\prime}w^{\prime}} phw相差不超过8个像素时,认为 p h w p_{hw} phw p h ′ w ′ p_{h^{\prime}w^{\prime}} phw这两个关键点应该被匹配。

其实就是希望两张图上相互匹配的关键点的描述符向量尽可能接近,反之尽可能远离。

它实现的功能通过下图一目了然:

如果应该被匹配(相差不超过8个像素),就使用损失的前半部分,两个描述符向量的相似度 d T d ′ d^Td^{\prime} dTd越大,损失越小,当相似度超过阈值 m p m_p mp时,不做惩罚。如果不应该被匹配(相差超过8个像素),就使用损失的后半部分,两个描述符向量的相似度 d T d ′ d^Td^{\prime} dTd越小,损失越小,小于阈值 m n m_n mn时,不做惩罚。

致谢:

本博客仅做记录使用,无任何商业用途,参考内容如下:
Homographic Adaptation 单应性变换
一种自监督的特征点检测、描述网络
SuperPoint 与 SuperGlue 详解
深度学习特征点+描述子

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

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

相关文章

邻氯苯甲酰氯在医药、农药等领域应用广泛 市场需求稳定且有增长趋势

邻氯苯甲酰氯在医药、农药等领域应用广泛 市场需求稳定且有增长趋势 邻氯苯甲酰氯又称为2-氯苯甲酰氯、氯化邻氯苯甲酰,化学式为C7H4Cl2O,是一种化学物质,外观为黄色液体,不溶于水,溶于醇、醚、丙酮,有强烈…

第100+12步 ChatGPT学习:R实现KNN分类

基于R 4.2.2版本演示 一、写在前面 有不少大佬问做机器学习分类能不能用R语言,不想学Python咯。 答曰:可!用GPT或者Kimi转一下就得了呗。 加上最近也没啥内容写了,就帮各位搬运一下吧。 二、R代码实现KNN分类 (1&a…

API 设计技巧:基础知识与实践的方法

在这篇深入探讨中,我们将从基础开始,逐步介绍 API 设计,并探讨定义卓越API的最佳实践。 作为一名开发者,你可能已经熟悉了许多这些概念,但我将提供详细解释,以加深你的理解。 API 设计:电子商…

图纸管理最佳实践:从混乱到有序的转变

图纸管理最佳实践:从混乱到有序的转变 在工程项目中,图纸是不可或缺的重要资料,它们承载着设计者的智慧与心血。然而,随着项目的推进和时间的推移,图纸管理往往变得混乱不堪,给项目的顺利进行带来诸多不便。…

ROS(四)

write in advance 实验四,在经历了实验三的失败后,卷土重来。 幸运的是,此次实验很简单,很快就能搞定。 Part one 使用指令查看自己摄像头的设备号,如果报错,且你为虚拟机,可能是未在虚拟机处…

Java学习 (二)关键字、标识符、数组

一、关键字 我们第一章案例中有很多关键字,比如class、public、static、void等,这些关键字依旧被java定义好了,可以拿来用,不需要死记硬背,按照官方文档查询即可 #官方文档 https://docs.oracle.com/javase/tutorial/j…

docker-compose设置永久启动、自动重启

步骤一 找到 docker-compose.yml 文件 步骤二 vim 打开文件 找到 image: PS:就是为了对齐格式 步骤三 在其下方添加: restart: always而后保存即可

打开nginx连接的php页面报错502

目录 问题描述: 原因: 1. 使用 Unix 域套接字(Unix Socket) 区别和优势: 2. 使用 TCP/IP 套接字 区别和优势: 如何选择 扩展:Rocky_Linux9.4安装PHP的步骤: 使用Remi存储库…

Wifi通信协议:WEP,WPA,WPA2,WPA3,WPS

前言 无线安全性是保护互联网安全的重要因素。连接到安全性低的无线网络可能会带来安全风险,包括数据泄露、账号被盗以及恶意软件的安装。因此,利用合适的Wi-Fi安全措施是非常重要的,了解WEP、WPA、WPA2和WPA3等各种无线加密标准的区别也是至…

通过防抖动代码解决ResizeObserver loop completed with undelivered notifications.

通过防抖动代码解决ResizeObserver loop completed with undelivered notifications. 一、报错内容二、解决方案解释: 一、报错内容 我通过el-tabs下的el-tab-pane切换到el-table出现的报错,大致是渲染宽度出现了问题 二、解决方案 扩展原生的 Resiz…

Android 应用加固与重签名—使用AndroidStudio自带工具 apksigner

由 AndroidStudio 生成的release版本的app有自己的签名,但当应用加固后会删除原签名,需要重新签名。 一、加固方式: 使用基础版的腾讯云(乐固)进行免费加固,上传软件后等待在线加固完成后下载 apk 即可。…

vue3+ts+vite集成eslint

项目中安装eslint yarn add eslint -Deslint初始化 npx eslint --init按照下方操作即可 安装typescript-eslint/parser yarn add typescript-eslint/parser -D安装vite-plugin-eslint2 yarn add vite-plugin-eslint2 -D配置vite-plugin-eslint2 // vite.config.ts import …

钡铼技术BL104在环境监测站多协议采集保障数据全面准确

随着工业化和城市化进程的加快,环境污染问题日益严重,环境监测站在保护生态环境、保障公众健康中的作用变得越来越重要。钡铼技术PLC物联网关BL104,为环境监测站提供了一种高效、可靠的多协议数据采集解决方案,保障了监测数据的全…

如何实现对文件发送全生命周期的外发管理?

在日常工作中,我们需要经常和企业外部的机构或者个人,发送一些企业内部的文档或者图纸等资料。但企业在文件外发管理上,仍存在一定漏洞,有些员工会通过一些手段,将重要核心文件数据发过去,包括但不仅限于以…

【数据结构(邓俊辉)学习笔记】二叉搜索树02——查找、插入和删除

文章目录 1.概述2. 查找2.1 查找:算法2.2 查找:理解2.3 查找:实现2.4 查找:语义 3. 插入3.1 插入:算法3.2 插入:实现 4. 删除4.1 删除:框架4.2 删除:单分支4.3 删除:双分…

MySQL----redo log重做日志原理及流程

重做日志 redo log:重做日志,用于记录事务操作的变化,确保事务的持久性。redo log是在事务开始后就开始记录,不管事务是否提交都会记录下来,在异常发生时(如数据持久化过程中掉电),…

笔记-python里面的xlrd模块详解

那我就一下面积个问题对xlrd模块进行学习一下: 1.什么是xlrd模块? 2.为什么使用xlrd模块? 3.怎样使用xlrd模块? 1.什么是xlrd模块? ♦python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel&…

成都百洲文化传媒有限公司助力商家扬帆远航

在数字经济的浪潮中,电商行业如日中天,成都百洲文化传媒有限公司正是这一领域的佼佼者。作为一家专注于电商服务的传媒公司,百洲文化以其专业的服务、创新的理念和卓越的成果,在业内树立了良好的口碑,成为众多商家信赖…

大数据实训室建设可行性报告

一、建设大数据实训室的背景与意义 随着信息技术的飞速发展,大数据已成为推动社会进步和经济发展的重要力量。中高职院校作为技能型人才培养的摇篮,承担着为社会输送大数据领域高素质、高技能人才的重要任务。因此,建设大数据实训室&#xf…

OKR:2024年目标和关键成果常见问题

什么是目标和关键结果(OKR)? 目标和关键结果(#OKR#)是一种由结果驱动的目标制定方法。在企业中,OKR经常被用来指导基于结果的成功。使用结果而不是任务作为驱动力,OKRs 鼓励通过度量指标对实现成…