2021-06-30 SuperGlue

3 篇文章 0 订阅

总结

  • match匹配两组local特征点寻找匹配&拒绝不可匹配点
  • 求解可微optimal transport问题来解分配问题
  • 用图网络来预测optimal transport 的cost

Formulation

  • 关键点和描述子组成一个local feature (p,d)
  • feature集合定义一张image
  • 预测两张图的匹配矩阵

网络结构

  • attentional GNN
  • optimal matching layer

Attentional GNN

把特征点位置和描述编码成一个问量,通过attention层创建更有表示能力的描述子

关键点编码

位置embed到高维,类似NLP中的位置编码
把描述子和位置编码直接加在一起的特征点信息编码x=d+MLP§,而不是向量连接

Multiplex GNN

两类edge,一个image内的和两个image之间的
用message passing formulation来在这两类edge上传递信息
图网络的输入层node有高维的feature状态(上文说的特征点信息编码x)
图网络的每一层,都会聚合所有edge来的信息,更新每个node的representation
聚合方式为 x=x+MLP(x || m)

Attentional聚合

信息m = ∑ \sum ( α v \alpha v αv),其中a是key-query相似度的softmax(q k)
Key, query. Value都是图神经网络中deep feature的线性投影
q = Wx+b
[k v] = [W1 W2] x + [b1 b2]

注意到W和b对所有keypoints都是一样的。但会考虑multi-head attention

注意一开始x中就编码了key point位置和描述子(appearance )所以信息的传递索引也都考虑了两者

最终的matching descriptor是最后一层feature的线性投影
f = W x + b

Optimal matching layer

创建一个score矩阵并用dustbin扩增,用sinkhorn算法选代找到最优的partial assignment

Score Prediction

定pairwise score为matching descriptor的相似性
S = <f, f>. 注意S是一个矩阵
注意到,原始的描述子是normalize过的,而matching descriptor没有normalize

Occlusion and Visibility

通过扩增Dustin的方式允许不近配的点

Sinkhorn算法

上述优化问题的解是optimal transport between离散分布a和b with score S

  • 要看下匹配问题

Loss

设计上,GNN和optimal matching layer都是可微的,可以从 match backpropagate回visual descriptor
通过有监督的方式,有直值匹配和不匹配点
最小化assignment p 的negative log-likelihood
Loss = - ∑ \sum log P匹配 - ∑ \sum log P不匹配

  • 要看下loss设计思路

Comparison to related work

Todo.实验

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SuperPoint和SuperGlue是一种基于深度学习的图像配准方法。SuperPoint用于提取图像中的关键点,而SuperGlue用于将两幅图像的关键点进行匹配和配准。 由于官方发布的SuperPoint和SuperGlue模型是基于COCO数据集训练的,可能与实际业务中的数据存在差距。因此,可以使用开源的pytorch-superpoint和pytorch-superglue来实现自己的图像配准任务。 具体步骤如下: 1. 安装pytorch-superpoint和pytorch-superglue库。 2. 使用pytorch-superpoint库提取图像中的关键点。可以参考该库的文档和示例代码来了解如何使用。 3. 使用pytorch-superglue库进行关键点的匹配和配准。该库提供了一些预训练的模型,可以直接使用或进行微调。 4. 根据实际需求,对配准结果进行后处理,例如去除错误匹配或优化配准结果。 下面是一个示例代码,演示了如何使用pytorch-superpoint和pytorch-superglue进行图像配准: ```python import torch import cv2 from superpoint import SuperPointFrontend from superglue import SuperGlueFrontend # 加载SuperPoint模型 superpoint = SuperPointFrontend(weights_path='superpoint.pth') # 加载SuperGlue模型 superglue = SuperGlueFrontend(weights_path='superglue.pth') # 读取两幅图像 image1 = cv2.imread('image1.jpg') image2 = cv2.imread('image2.jpg') # 提取关键点 points1, desc1, heatmap1 = superpoint.run(image1) points2, desc2, heatmap2 = superpoint.run(image2) # 进行关键点匹配和配准 matches, conf = superglue.run(image1, image2, points1, points2) # 可以根据需要对配准结果进行后处理 # 输出配准结果 print(matches) ``` 请注意,上述代码仅为示例,实际使用时需要根据具体情况进行适当的修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值