论文阅读《LoFTR: Detector-Free Local Feature Matching with Transformers》

论文地址:https://arxiv.org/pdf/2104.00680.pdf
代码地址:https://github.com/zju3dv/LoFTR


背景

  本文提出了一种新的局部图像特征匹配方法,通过先在粗层次上建立像素级密集匹配,然后在更细的层次上进行细化,并利用transformer的自注意层和交叉注意力层来获取基于两幅图像的特征描述符。本文的创新点在于Transformer提供的全局感受野使得该方法能够在低纹理区域产生密集匹配。


模型结构

在这里插入图片描述
  基于特征检测器的检测方法可以减少进行匹配时的搜索空间,而在无纹理或重复纹理地区,特征检测器难以检测出有效的特征,这回极大影响后续的匹配过程的效率;
在这里插入图片描述
  无检测器(Detector free)的方法通过建立像素级别的密集匹配来解决这个问题,通过从密集匹配中保留置信度较高的匹配来避免特征检测。然而使用CNN来提取的密集特征的感受野有限,在无纹理区域的效果较差。而人类在这些区域会同时考虑局部信息与全局信息;
  基于此,本文提出一个Local Feature Transformer(LoFTR):先在低分辨率的特征图上进行密集匹配,然后保留置信度较高的匹配,然后将其细化到高分率的密集匹配;同时使用自注意力与交叉注意力来得到更加具有特异性的匹配特征;LoFTR可以在弱纹理、运动模糊与重复纹理区域产生较高质量的匹配;

局部特征提取

  使用权值共享的FPN结构的CNN特征提取模块从两幅图像中得到 1 8 \frac{1}{8} 81 原图大小的低分辨率的特征图 F ~ A 与 F ~ B \tilde{F}^{A} 与 \tilde{F}^{B} F~AF~B,同时得到 1 2 \frac{1}{2} 21 原图大小的高分辨率的特征图 F ^ A 与 F ^ B \hat{F}^{A} 与 \hat{F}^{B} F^AF^B ;CNN的局部空间不变性较适合用于局部特征提取;

局部特征转换(LoFTR)模块

  得到低分辨率的特征图 F ~ A 与 F ~ B \tilde{F}^{A} 与 \tilde{F}^{B} F~AF~B 后,将其与位置送进局部特征转换模块得到具有特异性的匹配特征 F ~ t r A 与 F ~ t r B \tilde{F}_{t r}^{A} 与\tilde{F}_{t r}^{B} F~trAF~trB,局部特征转换模块包含位置编码模块自注意力与交叉注意力特征增强模块

位置编码模块

  受到DETR的启发,采用sin函数进行位置编码,将位置信息编码成特定的向量,与输入的 F ~ A 与 F ~ B \tilde{F}^{A} 与 \tilde{F}^{B} F~AF~B 展开后的特征进行融合,融合后的特征既同时包含位置信息与深度特征信息;

自注意力模块与交叉注意力模块

  此处不再赘述,可以参考博主上一篇博客“论文阅读《SuperGlue: Learning Feature Matching with Graph Neural Networks》”中的GNN模块的解读,此处简单讲讲Transformer;
在这里插入图片描述
Transformer

  Transformer 由顺序连接的注意力层组成,其核心是注意力模块的使用,Transformer的输入为query、key、value,与数据检索的过程类似,数据库的的数据为value,对于每一条数据 V 其对应的索引键值为向量K,先由查询向量与键值向量求相似度,再由相似矩阵来对value中的V向量加权求和,得到最后的输出,这个过程也被称为图神经网络中的“消息传递”。如式1所示:
Attention ⁡ ( Q , K , V ) = softmax ⁡ ( Q K T ) V (1) \operatorname{Attention}(Q, K, V)=\operatorname{softmax}\left(Q K^{T}\right) V\tag{1} Attention(Q,K,V)=softmax(QKT)V(1)
在这里插入图片描述

Linear Transformer
  若查询向量 Q 与键值 K 均拥有N条,且每个特征的长度为 D ,则求相似性矩阵时候的计算复杂度为 O ( N 2 ) O(N^{2}) O(N2),这时候需要使用Linear Transformer来降低计算相似度,将计算复杂度降低到了 O ( N ) O(N) O(N), 其中 e l u ( . ) elu(.) elu(.) 表示核函数:
s i m ( Q , K ) = ϕ ( Q ) ⋅ ϕ ( K ) T   ϕ ( . ) = e l u ( . ) + 1 (2) sim(Q, K) = \phi(Q) \cdot \phi(K)^{T}\\ \ \\ \phi(.)=elu(.)+1 \tag{2} sim(Q,K)=ϕ(Q)ϕ(K)T ϕ(.)=elu(.)+1(2)
在这里插入图片描述

粗粒度(低分辨率)匹配

  经过L层自注意力模块与交叉注意力模迭代特征增强,得到的输出匹配特征可以用于匹配,可以参考SuperGlue中的将其转换为可微的最优传输问题来处理,也可以使用dual-softmax来处理,由输出向量计算匹配得分矩阵:
S ( i , j ) = 1 τ ⋅ ⟨ F ~ t r A ( i ) , F ~ t r B ( j ) ⟩ (3) \mathcal{S}(i, j)=\frac{1}{\tau} \cdot\left\langle\tilde{F}_{t r}^{A}(i), \tilde{F}_{t r}^{B}(j)\right\rangle\tag{3} S(i,j)=τ1F~trA(i),F~trB(j)(3)
  若采用求解最优传输的方式来进行匹配,则依然参考博主上一篇博客“论文阅读《SuperGlue: Learning Feature Matching with Graph Neural Networks》”中的最优匹配模块的解读,再次不再赘述;
  此外,还可以在得分矩阵 S 的两个维度上进行softmax得到匹配概率矩阵 P c \mathcal{P}_{c} Pc
P c ( i , j ) = softmax ⁡ ( S ( i , ⋅ ) ) j ⋅ softmax ⁡ ( S ( ⋅ , j ) ) i (4) \mathcal{P}_{c}(i, j)=\operatorname{softmax}(\mathcal{S}(i, \cdot))_{j} \cdot \operatorname{softmax}(\mathcal{S}(\cdot, j))_{i}\tag{4} Pc(i,j)=softmax(S(i,))jsoftmax(S(,j))i(4)
筛选匹配对
  基于置信度来筛选置信度高于 θ c \theta_{c} θc 的匹配点,并使用相互最近邻准则(左右一致性检查+最优与次优有一定距离)来剔除外点,如式5所示:
M c = { ( i ~ , j ~ ) ∣ ∀ ( i ~ , j ~ ) ∈ MNN ⁡ ( P c ) , P c ( i ~ , j ~ ) ≥ θ c } (5) \mathcal{M}_{c}=\left\{(\tilde{i}, \tilde{j}) \mid \forall(\tilde{i}, \tilde{j}) \in \operatorname{MNN}\left(\mathcal{P}_{c}\right), \mathcal{P}_{c}(\tilde{i}, \tilde{j}) \geq \theta_{c}\right\}\tag{5} Mc={(i~,j~)(i~,j~)MNN(Pc),Pc(i~,j~)θc}(5)

从粗糙到精细的优化模块

在这里插入图片描述

在建立了粗粒度的匹配后,使用一种基于相关性的方法来完成从粗粒度到细粒度的转换;

  1. 首先将粗匹配点对 i ~ 与 j ~ \tilde{i} 与 \tilde{j} i~j~ 投影回细粒度的特征图上 F ^ A \hat{F}^{A} F^A 得到点 i ^ \hat{i} i^ F ^ B \hat{F}^{B} F^B 上得到点 j ^ \hat{j} j^
  2. 在细粒度特征图的特征点处裁剪一个 w × w w\times w w×w 的局部窗口;再将这个局部窗口输入到LOFTR模块(位置编码+自注意力+交叉注意力)中得到一对局部特征图 F ^ t r A ( i ^ ) 与 F ^ t r B ( j ^ ) \hat{F}_{t r}^{A}(\hat{i}) 与 \hat{F}_{t r}^{B}(\hat{j}) F^trA(i^)F^trB(j^)
  3. 计算局部窗口特征图 F ^ t r A ( i ^ ) 与 F ^ t r B ( j ^ ) \hat{F}_{t r}^{A}(\hat{i}) 与 \hat{F}_{t r}^{B}(\hat{j}) F^trA(i^)F^trB(j^) 的相关性得分矩阵;
  4. 通过计算概率分布上的期望,得到 i ^ \hat{i} i^ 在图 I B I_{B} IB 上亚像素精度的匹配特征点的位置 j ^ ′ \hat{j}^{\prime} j^

损失函数

  损失函数包含粗粒度损失与细粒度损失:
L = L c + L f (6) \mathcal{L}=\mathcal{L}_{c}+\mathcal{L}_{f}\tag{6} L=Lc+Lf(6)
其中粗粒度损失对匹配概率矩阵求负对数似然: L c = − 1 ∣ M c g t ∣ ∑ ( i ~ , j ~ ) ∈ M c g t log ⁡ P c ( i ~ , j ~ ) (7) \mathcal{L}_{c}=-\frac{1}{\left|\mathcal{M}_{c}^{g t}\right|} \sum_{(\tilde{i}, \tilde{j}) \in \mathcal{M}_{c}^{g t}} \log \mathcal{P}_{c}(\tilde{i}, \tilde{j})\tag{7} Lc= Mcgt 1(i~,j~)McgtlogPc(i~,j~)(7)
细粒度损失采用 L 2 L_{2} L2 损失,对于每个点 i ^ \hat{i} i^ 在局部窗口的方差 σ 2 ( i ^ ) \sigma^{2}(\hat{i}) σ2(i^) 来对每个匹配点进行加权,从而得到损失函数:
L f = 1 ∣ M f ∣ ∑ ( i ^ , j ^ ′ ) ∈ M f 1 σ 2 ( i ^ ) ∥ j ^ ′ − j ^ g t ′ ∥ 2 (8) \mathcal{L}_{f}=\frac{1}{\left|\mathcal{M}_{f}\right|} \sum_{\left(\hat{i}, \hat{j}^{\prime}\right) \in \mathcal{M}_{f}} \frac{1}{\sigma^{2}(\hat{i})}\left\|\hat{j}^{\prime}-\hat{j}_{g t}^{\prime}\right\|_{2}\tag{8} Lf=Mf1(i^,j^)Mfσ2(i^)1 j^j^gt 2(8)
其中 j ^ g t ′ \hat{j}_{g t}^{\prime} j^gt 是通过使用相机内外参与深度图,将 I A I_{A} IA i ^ \hat{i} i^ 点的特征warp到 I B I_{B} IB j ^ g t ′ \hat{j}_{g t}^{\prime} j^gt 点,与 j ^ ′ \hat{j}^{\prime} j^ 点的特征向量求 L 2 L_{2} L2 损失;


实验结果

在这里插入图片描述

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CV科研随想录

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值