SuperPoint 论文详解

2023-10-30

SuperPoint

该论文是 magic leap 公司在18年的一篇工作,而且提供了代码,基于 pytorch 的,不过遗憾的是训练代码和相应的渲染的训练数据没提供。

主要思路

本文提出了一个自监督的方式去训练网络来提取特征点以及计算描述符。

基本流程

整体框架

整体框架如下图,下面会abc三个步骤分别介绍:
整体框架

特征点提取预训练

如果要使用有监督的深度学习方案来解决该问题,不同于其他传统的像分类、检测和分割这样视觉任务,对于任意给定的一张图像,有确定的语义上的真值。对于特征点提取这个任务来说,很难人为的去判断哪一个像素点可以作为特征点,所以也很难让用户去标注,所以现在要在没有标注数据前提下去解决。
该文作者提出了一种迂回的方式,具体流程如下:

  1. 利用基本形状元素渲染得到训练集和真值,如下图:
    对于任意的图像很难去确定特征点位置,但是如果图像上只有线段、三角形、矩形和立方体等基本形状元素的话,那么特征点的位置一般都是在端点和定点上,那么真值就很好确定了。但是也很难获取这种只包含基本形状元素的图像,所有作者使用渲染的方式来获取对于任意的图像很难去确定特征点位置,但是如果图像上只有线段、三角形、矩形和立方体等基本形状元素的话,那么特征点的位置一般都是在端点和定点上,那么真值就很好确定了。但是也很难获取这种只包含基本形状元素的图像,所有作者使用渲染的方式来获取训练图像,那么真值自然就获得了。
    特征点训练数据
  2. 利用上面的训练数据和真值训练起来,这样就得到可以提取基本形状元素特征点的模型了,文章中叫做MagicPoint,结构如下(只关注上面,下半部分是提取描述符的):
    其实这里面也有一些问题,点的数目不固定怎么来映射,比较直观的想法是利用类似关节点提取的方法,但可能会有点问题,就是后面的heatmap需要保证和输入图像分辨率一致,不然网络降采样会导致找不到精确的特征点。作者采用了另外的方式,类似语义分割的方式,就是网络整体就做8次降采样,最后会输出65个通道的heatmap,65通道对应原始图像的8x8的一个patch,表示该点是特征点的概率值,多出一个值表示不存在特征点,这样就把特征点提取转换成分类问题。
    上面论文中实现其实有个细节是,如果同一个8x8的patch上存在多个特征点,因为分类只能有一个真值,所以只会选择其中一个特征点当做真值去训练,测试过程利用阈值来截取,同一个8x8的patch可以获得多个特征点,这是需要注意的。但是训练时的选取的策略没仔细看,需要注意一下???
    整体深度学习架构
真实图像自标注

真实图像自标注主要使用单应适应的方法,这也是该文的核心贡献,主要是通过单应变换把上面的MajicPoint的能力传递到一般图像上,主要流程如下图:
前面的MagicPoint只是在基本形状元素的图像上训练出来的,对于一般的图像提取效果可能不太好。主要思路是想利用MS-COCO上的大量的图像来进一步训练得到一般性的模型。但该数据集没有特征点真值的,所以方案就变成通过之前训练好的MagicPoint获取MS-COCO数据集的特征点的真值。这里主要是对MS-COCO数据集的每张图像做n种单应变换(文章中最后用的100种),得到n张变换后的图像,在这些图像上利用MajicPoint模型分别提取特征点,可以得到n个特征点的heatmap,把这n个heatmap累加到一起,得到最终的heatmap,然后使用阈值截取获得每个位置上的特征点,这个就是原始图像的特征点的真值,用来训练。
单应适应
关于单应变化,论文中拆分成多个子变换,如下图:
在这里插入图片描述

特征点提取和描述符计算联合训练

首先MS-COCO真实图像集,目前通过前面的步骤已经获取图像对应的特征点的真值了。但同特征点一样,描述符也存在真值的问题,任意两张图像,真值是没法确定和标注的。这里的描述符直接由深度学习网络的feature map输出,但是这样的feature map不一定满足描述符的特性,简单来说就是需要同样的特征点之间描述符的距离尽可能的近,而不同特征点之间的描述符的距离尽可能远。(这里的近和远只是表示在一定度量方法下的描述符的相似程度)
该文对原始图像做warp,然后两张图像都能特征点对应关系也是知道的,由warp函数决定,对于两张图像中任意的两对点都会求loss,去优化使匹配点距离小,非匹配点距离大,这样最后得到的描述符就是满足需求的。
需要注意的是描述符的feature map是通道为D的,但是分辨率是原始图像的1/8,也就是8x8的图像patch需要公用同一个描述符,描述符的维度是D。

试验

后面补充

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SuperPoint 论文详解 的相关文章

  • 黄金矿工--回溯算法

    LeetCode 1219 黄金矿工 你要开发一座金矿 地质勘测学家已经探明了这座金矿中的资源分布 并用大小为 m n 的网格 grid 进行了标注 每个单元格中的整数就表示这一单元格中的黄金数量 如果该单元格是空的 那么就是 0 为了使收

随机推荐

  • CloudQuery到底是一款什么样的数据库管理工具

    前言 随着时代和企业的发展 单一或少数的数据库 繁杂错乱的操作工具已无法满足开发者对数据获取和操作的新要求 那么 有没有一款工具可以将所有数据库归纳到一个平台中 有没有办法让开发者操作数据更加高效便捷 我们曾在市面上找了很久 但仍没有找到一
  • pytorch:把图片数据转化成tensor

    摘要 在图像识别当中 一般步骤是先读取图片 然后把图片数据转化成tensor格式 再输送到网络中去 本文将介绍如何把图片转换成tensor 一 数据转换 把图片转成成torch的tensor数据 一般采用函数 torchvision tra
  • 让人抓狂的 URL 重定向的 Cookie 问题

    想象下面两行伪代码 1 setCookie 2 redirect new web url 首先设置一个Cookie 然后重定向到另外一个网址 这个网址跟当前网站的域名不同 在多数情况下这两行代码执行毫无问题 cookie 正确保存到浏览器
  • SHELL 基础 入门(三) Bash 快捷键 命令执行顺序,详解通配符

    目录 Bash 常用快捷键 输入输出重定向 lt lt 用法 输出重定向 命令执行顺序 分号 通配符 传统通配符 常用字符 强调 生成序列 Bash 常用快捷键 Ctrl A 把光标移动到命令行开头 Ctrl E 把光标移动到命令行尾 Ct
  • 国产FPGA芯片,机遇与挑战并存

    FPGA是可以先购买再设计的 万能 芯片 FPGA Field Programmable Gate Array 现场可编程门阵列 是在硅片上预先设计实现的具有可编程特性的集成电路 它能够按照设计人员的需求配置为指定的电路结构 让客户不必依赖
  • 数据结构中缀表达式转换为后缀表达式并求值,pta试题,小白心酸史

    数据结构中缀表达式转换为后缀表达式并求值 1 中缀表达式转换为后缀表达式并求值 100分 把题目给出中缀表达式转换为后缀表达式输出 并求后缀表达式的值 为简单起见 我们约定 1 输入的中缀表达式一定是合法的 并且只含数字 四种运算符 和小括
  • 我的opencv3.1+vs2015配置

    opencv下载地址 www opencv org 下载opencv3 1版本 其实是个压缩文件zip 然后解压 解压文件说明 build 里是各平台的jar dll sources 是源文件 头文件 框架等等 设置环境变量 右键我的电脑
  • R语言介绍

    1 R的统计计算和绘图功能十分强大 2 R是一种区分大小写的解释型语言 R的赋值符号是 lt 而不是传统的 号 3 x lt rnorm 5 表示了一个名为x的向量对象 它包含5个来自标准正态分布的随机偏差 4 注释是有 开头 再 之后的任
  • 使用canvas进行图片压缩(前端图片压缩核心处理)

    一 原理 实际上就是利用canvas进行重新绘制 1 先将图片的file文件转成baseURL 2 创建一个image标签去接收文件获取图片的宽高和比例 3 创建canvas画布设置画布的大小 4 将图片绘制到canvas上面 5 对can
  • vue-json-viewer展示JSON内容

    文章目录 01 前言 02 接口内容预处理 03 json viewer使用 01 前言 最近写的一个小案例 需要将接口返回的JSON内容显示在页面上 要求是要和控制台返回的JSON内容一样能点击展开显示或者关闭 当时只知道处理内容格式 后
  • [AHK]输入法状态提示,中文状态提示“中”,英文状态提示“EN”

    输入法状态提示 中文状态提示 中 英文状态提示 EN 切换中英文状态的时候 或者用鼠标切换到另一个编辑窗口的时候再次提示 循环如此 功能 输入法状态提示 环境 win10 搜狗输入法 输入法状态切换用默认的shift键 作者 sunwind
  • 【100天精通Python】Day52:Python 数据分析_Numpy入门基础与数组操作

    目录 1 NumPy 基础概述 1 1 NumPy的主要特点和功能 1 2 NumPy 安装和导入 2 Numpy 数组 2 1 创建NumPy数组 2 2 数组的形状和维度 2 3 数组的数据类型 2 4 访问和修改数组元素 3 数组操作
  • s7300的db块详细说明_s7-300与s7-200的mpi通信中db块的详细使用

    哪位有s7 300与s7 200的mpi通信中db块与v区对应详细资料 另外我想问一下想用组态软件与s7 300做mpi通信 然后用e277模块与s7 300做dp通信同时组态软件也能访问s 200不知道可不可以 硬 软件组态方面应该怎样连
  • vim的超详细使用方法

    文章目录 vim的四种模式 命令模式详解 移动光标 快速定位光标 复制 粘贴 剪切和删除 撤销和恢复 编辑模式详解 底行模式详解 保存和退出 文件内容的替换 显示行号 paste 查找和搜索 可视化模式 批量注释 批量去注释 vim是史上最
  • VC6.0无法安装,老是未响应

    今天我安装VC6 0 然后发现老是安装的进候 刚进去就程序未响应 特别的郁闷 弄了好多次 开始是怀疑是安装程序的问题 后来我换了一个版本 还是不可以 最后想想可能是因为我的WINDOWS分区的原因 因为我的系统本身是VISTA的 后来装双系
  • 利用傅立叶变换进行图像处理的代码演示

    前面有篇文件介绍过使用DCT 离散余弦 变换进行图像处理的例子 Matlab一探DCT IDCT变换在图像压缩中的应用 tugouxp的专栏 CSDN博客绝大多数图像都有一个共同特征 平坦区域和内容缓慢变化的区域占据一幅图像的大部分 而细节
  • Win11蓝屏代码IRQL NOT LESS OR EQUAL的处理方法

    蓝屏错误IRQL NOT LESS OR EQUAL是用户常见的系统故障了 升级到Win11新系统也遇到了同样的问题 那么Win11蓝屏问题IRQL NOT LESS OR EQUAL要如何解决 下面就来看看小编整理的解决办法 什么是 IR
  • Java 8: 元空间(Metaspace)

    前言 很多开发者都在其系统中见过 java lang OutOfMemoryError PermGen space 这一问题 这往往是由类加载器相关的内存泄漏以及新类加载器的创建导致的 通常出现于代码热部署时 相对于正式产品 该问题在开发机
  • 解决报错:错误1130- Host xxx is not allowed to connect to this MariaDb server

    在云服务器上面搭建了MariaDb MariaDB是MySQL源代码的一个分支 但是远程链接不上 首先 你要确保服务器安全组3306端口已经开放 在确保端口开放的情况下 如果出现错误代码1130 Host xxx is not allowe
  • SuperPoint 论文详解

    SuperPoint 该论文是 magic leap 公司在18年的一篇工作 而且提供了代码 基于 pytorch 的 不过遗憾的是训练代码和相应的渲染的训练数据没提供 主要思路 本文提出了一个自监督的方式去训练网络来提取特征点以及计算描述