计算机视觉——图像特征提取D2D先描述后检测特征提取算法原理
概述
局部特征提取是计算机视觉中的一个重要任务,它旨在从图像中提取出能够代表图像局部结构和外观信息的特征。这些特征通常用于图像匹配、物体识别、三维重建、跟踪和许多其他应用。传统方法,如尺度不变特征变换(SIFT),首先检测图像中的关键点,然后围绕这些关键点计算描述符,以生成对旋转、尺度和亮度变化具有不变性的局部特征。
然而,随着深度学习的发展,近年来出现了一些新的方法,它们将关键点检测和特征描述符计算结合在一起,以提高效率和性能。以下是一些代表性的方法:
-
SuperPoint:SuperPoint是一种快速且准确的特征点检测和描述符生成网络。它使用了一个轻量级的卷积神经网络,能够在保持高准确度的同时实现实时性能。SuperPoint通过学习图像的局部模式来预测关键点的位置,并生成对应的特征描述符。
-
D2-Net:D2-Net(Descent-based Dense Feature Network)是一种密集特征点检测网络,它使用基于梯度下降的方法来精确定位关键点。D2-Net不仅能够检测到大量的特征点,而且能够为每个特征点生成具有独特信息的描述符。
-
R2D2:R2D2(Region-based Retrieval with Dense Correspondences)是一种基于区域的检索方法,它使用密集对应来生成局部特征描述符。R2D2通过学习图像区域之间的关系来提取特征,这使得它在处理重复纹理和相似结构时具有优势。
这些方法的共同点是它们都利用了深度学习的能力来直接从数据中学习特征点的检测和描述,而不是依赖于手工设计的特征提取算法。这种方法通常能够提供更好的性能,尤其是在处理复杂场景和具有挑战性的视觉任务时。
在实际应用中,这些方法可以根据具体需求进行选择。例如,如果需要实时性能,SuperPoint可能是一个好选择;如果对特征点的精确定位有较高要求,D2-Net可能更适合;而在需要处理具有大量重复纹理的场景时,R2D2可能会有更好的表现。

论文地址:https://arxiv.org/pdf/2005.13605.pdf
D2D

作者提出的核心思想“先描述后检测”是基于这样的观察:特征描述部分本身就包含了大量信息,能够反映图像中某个位置的显著程度。这种方法与传统的先检测关键点再描述的方法相反,它通过先生成大量的密集特征描述,然后从这些描述中筛选出关键点,从而简化了局部特征提取的流程。
在实现这一思想时,衡量特征向量描述的显著性是一个关键问题。以下是一些可能的方法来评估特征描述的显著性:
-
基于梯度信息:图像中的边缘和角点通常是显著的特征。因此,可以通过计算图像梯度的大小和方向来评估特征描述的显著性。在深度学习方法中,可以通过卷积层自动学习到这些梯度信息。
-
基于网络响应:深度神经网络在处理图像时,不同的层会响应图像的不同特征。可以通过分析网络中某一层的激活情况来确定特征的显著性。例如,如果一个特征描述在某个层引起了强烈的响应,那么这个特征可能是显著的。
-
基于特征一致性:在多个图像或多个视角下保持一致的特征更有可能是显著的。可以通过比较不同图像中相同位置的特征描述来评估其显著性。
-
基于特征的区分能力:如果一个特征描述能够很好地区分不同类别或不同对象,那么它可能是显著的。可以通过评估特征描述在分类或识别任务中的表现来衡量其显著性。
-
基于聚类分析:对大量的特征描述进行聚类分析,可以发现哪些特征描述更具有代表性和区分度。显著的特征描述通常会形成独立的聚类,而不是混杂在其他特征描述中。
-
基于注意力机制:注意力机制可以模拟人类视觉注意力的焦点转移,通过识别网络中最关注的区域来确定特征的显著性。
-
基于全局和局部信息的结合:结合全局图像信息和局部特征描述,可以更全面地评估特征的显著性。例如,一个在全局层面上具有独特性但在局部层面上很常见的特征可能不是显著的。
作者从两个角度来思考这个问题:
1)特征描述要具有绝对显著性,指某位置的特征各维度特征变化大;
作者以特征各维度与均值的平方差来衡量绝对显著性。

2)特征描述要具有相对显著性,指某位置的特征与其周围临近点的特征相比差异性更大;
作者以某特征与临近位置特征的距离之加权和来衡量。

以绝对显著性和相对显著性之积作为某位置是否为关键点的依据,选取Top N个作为最终的关键点。

实验结果
作者的这个思路很简单,也很容易与图像的密集描述特征结合,作者在图像匹配、视觉定位、三维重建三个任务中评价了这种方法
图像匹配的实验结果:

HarNet 和SOSNet 是作者使用的描述方法。在HPatches数据集上的结果显示,使用D2D的方法超越了之前几种SOTA方法,正确配对的关键点更多。
下图为在Aachen Day-Night 数据集上的视觉定位结果,D2D在替换SIFT关键点检测之后大大提高了精度,虽然与最好结果还有一定差距,但这可能是训练数据和使用网络较小的差异造成的。

在ETH SfM数据集上三维重建的实验结果:

使用窄网络D2D的精度显著超越了那些在大数据集上训练的局部特征提取方法的结果。
D2D因为简单,所以速度也很快,使用 HardNet 或者SOSNet作为描述的话参数量也很小,如下图:

总之,D2D打开了一种新思路,特征描述本身就含有关键点的重要性信息,可以作为关键点筛选的依据。
相关文章:
计算机视觉——图像特征提取D2D先描述后检测特征提取算法原理
概述 局部特征提取是计算机视觉中的一个重要任务,它旨在从图像中提取出能够代表图像局部结构和外观信息的特征。这些特征通常用于图像匹配、物体识别、三维重建、跟踪和许多其他应用。传统方法,如尺度不变特征变换(SIFT)…...
The “from“ argument must be of type string. Received undefined——vue报错记录
今天在用机器人打包测试环境时,一直报错: The "from" argument must be of type string. Received undefined 啥意思呐? 百度也没有找到对应的问题所在。 下面写一下我的解决方法: vue.config.js 在vue.config.js中…...
汽车4S行业的信息化特点与BI建设挑战
汽车行业也是一个非常大的行业,上下游非常广,像主机厂,上游的零配件,下游的汽车流通,汽车流通之后的汽车后市场,整个链条比较长。今天主要讲的是汽车流通,汽车4S集团。一个汽车4S集团下面授权代…...
JSX 和 HTML 之间的区别
JSX和 HTML 都是用于创建和构建网页的标记语言,但它们有一些关键的区别。 1. JSX 是 JavaScript 的语法扩展,而 HTML 是一种标记语言。 2. JSX 允许您在语法中包含表达式和函数,而 HTML 只允许静态文本。 3. JSX 通常用于 React 应用程序&…...
AI日报:GPT-4-Turbo正式版自带读图能力;Gemini1.5Pro开放API;SD3将于4月中旬发布;抖音宫崎骏AI特效爆火
欢迎来到【AI日报】栏目!这里是你每天探索人工智能世界的指南,每天我们为你呈现AI领域的热点内容,聚焦开发者,助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解:AIbase - 智能匹配最适合您的AI产品和网站 ὏…...
IDEA 宝贝插件
1. Codota— 代码智能提示 Codota还包含一个网站:https://www.codota.com/code 2.Alibaba Java Code Guidelines— 阿里巴巴 Java 代码规范 3. SequenceDiagram —— 调用链路自动生成时序图 4. google-java-format —— 代码自动格式化...
[C语言][数据结构][链表] 单链表的从零实现!
目录 零.必备知识 1.一级指针 && 二级指针 2. 节点的成员列表 a.数据 b.指向下一个节点的指针. 3. 动态内存空间的开辟 (malloc-calloc-realloc) 一.单链表的实现与销毁 1.1 节点的定义 1.2 单链表的尾插 1.3 单链表的头插 1.4 单链表的尾删 1.5 单链表的头删 1…...
oracle rac打补丁后sqlplus / as sysdba ora-12537
sqlplus / as sysdba 报错: ORA-12537: TNS:connection closed 检查用户属组: [rootrac1 ~]# id oracle uid1102(oracle) gid1101(oinstall) groups1101(oinstall),1102(dba) [rootrac1 ~]# id grid uid1101(grid) gid1101(oinstall) groups1101(oin…...
TCP-IP详解卷一:协议——阅读总结
该内容适合程序员查看 第1章 概述 1.1 引言 WAN全称是 Wide Area Network,中文名为广域网。 LAN全称是 Local Area Network,中文名为局域网。 1.2分层 ICP/IP协议族通常被认为是一个四层协议系统 分层协议应用层Telnet、FTP和e-mail运输层TCP和UDP网…...
【带源码】如何开发一个视频打赏,付费观看视频的系统?
【带源码】如何开发一个视频打赏,付费观看视频的系统?开发指南来了 最近非常火爆的视频打赏系统,有用户端,管理端,代理端 风口来了,系统部署简单,需要详细部署教程的可以留下评论哦!…...
Linux--进程的概念(一)
目录 一、冯诺依曼体系结构二、操作系统2.1 什么是操作系统2.2 操作系统的意义 三、进程3.1 进程的基本概念3.2 描述进程——PCB3.3 进程和程序的区别3.4 task_struct-PCB的一种3.5 task_struct的内容分类 四、如何查看进程4.1 通过系统文件查看进程4.2 通过ps指令查看进程 五、…...
大话设计模式——15.观察者模式(Observer Pattern)
简介 也称发布订阅模式(Publish/Subscribe),定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新 UML图: 应用场景: 消息通知组件&#x…...
MySQL 主从复制部署(8.0)
什么是主从数据库 主从数据库是一种数据库架构模式,通常用于提高数据库的性能、可用性和可伸缩性。 它包括两种类型的数据库服务器: 1)主数据库(Master):主数据库是读写数据的主要数据库服务器。所有写操…...
大话设计模式——16.命令模式(Command Pattern)
简介 请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的对象进行执行。命令模式是一种特殊的策略模式,体现多个策略执行的问题,而不是选择的问题 UML图 应用场景 界面选择、键盘、按钮、事件操作都类似命令模式 …...
react17+18 中 setState是同步还是异步更新
在类组件中使用setState,在函数式组件中使用hooks的useState。 setstate目录 1. 类组件1.1 react 17版本1.2 react 18版本 2、函数式组件 1. 类组件 1.1 react 17版本 参考内容:第十一篇:setState 到底是同步的,还是异步的&…...
Unity框架,ET框架8.1版本的打包流程记录
目录 打包代码前置1.必须要安装Visusal Studio 2022的组件,如下图,必须都要进行安装,不然会在代码重构的时候报错,丢失SDK。Rider的版本必须2023及以上 步骤一、使用Rider编辑器打开项目后进行重构项目步骤二、使用HybirdCLR生成A…...
windows访问wsl中的docker
1、启动windows路由转发功能: 找到任务管理器 --》服务–》打开服务–》 ROUTing and Remote Access 2、关闭wsl中linux的防火墙 3、查看docker系统和linux系统的ip和网关 以下面为例 # docker系统 eth0: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu…...
golang主要优缺点
优点 1)采用协程机制,可以很方便的支持高并发,性能还不错。 2)非常易于使用,产出效率很高。 缺点 也是协程机制。程序中一切皆协程,并且自己做了协程调度机制,而不是传统的 线程机制。导致需…...
浅谈Redis和一些指令
浅浅谈一谈Redis的客户端 Redis客户端 Redis也是一个客户端/服务端结构的程序。 MySQL也是一个客户端/服务端结构的程序。 Redis的客户端也有多种形态 1.自带命令行客户端 redis-cli 2.图形化界面的客户端(桌面程序,web程序) 像这样的图形…...
AI大模型探索之路-应用篇1:Langchain框架概述—快速构建大模型应用
目录 一、什么是LangChain? 二、LangChain解决了哪些问题? 三、LangChain总体架构 四、代码实践样例 总结 一、什么是LangChain? 为大模型应用提供简便之道。 LangChain,专为构建庞大的语言模型应用程序设计的框架࿰…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
Linux中INADDR_ANY详解
在Linux网络编程中,INADDR_ANY 是一个特殊的IPv4地址常量(定义在 <netinet/in.h> 头文件中),用于表示绑定到所有可用网络接口的地址。它是服务器程序中的常见用法,允许套接字监听所有本地IP地址上的连接请求。 关…...
7种分类数据编码技术详解:从原理到实战
在数据分析和机器学习领域,分类数据(Categorical Data)的处理是一个基础但至关重要的环节。分类数据指的是由有限数量的离散值组成的数据类型,如性别(男/女)、颜色(红/绿/蓝)或产品类…...
第21节 Node.js 多进程
Node.js本身是以单线程的模式运行的,但它使用的是事件驱动来处理并发,这样有助于我们在多核 cpu 的系统上创建多个子进程,从而提高性能。 每个子进程总是带有三个流对象:child.stdin, child.stdout和child.stderr。他们可能会共享…...
