论文阅读笔记《Nctr: Neighborhood Consensus Transformer for Feature Matching》
核心思想
本文提出一种融合邻域一致性的Transfomer结构来实现特征点的匹配(NCTR)。整个的实现流程和思想与SuperGlue相似,改进点在于考虑到了邻域一致性。邻域一致性在许多的传统图像匹配和图匹配任务中都有应用,他基于一个很重要的假设,就是对于一对匹配点,其邻域内的其他点也大概是匹配的,至少是相似程度很高的。而在SuperGlue中注意力机制是面向所有的特征点进行信息聚合,而没有考虑到局部邻域的一致性约束。为弥补上述缺陷,作者提出了NCTR
实现过程
首先,与SuperGlue相同输入的是源图AAA和目标图BBB中关键点的视觉特征diA,djBd_i^A,d_j^BdiA,djB及坐标特征piA,pjBp_i^A,p_j^BpiA,pjB,其中坐标特征pip_ipi包含关键点的二维坐标(xi,yi)(x_i,y_i)(xi,yi)和置信度得分cic_ici,上述特征均有特征提取和描述器提供,如SuperPoint。位置特征经过一个编码器后与视觉特征相加构成初始的输入特征xi(0)x_i^{(0)}xi(0),编码器由多层感知机构成。
然后,要基于注意力机制进行特征聚合。注意力机制包含自注意力(self-attention)和交叉注意力(cross-attention),给定第lll层网络的两个输入xs(l)x_s^{(l)}xs(l)和xt(l)x_t^{(l)}xt(l),对于自注意力层而言,两个输入是来自于同一个图(源图或目标图)的特征;而对于交叉注意力层而言,两个输入分别来自两个图的特征。自注意力层和交叉注意力层是交替进行的,这模拟了人类在进行匹配时会相互比对的过程。
下面简述一下注意力机制的计算过程,这个是由ViT实现的。输入的特征xs(l)x_s^{(l)}xs(l)和xt(l)x_t^{(l)}xt(l)(对于自注意力层两者相同)经过一个LayerNorm层分别被线性映射到Q(l),K(l),V(l)Q^{(l)},K^{(l)},V^{(l)}Q(l),K(l),V(l),其中xs(l)→Q(l)x_s^{(l)}\rightarrow Q^{(l)}xs(l)→Q(l),而xt(l)→K(l),V(l)x_t^{(l)}\rightarrow K^{(l)}, V^{(l)}xt(l)→K(l),V(l)。我们称Q(l),K(l),V(l)Q^{(l)},K^{(l)},V^{(l)}Q(l),K(l),V(l)分别为查询向量、键向量和值向量,他们经过下式可以得到注意力计算方法
注意力可以理解为利用QKTQK^TQKT计算向量之间的相似性作为权重对VVV向量进行加权求和,一组Q(l),K(l),V(l)Q^{(l)},K^{(l)},V^{(l)}Q(l),K(l),V(l)向量得到一个注意力结果,我们称之为一个头Head\mathbf{Head}Head。
按照相同的方法,分别构建hhh个头,并将其拼接起来经过一个线性映射层就得到了多头注意力
再将多头注意力和输入的xs(l)x_s^{(l)}xs(l)拼接起来经过线性映射层得到前向输入网络结果
最后将前向输入网络的结果与输入的xs(l)x_s^{(l)}xs(l)进行残差连接(相加)就得到该层注意力网络的输出结果
其将作为下一层注意力网络的输入继续进行计算。上述过程都是SuperGlue所采用的注意力机制,而本文是将邻域一致性引入上述计算过程。
邻域一致性模块如上图(a)所示,输入的特征xs(l)x_s^{(l)}xs(l)和xt(l)x_t^{(l)}xt(l)经过内积计算和softmax层得到对应性矩阵S~\widetilde{S}S,这并不是最终要求解的匹配关系矩阵。对源图中的特征点分别随机生成对应的颜色向量Rc∈RM×cR_c\in \mathbb{R}^{M\times c}Rc∈RM×c,MMM表示源图中特征点数量,ccc表示颜色向量的长度。这里的颜色向量可不是图像中RGB这样的颜色特征,而是用于表示匹配关系的表示方式。将源图对应的颜色向量RcR_cRc与对应性矩阵的转置S~T\widetilde{S}^TST相乘,就得到变换后的颜色向量TcT_cTc,作为目标图的颜色向量。源图和目标图中的每个关键点都作为一个节点,根据上文计算得到注意力权重作为相似性度量,并选择最相似8个节点作为每个关键点的邻域,将中心节点与8个邻域节点相连构成一个图。源图和目标图对应的边特征分别为EsE_sEs和EtE_tEt(计算方式文中没有介绍),将两幅图边特征和颜色向量分别经过GNN进行信息传递,得到新的节点颜色特征表示
两个节点颜色特征表示之间的差异就表示了两幅图之间的邻域一致性,差异越小,一致性越强。计算两个节点的颜色特征表示的差值,并经过一个多层感知机就得到了邻域一致性信息FFNCFF_{NC}FFNC
将邻域一致性信息FFNCFF_{NC}FFNC与上文介绍的前向输入网络的特征FFTRFF_{TR}FFTR级联起来,在经过一个线性映射层就得到带有邻域一致性的注意力聚合信息
与普通注意力机制相同,通过与输入特征相加得到最终的结果
带有邻域一致性的注意力机制和普通的注意力机制的实现方式和比较如图(b)所示。
最后,对聚合后的特征进行匹配,源图和目标图对应的特征向量xA,xB\mathbf{x}^A,\mathbf{x}^BxA,xB,计算内积得到相似性得分矩阵SSS,并通过Sinkhorn算法得到匹配矩阵PPP。将匹配得分PijP_{ij}Pij低于阈值的点去掉,按照互为最近邻的原则选择最终的匹配结果。损失函数是对匹配矩阵进行负指数似然损失计算
创新点
- 设计了一种邻域一致性模块,并将其引入到注意力机制计算过程中
算法总结
本文在SuperGlue的基础上提出一种带有邻域一致性的注意力机制,邻域一致性的计算思路与《DEEP GRAPH MATCHING CONSENSUS》这篇文章非常相似,实验结果来看是有一定的性能提升的,但计算复杂度较大,对于大规模的特征匹配将会存在计算成本过高的问题。
相关文章:

论文阅读笔记《Nctr: Neighborhood Consensus Transformer for Feature Matching》
核心思想 本文提出一种融合邻域一致性的Transfomer结构来实现特征点的匹配(NCTR)。整个的实现流程和思想与SuperGlue相似,改进点在于考虑到了邻域一致性。邻域一致性在许多的传统图像匹配和图匹配任务中都有应用,他基于一个很重要…...

上位机系统Ubuntu 20.04与下位机arduino UNO通讯
目录一、安装arduino IDE1.1安装方法1.1.1终端里命令下载(不推荐)1.1.2官网下载(不推荐)1.1.3论坛下载(不推荐)1.1.4系统应用商店(推荐!)1.2配置项目文件位置1.3测试IDE功…...
hive面试题
1、什么是Hive Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能(HQL) 2、Hive的意义(最初研发的原因) 避免了去写MapReduce,提供快速开发的…...
【CUDA】《CUDA编程:基础与实践》CUDA加速的关键因素
CUDA事件计时 CUDA提供了一种基于CUDA事件(CUDA event)的计时方式,可用来给一段CUDA代码(可能包含主机代码和设备代码)计时。 对计时器的封装: class CUDATimeCost { public:void start() {elapsed_time_ 0.0;// 初始化cudaEventcheckCudaRuntime(cud…...
数据结构【Golang实现】(四)——双向循环链表
目录0. 定义节点1. IsEmpty()2. Length()3. AddFromHead()4. AddFromTail()5. Insert()6. DeleteHead()7. DeleteTail()8. Remove()9. RemoveByValue()10. Contain()11. Traverse()0. 定义节点 type DLNode struct {Data anyPrev, Next *DLNode }// DoublyLoopLinkedLis…...

【Redis】高可用架构之哨兵模式 - Sentinel
Redis 高可用架构之哨兵模式 - Sentinel1. 前言2. Redis Sentinel 哨兵集群搭建2.1 一主两从2.2 三个哨兵3. Redis Sentinel 原理剖析3.1 什么哨兵模式3.2 哨兵机制的主要任务3.2.1 监控(1)每1s发送一次 PING 命令(2)PING 命令的回…...

图片的美白与美化
博主简介 博主是一名大二学生,主攻人工智能研究。感谢让我们在CSDN相遇,博主致力于在这里分享关于人工智能,c,Python,爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主,博主会继续更新的,…...

面试官:关于CPU你了解多少?
CPU是如何执行程序的? 程序执行的基本过程 第一步,CPU 读取「程序计数器」的值,这个值是指令的内存地址,然后 CPU 的「控制单元」操作「地址总线」指定需要访问的内存地址,接着通知内存设备准备数据,数据准…...
UI自动化测试-Selenium的使用
文章目录 1. 环境搭建1.1 入门示例1.2 元素操作常用方法1.3 浏览器操作常用方法1.4 获取元素信息常用方法1.5 鼠标操作常用方法1.6 键盘操作常用方法1.7 下拉选择框操作2. 元素定位2.1 id定位2.2 name定位2.3 class_name定位2.4 tag_name定位2.5 link_text定位2.6 partail_link…...

嵌入式学习笔记——STM32的USART相关寄存器介绍及其配置
文章目录前言USART的相关寄存器介绍状态寄存器:USARTX->SR具体位代表的含义实际代码数据寄存器 USARTX->DR波特率寄存器 USARTX->BRR控制寄存器 (USART_CR)控制寄存器1(USART_CR1)控制寄存器2(USART_CR2)GPIO…...

Android setContentView流程分析(一)
对于做Android App的小伙伴来说setContentView这个方法再熟悉不过了,那么有多少小伙伴知道它的调用到底做了多少事情呢?下面就让我们来看看它背后的故事吧? setContentView()方法将分为两节来讲: 第一节:如何获取De…...

doris数据库操作数字遇到的问题
关于doris数据库Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。…...

3.13文件的IO操作
一.文件1.定义文件一般指的是存储在硬盘上的普通文件形如:txt.jpg.mp4,rar等这些文件在计算机中,文件可能是一个广义的概念,不仅可以包含普通文件,还可以包含目录(也就是文件夹.把目录称为目录文件)在操作系统中,还会用文件来描述一些其他的硬件设备或者软件资源比如网卡,显示器…...

ffmpeg使用
1 下载FFmpeg安装 官网地址:https://www.ffmpeg.org/download.html#build-windows 进入网址,点击下面红框部分 点击下面范围进行下载,下载速度有点慢,等等吧! 下载成功后,解压后,复制bin的路…...
spark中的并行度(分区数)/分区器如何确定
源头RDD有自己的分区计算逻辑,一般没有分区器,并行度是根据分区算法自动计算的,RDD的compute函数中记录了数据如何而来,如何分区的hadoopRDD,根据XxxinputFormat.getInputSplits()来决定,比如默认的TextInputFormat将文…...

00后女生“云摆摊”两周赚1.5万,实体店转战线上真的能赚钱吗?
最近,山东临沂的00后女生利用小程序在线上“云摆摊”卖水果,两周赚1.5万,引发网友热议。不少人发出质疑的声音:年轻人不要有稳定的工作不做,去摆摊;网上开店成本低,开实体店结果就难说了&#x…...
华为OD机试题 - 最优资源分配(JavaScript)| 机考必刷
更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:最优资源分配题目输入输出描述备注示例一输入输出说明示例二输入…...
利用python判断字符串是否为回文
1 问题 如何用python判断字符串是否为回文。 2 方法 用两个变量left,right模仿指针(一个指向第一个字符,一个指向最后一个字符),每比对成功一次,left向右移动一位,right向左移动一位,…...

GDB 调用之ptype、set variable
今天在公司的时候,排查一个问题,创建l3 lif 失败,查看各种日志发现是用key去创建的 lif失败了,日志里指示key为空,导致的创建失败。原因为一个结构体比基线的多了一些东西,导致版本不对,既而计算…...

并发编程---阻塞队列(五)
阻塞队列一 阻塞队列1.1.阻塞队列概念1.2.阻塞队列API案例1.2.1. ArrayBlockingQueue1.2.1.1.抛出异常1.2.1.2.返回布尔1.2.1.3.阻塞1.2.1.4.超时1.2.2.SynchronousQueue二 阻塞队列应用---生产者消费者2.1.传统模式案例代码结果案例问题---防止虚假唤醒2.2.⽣产者消费者防⽌虚…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...