D2-Net: A Trainable CNN for Joint Description and Detection of Local Features精读
开源代码:D2-Net
1 摘要
在这项工作中,我们解决了在困难的成像条件下寻找可靠的像素级对应的问题。我们提出了一种由单一卷积神经网络发挥双重作用的方法:它同时是一个密集的特征描述符和一个特征检测器。通过将检测推迟到后期阶段,所获得的关键点比基于低层结构早期检测的传统关键点更稳定。我们证明了该模型可以使用从现成的大规模SfM重建中提取的像素对应来训练,而不需要任何进一步的注释。该方法在困难的亚琛昼夜定位数据集和InLoc室内定位基准上都获得了最先进的性能,以及在其他图像匹配和三维重建基准上具有竞争力的性能。
2 理论介绍
与经典的使用两阶段管道的检测然后描述方法相反,我们建议执行密集的特征提取,以获得同时是检测器和描述符的表示。因为检测器和描述符都共享底层表示,所以我们将我们的方法称为D2。我们的方法如图3所示。
该方法的第一步是对输入图像III应用一个CNN FFF,得到一个三维张量F=F(I)F = F (I)F=F(I),F∈Rh×w×nF∈R^{h×w×n}F∈Rh×w×n,其中h×wh×wh×w是特征图的空间分辨率,nnn是通道数。
2.1. Feature Description
正如在之前的其他工作[38,44,59]中一样,对三维张量F的最直接的解释是作为一个密集的描述符向量ddd的集合:

与i=1,……,hi = 1,……,hi=1,……,h和j=1,……,wj = 1,……,wj=1,……,w。这些描述符向量可以很容易地在图像之间进行比较,以建立对应使用欧氏距离。在训练阶段,这些描述符将被调整,使场景中相同的点产生相似的描述符,即使图像包含强烈的外观变化。在实践中,我们在比较描述符之前对描述符应用L2归一化:d^ij=dij/∥dij∥2.\hat{\mathbf{d}}_{i j}=\mathbf{d}_{i j}/\|\mathbf{d}_{i j}\|_{2}.d^ij=dij/∥dij∥2.
2.2 Feature Detection
对三维张量FFF的另一种解释是作为二维响应D的集合

其中,k,=,1,……,nk,=,1,……,nk,=,1,……,n。在这种解释中,特征提取函数FFF可以看作是nnn个不同的特征检测器函数DkD^kDk,每个函数产生一个二维响应映射DkD^kDk。这些检测响应图类似于在尺度不变特征变换(SIFT)[30]中获得的高斯差分(DoG)响应图或在Harris的角检测器[19]中获得的角度得分图。在我们的工作中,这些原始分数经过后处理,只选择一个位置子集作为输出关键点。下面将描述这个过程。
Hard feature detection
在传统的特征检测器如DoG中,检测图将通过执行空间非局部最大抑制来稀疏化。然而,在我们的方法中,与传统的特征探测器相反,存在多个检测映射Dk(k=1,……,n)D^k(k = 1,……,n)Dk(k=1,……,n),并且可以对其中的任何一个检测映射进行检测。因此,对于要检测到的一个点(i、j)(i、j)(i、j),我们要求:

直观地说,对于每个像素(i,j)(i,j)(i,j),这对应于选择最卓越的检测器DkD^kDk(通道选择),然后验证在该特定检测器的响应映射DkD^kDk的位置(i,j)(i,j)(i,j)上是否有一个局部最大值。


Soft feature detection
在训练过程中,上述的硬检测程序被软化,以便于反向传播。首先,我们定义了一个软的局部最大值。得分

其中N(i、j)N (i、j)N(i、j)是像素(i、j)(i、j)(i、j)(包括自身)的9个邻居的集合。然后,我们定义软通道选择,它计算一个最大比值。每个模拟通道级非最大抑制的描述符:

接下来,为了考虑到这两个标准,我们在所有特征图k上最大化这两个分数的乘积,以获得一个单一的得分图:

最后,通过进行图像级归一化,获得一个像素(i,j)(i,j)(i,j)处的软检测分数sijs_{ij}sij:

Multiscale Detection
虽然CNN描述符由于数据增强的预训练而具有一定的尺度不变性,但它们对尺度变化本身并不是不变性,在观点有显著差异的情况下,匹配往往失败。为了获得对尺度变化更稳健的特征,我们建议使用图像金字塔[2],就像通常在手工制作的局部特征探测器[28,30,32]或甚至对某些对象探测器[16]中所做的那样。这只在测试期间执行。
给定输入图像III,构造一个包含三种不同分辨率ρ=0.5、1、2ρ = 0.5、1、2ρ=0.5、1、2(对应于半分辨率、输入分辨率和双分辨率)的图像金字塔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 FFF来进行检测和描述,我们需要一个适当的损失LLL来共同优化检测和描述目标。在检测的情况下,我们希望关键点在视点或照明的变化下是可重复的。在描述的情况下,我们希望描述符是独特的,以便它们不会不匹配。为此,我们提出了一个扩展的三重边际排名损失,它已成功地用于描述符学习[6,35],以解释检测阶段。我们将首先回顾三重边际排名损失,然后提出我们的联合检测和描述的扩展版本。
给定一对图像(I1,I2)(I_1,I_2)(I1,I2)和它们之间的对应c:A↔Bc: A↔Bc:A↔B(其中A∈I1A∈I_1A∈I1,B∈I2B∈I_2B∈I2),我们的三重边际排名损失寻求最小化相应描述符的距离d^A(1)\hat{\mathbf{d}}_A^{(1)}d^A(1)和d^B(2)\hat{\mathbf{d}}_B^{(2)}d^B(2)同时最大化与其他混杂描述符的距离d^N1(1)\hat{\mathbf{d}}_{N_{1}}^{(1)}d^N1(1)和d^N2(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^N1(1)\hat{\mathbf{d}}_{N_{1}}^{(1)}d^N1(1)和d^N2(2)\hat{\mathbf{d}}_{N_{2}}^{(2)}d^N2(2)是位于正确对应的平方局部邻域之外的最大负样本:

对于n2也是如此。边际M的三重边际排名损失可以定义为:

直观地说,这种三重边际排名损失试图通过惩罚任何可能导致错误匹配分配的混淆描述符来加强描述符的独特性。为了进一步寻求检测的可重复性,我们以以下方式在三重边际排名损失中添加了一个检测项:

式中,sc(1)s_c^{(1)}sc(1)和sc(2)s_c^{(2)}sc(2)分别为I1I_1I1和I2I_2I2中A点和B点的软检测分数(7),CCC为I1I_1I1和I2I_2I2之间所有对应关系的集合。建议的损失基于其检测分数产生所有匹配的边际项mmm的加权平均值。因此,为了使损失最小化,最独特的对应项(具有较低的边际项)将获得较高的相对得分,反之亦然——相对得分较高的对应项被鼓励使用与其他对应项相似的描述符。
3 结论

相关文章:
D2-Net: A Trainable CNN for Joint Description and Detection of Local Features精读
开源代码:D2-Net 1 摘要 在这项工作中,我们解决了在困难的成像条件下寻找可靠的像素级对应的问题。我们提出了一种由单一卷积神经网络发挥双重作用的方法:它同时是一个密集的特征描述符和一个特征检测器。通过将检测推迟到后期阶段…...
Java基础面试题
目录 一,Java基础 1.1.JDK和JRE有什么区别? 1.2.JAVA中的几种基本类型,各占用多少字节? 1.3.和equals的区别是什么? 1.4.final,finally,finalied有什么区别? 1.15.Java 中操作字符串都有哪些类?它们…...
SQL和MongoDB对比
关系型数据库如MySQL和非关系型数据库MongoDB的对应关系:SQLMongoDBdatabasedatabasetablecollectionrowdocument or Bson documentcolumnfieldindexindextable joins$lookupprimary keyprimary key指定任何唯一的列或列组合作为主键主键会自动设置为_id字段aggrega…...
研究链表空间销毁问题
💯💯💯 1.研究链表空间销毁问题 当链表使用完后,需要将链表销毁,那么该如何销毁呢? void SLTDestroy(SLTNode* phead)//销毁单链表 {SLTNode* cur phead;while(cur){free(cur);cur cur->next;} }你…...
Linux面试总结
一.常用命令1.目录切换cd / 切换到根目录cd ../ 切换到上级目录cd ~ 切换到home目录2.查看目录ls 列出当前目录下所有的文件ls [路径]ls / 查看根目录 ls -l 相当于 ll 最常用的命令,用了表的方式列出当前目录的内容3.查看当前目录pwd-4.创建一组空文件touch5.显示文件内容cat6…...
anaconda的linux版本以及jupyter的安装和DataSpell连接linux的jupyter服务器
anaconda安装:官网:https://www.anaconda.com/拷贝下载网址后,在Linux里进行下载:wget https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-x86_64.sh执行sh:./Anaconda3-2022.10-Linux-x86_64.sh 安装完后&a…...
Zookeeper集群和Hadoop集群安装(保姆级教程)
1. HA HA(Heigh Available)高可用 解决单点故障,保证企业服务 7*24 小时不宕机单点故障:某个节点宕机导致整个集群的宕机 Hadoop 的 HA NameNode 存在单点故障的可能,需要配置 HA 解决引入第二个 NameNode 作为备份同…...
利用matlab的newff构建BP神经网络来实现数据的逼近和拟合
假设P是原始数据向量; T是对应的目标向量; 现在需要通过神经网络来实现P->T的非线性映射。 net newff(minmax(P),[16,1],{tansig,purelin},trainlm); net.trainParam.epochs 2000; net.trainParam.goal 1e-5; net init(net); net train(n…...
【经验分享】电路板上电就挂?新手工程师该怎么检查PCB?
小伙伴们有没有经历过辛辛苦苦,加班加点设计的PCB,终于搞定下单制板。接下来焦急并且忐忑地等待PCB板到货,焊接,验证,一上电,结果直接挂了... 连忙赶紧排查,找问题。最终发现,是打过…...
运筹系列68:TSP问题Held-Karp下界的julia实现
1. 介绍 Held-Karp下界基于1tree下界,但是增加了点权重,如下图 通过梯度下降的方法找到最优的π\piπ。 这里用到的1tree有下面几种: 全部点用来生成最小生成树,再加上所有叶子结点第二短的边中数值最大的那个任意选一个点&…...
神经影像信号处理总成(EEG、SEEG、MRI、CT)
目录一. EEG(脑电图)1.1 脑波1.2 伪迹1.2.1 眼动伪迹1.2.2 肌电伪迹1.2.3 运动伪迹1.2.4 心电伪迹1.2.5 血管波伪迹1.2.6 50Hz和静电干扰1.3 伪迹去除方法1.3.1 避免伪迹产生法1.3.2 直接移除法1.3.3 伪迹消除法二. SEEG(立体脑电图)三. CT(计算机断层扫描ÿ…...
ZooKeeper 进阶:基本介绍
zppkeeper是什么 zookeeper是一个高性能、开源的分布式应用协调服务,它提供了简单原始的功能,分布式应用可以基于它实现更高级的服务,比如实现同步(分布式锁)、配置管理、集群管理。它被设计为易于编程,使用文件系统目录树作为数…...
CSS的常用元素属性,显示模式,盒模型,弹性布局
目录 1.常用元素属性 1.1字体属性 设置字体 设置大小 字体粗细 文字样式 1.2文本属性 文字颜色 文字对齐 编辑文本装饰 文本缩进 编辑行高 编辑1.3背景属性 背景颜色 背景位置 背景尺寸 1.4圆角矩形 2.元素的显示模式 2.1块级元素(display:block) 2.…...
【20230308】串口接收数据分包问题处理(Linux)
1 问题背景 一包数据可能由于某些传输原因,经常出现一包数据分成几包的情况。 2 解决方法 2.1 通过设定最小读取字符和读取超时时间 可以使用termios结构体来控制终端设备的输入输出。可以通过VTIME和VMIN的值结合起来共同控制对输入的读取。此外,两…...
数据库复试问题总结
数据库复试问题 由《数据库系统概论(第5版)》总结而来,用于本人研究生复试准备。也欢迎各位准研究生们学习使用。 文章目录数据库复试问题1、三级模式结构及二级映射有什么优点?2、关系模型中的完整性约束是哪几类?3、SQL的特点?…...
Linux操作系统安装——服务控制
个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。个人主页:小李会科技的…...
【C语言】编译+链接
一、程序的翻译环境和执行环境 在ANSI C的任何一种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境,它用于实际执行代码。详解编译链接翻译环境1.组成一个程序的每个源文件通过…...
为「IT女神勋章」而战
大家好,我是空空star,今天为「IT女神勋章」而战 文章目录前言一、IT女神勋章二、绘制爱心1.htmlcssjs来源:一行代码代码效果2.python来源:C知道代码效果3.go来源:复制代码片代码效果4.java来源:download代码…...
JS 动画 之 setInterval、requestAnimationFram
帧率:一秒中内页面刷新的次数,一般为60FPS,每一帧的时间是1000/6016.67ms setInterval 当我们使用setInterval做动画时,有两点会影响动画效果 由于setInterval是异步任务(宏任务),会放到异步队…...
【LeetCode——排序链表】
文章目录排序链表二、解题思路:二.实现的代码总结:排序链表 一道链表排序题,链接在这里 二、解题思路: 解题思路:使用归并排序(用递归实现) 第一步:先找到链表的中间节点 第二步…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇
根据 QYResearch 发布的市场报告显示,全球市场规模预计在 2031 年达到 9848 万美元,2025 - 2031 年期间年复合增长率(CAGR)为 3.7%。在竞争格局上,市场集中度较高,2024 年全球前十强厂商占据约 74.0% 的市场…...
