D2-Net: A Trainable CNN for Joint Description and Detection of Local Features精读

news2024/11/25 19:30:48

开源代码:D2-Net

1 摘要

在这项工作中,我们解决了在困难的成像条件下寻找可靠的像素级对应的问题。我们提出了一种由单一卷积神经网络发挥双重作用的方法:它同时是一个密集的特征描述符和一个特征检测器。通过将检测推迟到后期阶段,所获得的关键点比基于低层结构早期检测的传统关键点更稳定。我们证明了该模型可以使用从现成的大规模SfM重建中提取的像素对应来训练,而不需要任何进一步的注释。该方法在困难的亚琛昼夜定位数据集和InLoc室内定位基准上都获得了最先进的性能,以及在其他图像匹配和三维重建基准上具有竞争力的性能。

2 理论介绍

与经典的使用两阶段管道的检测然后描述方法相反,我们建议执行密集的特征提取,以获得同时是检测器和描述符的表示。因为检测器和描述符都共享底层表示,所以我们将我们的方法称为D2。我们的方法如图3所示。
该方法的第一步是对输入图像 I I I应用一个CNN F F F,得到一个三维张量 F = F ( I ) F = F (I) F=F(I) F ∈ R h × w × n F∈R^{h×w×n} FRh×w×n,其中 h × w h×w h×w是特征图的空间分辨率, n n n是通道数。

2.1. Feature Description

正如在之前的其他工作[38,44,59]中一样,对三维张量F的最直接的解释是作为一个密集的描述符向量 d d d的集合:
在这里插入图片描述
i = 1 , … … , h i = 1,……,h i=1……h j = 1 , … … , w j = 1,……,w j=1……w。这些描述符向量可以很容易地在图像之间进行比较,以建立对应使用欧氏距离。在训练阶段,这些描述符将被调整,使场景中相同的点产生相似的描述符,即使图像包含强烈的外观变化。在实践中,我们在比较描述符之前对描述符应用L2归一化: d ^ i j = d i j / ∥ d i j ∥ 2 . \hat{\mathbf{d}}_{i j}=\mathbf{d}_{i j}/\|\mathbf{d}_{i j}\|_{2}. d^ij=dij/∥dij2.

2.2 Feature Detection

对三维张量 F F F的另一种解释是作为二维响应D的集合
在这里插入图片描述
其中, k , = , 1 , … … , n k,=,1,……,n k=1……n。在这种解释中,特征提取函数 F F F可以看作是 n n n个不同的特征检测器函数 D k D^k Dk,每个函数产生一个二维响应映射 D k D^k Dk。这些检测响应图类似于在尺度不变特征变换(SIFT)[30]中获得的高斯差分(DoG)响应图或在Harris的角检测器[19]中获得的角度得分图。在我们的工作中,这些原始分数经过后处理,只选择一个位置子集作为输出关键点。下面将描述这个过程。

Hard feature detection
在传统的特征检测器如DoG中,检测图将通过执行空间非局部最大抑制来稀疏化。然而,在我们的方法中,与传统的特征探测器相反,存在多个检测映射 D k ( k = 1 , … … , n ) D^k(k = 1,……,n) Dkk=1……n,并且可以对其中的任何一个检测映射进行检测。因此,对于要检测到的一个点 ( i 、 j ) (i、j) ij,我们要求:
在这里插入图片描述
直观地说,对于每个像素 ( i , j ) (i,j) ij,这对应于选择最卓越的检测器 D k D^k Dk(通道选择),然后验证在该特定检测器的响应映射 D k D^k Dk的位置 ( i , j ) (i,j) ij上是否有一个局部最大值。
在这里插入图片描述

在这里插入图片描述

Soft feature detection
在训练过程中,上述的硬检测程序被软化,以便于反向传播。首先,我们定义了一个软的局部最大值。得分
在这里插入图片描述
其中 N ( i 、 j ) N (i、j) N(ij是像素 ( i 、 j ) (i、j) ij(包括自身)的9个邻居的集合。然后,我们定义软通道选择,它计算一个最大比值。每个模拟通道级非最大抑制的描述符:
在这里插入图片描述
接下来,为了考虑到这两个标准,我们在所有特征图k上最大化这两个分数的乘积,以获得一个单一的得分图:
在这里插入图片描述
最后,通过进行图像级归一化,获得一个像素 ( i , j ) (i,j) ij处的软检测分数 s i j s_{ij} sij
在这里插入图片描述
Multiscale Detection
虽然CNN描述符由于数据增强的预训练而具有一定的尺度不变性,但它们对尺度变化本身并不是不变性,在观点有显著差异的情况下,匹配往往失败。为了获得对尺度变化更稳健的特征,我们建议使用图像金字塔[2],就像通常在手工制作的局部特征探测器[28,30,32]或甚至对某些对象探测器[16]中所做的那样。这只在测试期间执行。
给定输入图像 I I I,构造一个包含三种不同分辨率 ρ = 0.5 、 1 、 2 ρ = 0.5、1、2 ρ=0.512(对应于半分辨率、输入分辨率和双分辨率)的图像金字塔 I ρ I^ρ Iρ,并用于提取每个分辨率下的特征图 F ρ F^ρ Fρ。然后,将较大的图像结构从低分辨率特征图传播到高分辨率特征图,传播方式如下:
在这里插入图片描述
注意,特征映射 F ρ F^ρ Fρ有不同的分辨率。为了实现(8)中的求和,使用双线性插值法将特征图 F γ F^γ Fγ的大小调整到 F ρ F^ρ Fρ的分辨率。通过将上述后处理应用于融合的特征图 F ρ F^ρ Fρ来获得检测。为了防止重新检测特征,我们使用了以下响应门控机制:从最粗的尺度开始,我们标记检测到的位置;这些掩模被上采样(最近邻)到下一个尺度的分辨率;进入标记区域的检测被忽略。

2.2 4. Jointly optimizing detection and description

Training loss
为了训练所提出的模型,它使用一个单一的CNN F F F来进行检测和描述,我们需要一个适当的损失 L L L来共同优化检测和描述目标。在检测的情况下,我们希望关键点在视点或照明的变化下是可重复的。在描述的情况下,我们希望描述符是独特的,以便它们不会不匹配。为此,我们提出了一个扩展的三重边际排名损失,它已成功地用于描述符学习[6,35],以解释检测阶段。我们将首先回顾三重边际排名损失,然后提出我们的联合检测和描述的扩展版本。
给定一对图像 ( I 1 , I 2 ) (I_1,I_2) I1I2和它们之间的对应 c : A ↔ B c: A↔B cAB(其中 A ∈ I 1 A∈I_1 AI1 B ∈ I 2 B∈I_2 BI2),我们的三重边际排名损失寻求最小化相应描述符的距离 d ^ A ( 1 ) \hat{\mathbf{d}}_A^{(1)} d^A(1) d ^ B ( 2 ) \hat{\mathbf{d}}_B^{(2)} d^B(2)同时最大化与其他混杂描述符的距离 d ^ N 1 ( 1 ) \hat{\mathbf{d}}_{N_{1}}^{(1)} d^N1(1) d ^ N 2 ( 2 ) \hat{\mathbf{d}}_{N_{2}}^{(2)} d^N2(2)在这两种图像中,这可能的存在是由于类似的图像结构。为此,我们将相应描述符之间的正描述符距离 p ( c ) p (c) p(c)定义为:
在这里插入图片描述
负距离 n ( c ) n (c) n(c),它解释了其中一个最混杂的描述符 d ^ A ( 1 ) \hat{\mathbf{d}}_A^{(1)} d^A(1) d ^ B ( 2 ) \hat{\mathbf{d}}_B^{(2)} d^B(2),定义为:
在这里插入图片描述
其中,负样本 d ^ N 1 ( 1 ) \hat{\mathbf{d}}_{N_{1}}^{(1)} d^N1(1) d ^ N 2 ( 2 ) \hat{\mathbf{d}}_{N_{2}}^{(2)} d^N2(2)是位于正确对应的平方局部邻域之外的最大负样本:
在这里插入图片描述

对于n2也是如此。边际M的三重边际排名损失可以定义为:
在这里插入图片描述

直观地说,这种三重边际排名损失试图通过惩罚任何可能导致错误匹配分配的混淆描述符来加强描述符的独特性。为了进一步寻求检测的可重复性,我们以以下方式在三重边际排名损失中添加了一个检测项:
在这里插入图片描述
式中, s c ( 1 ) s_c^{(1)} sc(1) s c ( 2 ) s_c^{(2)} sc(2)分别为 I 1 I1 I1 I 2 I2 I2中A点和B点的软检测分数(7),C为 I 1 I_1 I1 I 2 I_2 I2之间所有对应关系的集合。建议的损失基于其检测分数产生所有匹配的边际项m的加权平均值。因此,为了使损失最小化,最独特的对应项(具有较低的边际项)将获得较高的相对得分,反之亦然——相对得分较高的对应项被鼓励使用与其他对应项相似的描述符。

3 结论

在这里插入图片描述

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

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

相关文章

统计代码量

一 windows 在 Windows 系统上,您可以使用 PowerShell 命令行工具来统计项目的代码量。下面是使用 PowerShell 统计项目代码量的步骤: 打开 PowerShell 终端:按下 Win X 键,选择「Windows PowerShell(管理员&#xf…

SQL分库分表

什么是分库分表? 分库分表是两种操作,一种是分库,一种是分表。 分库分表又分为垂直拆分和水平拆分两种。 (1)分库:将原来存放在单个数据库中的数据,拆分到多个数据库中存放。 (2&…

【三.项目引入axios、申明全局变量、设置跨域】

根据前文《二.项目使用vue-router,引入ant-design-vue的UI框架,引入less》搭建好脚手架后使用 需求: 1.项目引入axios 2.申明全局变量 3.设置跨域 简介:axios本质上还是对原生XMLHttpRequest的封装,可用于浏览器和nodejs的HTTP客…

物理层概述(二)重点

目录前言编码与调制(1)基带信号与宽带信号编码与调制编码与调制(2)数字数据编码为数字信号非归零编码【NRZ】曼斯特编码差分曼彻斯特编码数字数据调制为模拟信号模拟数据如何编码为数字信号模拟数据调制为模拟信号物理层传输介质导…

Go语言学习的第一天(对于Go学习的认识和工具选择及环境搭建)

首先学习一门新的语言,我们要知道这门语言可以帮助我们做些什么?为什么我们要学习这门语言?就小wei而言学习这门语言是为了区块链,因为自身是php出身,因为php的一些特性只能通过一些算法模拟的做一个虚拟链&#xff0c…

IT服务管理(ITSM) 中的大数据

当我们谈论IT服务管理(ITSM)领域的大数据时,我们谈论的是关于两件不同的事情: IT 为业务提供的大数据工具/服务 - 对业务运营数据进行数字处理。IT 运营中的大数据 – 处理和利用复杂的 IT 运营数据。 面向业务运营的大数据服务…

Hadoop节点的分类与作用

文件的数据类型文件有一个stat命令元数据信息-->描述文件的属性文件有一个vim命令查看文件的数据信息分类元数据File 文件名 Size 文件大小(字节) Blocks 文件使用的数据块总数 IO Block 数据块的大小 regular file:文件类型&#xff…

YOLOV5中添加CBAM模块详解——原理+代码

目录一、前言二、CAM1. CAM计算过程2. 代码实现3. 流程图三、SAM1. SAM计算过程2. 代码实现3. 流程图四、YOLOv5中添加CBAM模块参考文章一、前言 由于卷积操作通过融合通道和空间信息来提取特征(通过NNNNNN的卷积核与原特征图相乘,融合空间信息&#xff…

模板学堂丨妙用Tab组件制作多屏仪表板并实现自动轮播

DataEase开源数据可视化分析平台于2022年6月正式发布模板市场(https://dataease.io/templates/)。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板,方便用户根据自身的业务需求和使用场景选择对应的仪表板模板,并…

2021年MathorCup数学建模D题钢材制造业中的钢材切割下料问题全过程文档及程序

2021年第十一届MathorCup高校数学建模 D题 钢材制造业中的钢材切割下料问题 原题再现 某钢材生产制造商的钢材切割流程如图 1 所示。其中开卷上料环节将原材料钢卷放在开卷机上,展开放平送至右侧操作区域(见图 2)。剪切过程在剪切台上完成&…

如何使用 NFTScan NFT API 检索单个 NFT 资产

一、什么是 NFT API API 是允许两个应用组件使用一组定义和协议相互通信的机制。一般来说,这是一套明确定义的各种软件组件之间的通信方法。API 发送请求到存储数据的服务器,接着把调用的数据信息返回。开发者可以通过调用 API 函数对应用程序进行开发&…

Qt 单例模式第一次尝试

文章目录摘要单例模式如何使用Qt 的属性系统总结关键字: Qt、 单例、 的、 Q_GLOBAL_STATIC、 女神节摘要 世界上第一位电脑程序设计师是名女性:Ada Lovelace (1815-1852)是一位英国数学家兼作家,她是第一位主张计算机不只可以用来算数的人…

【安装mxnet】

安装mxnet 通过创建python3.6版本的虚拟环境安装mxnet 1、安装anaconda 2、打开Anaconda prompt 3、查看环境 conda env list conda info -e 4、创建虚拟环境 conda create -n your_env_name python3.6 5、激活或者切换虚拟环境 activate your_env_name 6、安装mxnet,下面两…

规划数据指标体系方法(中)——UJM 模型

上文我跟大家分享了关于规划数据指标体系的 OSM 模型,从目标-战略-度量的角度解读了数据指标的规划方法,今天来跟大家讲一讲另一种规划数据指标体系的方法——UJM 模型。 了解 UJM UJM 模型,全称为 User-Journey-Map 模型,即用户…

日常文档标题级别规范

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

使用 try-catch 捕获异常会影响性能吗?大部分人都会答错!

使用 try-catch 捕获异常会影响性能吗?大部分人都会答错!前言一、JVM 异常处理逻辑二、关于JVM的编译优化三、关于测试的约束四、测试代码五、解释模式下执行测试六、编译模式测试七、结论前言 不知道从何时起,传出了这么一句话:…

web实现环形旋转、圆形、弧形、querySelectorAll、querySelector、clientWidth、sin、cos、PI

文章目录1、HTML部分2、css部分3、JavaScript部分4、微信小程序演示1、HTML部分 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&l…

Java定时器Timer的使用

一、Timer常用方法 Timer应用场景&#xff1a; 1、每隔一段时间执行指定的代码逻辑&#xff08;即按周期执行任务&#xff09; 2、指定时间执行指定的代码逻辑 为方便测试并查看运行效果&#xff0c;首先先建一个类并继承TimerTask&#xff0c;代码如下: package timerTest…

[2.1.4]进程管理——进程通信

文章目录第二章 进程管理进程通信&#xff08;IPC&#xff09;为什么进程通信需要操作系统支持&#xff1f;&#xff08;一&#xff09;共享存储&#xff08;1&#xff09;基于存储区的共享&#xff08;2&#xff09;基于数据结构的共享&#xff08;二&#xff09;消息传递什么…

程序员的逆向思维

前要&#xff1a; 为什么你读不懂面试官提问的真实意图&#xff0c;导致很难把问题回答到面试官心坎上? 为什么在面试结束时&#xff0c;你只知道问薪资待遇&#xff0c;不知道如何高质量反问? 作为一名程序员&#xff0c;思维和技能是我们职场生涯中最重要的两个方面。有时候…