本文最后更新于:2025年10月12日 下午

在3D计算机视觉领域,图像特征匹配技术一直是研究的热点和难点,本文记录 2021年的一篇基于 Transformer 的特征提取匹配算法。

算法概述

LoFTR (LoRa Features Transformers) 是一种无需特征点检测的局部特征匹配算法,由2021年CVPR论文提出。它通过Transformer实现密集特征匹配,在低纹理、重复纹理和光照变化场景下表现优异。

核心思想:使用Transformer在粗粒度上建立特征关联,再在细粒度上优化匹配。

核心创新

LoFTR技术的核心在于摒弃了传统特征检测、描述和匹配的繁琐步骤,转而采用像素级的粗粒度密集匹配方法。这种方法不仅优化了匹配效果,还大大提高了匹配的速度和准确性。更重要的是,LoFTR利用Transformer中的自注意力和交叉注意力层,获取了全局感受野,从而解决了低纹理区域匹配难题。

在复杂的室内和室外环境中,LoFTR展现出了强大的匹配能力。特别是当面对重复纹理和模式时,其优势更为显著。相比基于检测器的SuperGlue方法,LoFTR克服了检测器在寻找对应关系时的局限性,实现了更全面的特征提取和匹配。这一突破性的进展,不仅得益于LoFTR创新的设计,更源于其深入理解了图像匹配的本质。

LoFTR的成功之处不仅在于其技术创新,更在于其设计理念。它借鉴了人类视觉系统的特点,能够结合局部和全局信息进行匹配,从而提高了对应点的准确性。这一特点使得LoFTR在应对复杂环境中的匹配难题时,能够展现出更强大的能力。

组件 描述
无特征点检测 避免传统方法(如SIFT)的特征点检测瓶颈
层次化匹配 粗匹配(1/8分辨率)→ 细匹配(原图)
自注意力机制 通过Transformer增强特征描述符的上下文感知能力
位置编码 使用可学习的位置编码(Linear Position Encoding)

实现原理

LoFTR技术的实现原理主要包括以下几个步骤:

  1. 局部特征提取:LoFTR首先从图像中提取粗略和精细的局部特征图。这些特征图包含了图像中的关键信息,为后续的特征匹配提供了基础。

  2. Transformer处理:将提取的局部特征图展平为一维向量,并添加位置编码。然后,这些特征向量被输入到LoFTR模块中进行处理。该模块包含多个self-attention和cross-attention层,能够捕捉特征之间的依赖关系,并提取出更高级别的特征表示。

  3. 粗粒度匹配:经过Transformer处理后,LoFTR使用可微分匹配层对变换后的特征进行粗粒度匹配。这一步骤通过计算特征之间的相似度,得到初步的匹配结果。

  4. 细粒度匹配:对于每个粗粒度匹配结果,LoFTR从精细特征图中裁剪出局部窗口,并在该窗口内进行细粒度匹配。这一步骤能够进一步提高匹配的准确性,并达到亚像素级别的匹配精度。

graph LR
A[输入图像对] --> B[特征提取]
B --> C[粗粒度特征图 1/8]
C --> D[LoFTR模块]
D --> E[粗匹配]
E --> F[细粒度特征图]
F --> G[精细化匹配]
G --> H[亚像素精度匹配]

摘要

本文提出了一种新的局部图像特征匹配方法。首先在粗粒度上建立图像特征的检测、描述和匹配,然后在精粒度别上细化亚像素级别的密集匹配,而不是依次执行图像特征检测、描述和匹配。与使用cost volume来搜索对应关系的密集方法相比,本文借鉴Transformer使用了自注意层和互注意层来获得两幅图像的特征描述符。这种方法提供的全局接受域使得能够在纹理较少的区域产生密集匹配。

介绍

Feature Detector的使用减少了进行匹配时的搜索空间,其得到的稀疏匹配可以用于大多数任务。然而,Feature Detector可能由于纹理太少、图像模式重复、照明变化等无法提取足够的兴趣点,这个问题在室内环境中尤其突出

最近提出的一些无检测器(Detector-free)的方法试图通过建立像素级密集匹配来解决这个问题:它们从密集匹配中选择置信度较高的匹配,从而避免了特征检测。然而,这些模型中使用的卷积神经网络(CNN)提取的密集特征具有有限的接受域,可能无法处理纹理较少的区域。而人类在这些区域会根据局部信息和全局信息进行匹配。因此,特征提取网络中一个大的接受域是至关重要的

基于此,本文提出了Local Feature Transformers (LoFTR),这是一种新的Detector-free的局部特征匹配方法。受SuperGlue的启发,本文使用了具有自注意层和互注意层的Transformer模块来处理从卷积网络中提取的密集局部特征:本文首先在低特征分辨率(图像维度的1/8)上提取密集匹配,然后从这些匹配中选择具有高可信度的匹配,使用基于相关的方法将其细化到高分辨率的亚像素级别。这样,模型的大接受域使转换后的特征符能够体现出上下文和位置信息,通过多次自注意力和互注意层,LoFTR学习在GT中的匹配先验。另外,本文还采用Linear Attention方法将计算复杂度降低到可接受的水平

LoFTR可以在低纹理、运动模糊或图片模式重复的区域产生高质量的匹配。

核心方法

给定图像对 $𝐼_𝐴,𝐼_𝐵$ ,本文提出用一种 Detector-free 的方法来解决不同位置可能的特征重复问题:LoFTR,如下图所示:

LoFTR有四个组件:

  • 局部特征CNN从图像对中提取粗粒度特征图 $\tilde{F}^{A},\tilde{F}^{B}$ ,以及细粒度特征图 $\hat{F}^{A},\hat{F}^{B}$.
  • 粗粒度的特征经过flatten操作并添加位置编码,然后由LoFTR模块进行处理;该模块中包括自注意和互注意层,并重复 $𝑁_𝑐$ 次
  • 使用可微匹配层来匹配LoFTR模块输出的特征 $\tilde{F}^{A}_{tr},\tilde{F}^{B}_{tr}$ ,得到一个置信矩阵 $𝑃_𝑐$ ,然后根据置信阈值和最近邻算法(MNN)选择匹配对,得到粗粒度的匹配预测 $𝑀_𝑐$
  • 对于每个粗粒度匹配对 $(\tilde{𝑖},\tilde{𝑗})∈𝑀_𝑐$ ,从细粒度级特征图中裁剪一个大小为 $𝑤×𝑤$ 的局部窗口,粗粒度匹配将在此窗口内细化为亚像素级别,并作为最终的匹配预测 $𝑀_𝑓$.

局部特征提取模块

这里使用 FPN 标准卷积结构从两幅图像中提取不同分辨率的特征。CNN具有局部空间不变性,其引入的降采样也减少了LoFTR模块的输入长度

局部特征转换模块(LoFTR)

将局部特征提取模块输出的结果输入LoFTR模块,用于提取与位置和上下文相关的局部特征

粗粒度匹配

LoFTR模块的输出结果可以应用于可微匹配层,这里可以使用像SuperGlue中的最优传输层(OT),也可以使用dual-softmax操作符

首先计算LoFTR输出的特征之间的得分矩阵 𝑆 :

$$ S(i,j)=\frac{1}{\tau}\cdot\left\langle\tilde{F_{tr}^{A}}(i),\tilde{F_{tr}^{B}}(j)\right\rangle $$ 若使用OT进行匹配, 𝑆 可以作为部分分配问题的成本矩阵得到 $𝑃_𝑐$ 。我们还可以在 𝑆 的两个维度上应用softmax,匹配概率 $𝑃_𝑐$ : $$ \mathcal{P}_c(i,j)=\mathrm{softmax}\left(\mathcal{S}\left(i,\cdot\right)\right)_j\cdot\mathrm{softmax}\left(\mathcal{S}\left(\cdot,j\right)\right)_i $$
筛选匹配对

基于置信矩阵 $𝑃_𝑐$ ,可以选择置信度高于 $𝜃_𝑐$ 的匹配,并进一步执行最近邻(MNN)准则,得到粗粒度匹配。粗级别的匹配预测可表示为:

$$ \mathcal{M}_{c}=\{\begin{pmatrix}\tilde{i},\tilde{j}\end{pmatrix}\mid\forall\begin{pmatrix}\tilde{i},\tilde{j}\end{pmatrix}\in\mathrm{MNN}\left(\mathcal{P}_{c}\right),\:\mathcal{P}_{c}\begin{pmatrix}\tilde{i},\tilde{j}\end{pmatrix}\geq\theta_{c}\}. $$

细粒度匹配

在建立粗粒度匹配后,使用粗粒度到细粒度的模块将这些匹配细化到原始图像分辨率。这里使用了一种基于相关性的方法。对于每一个粗粒度匹配 $(\tilde{i},\tilde{j}) $,首先在细粒度特征映射 $\hat{𝐹}^𝐴$ 和 $\hat{𝐹}^B$ 上确定其位置 $(\hat{𝑖},\hat{𝑗}) $,然后裁剪一对大小为 $𝑤×𝑤$ 的局部窗口,将其输入一个较小的 LoFTR 模块( $𝑁_𝑓$ 层),生成以 $\hat{𝑖}$ 和 $\hat{j}$ 为中心的两个经过转换后的局部特征图 $𝐹_{𝑡𝑟}^\hat{𝐴}(𝑖)$ 和 $𝐹_{𝑡𝑟}^\hat{B}(j)$ 。然后将 $𝐹_{𝑡𝑟}^\hat{𝐴}(𝑖)$ 的中心向量与 $𝐹_{𝑡𝑟}^\hat{B}(j)$ 中的所有向量计算相关,并生成一个 heatmap,通过计算概率分布的期望,可以得到了在 $𝐼^𝐵$ 上具有亚像素精度的最终位置 $\hat{𝑗}′$ 。最终所有的匹配项产生细粒度的匹配项 $𝑀_𝑓$

损失函数

总损失包括粗粒度损失和细粒度损失:
$$
\mathcal{L}=\mathcal{L}_c+\mathcal{L}_f
$$

粗粒度损失

粗粒度损失函数是由 OT 层或dual-softmax操作符返回的矩阵 $𝑃_𝑐$ 上的负对数似然损失。本文使用SuperGlue使用相机姿态和深度信息在训练中计算置信矩阵的GT作为监督,将GT粗粒度匹配 $𝑀_𝑐^{𝑔𝑡}$ 定义为两组 1/8 分辨率图像中匹配得的MNN,这种距离可以通过它们的中心位置的投影距离来算得。对于OT,可以使用与SuperGlue 相同的损失公式;当使用dual-softmax操作符进行匹配,损失函数为:

$$ \mathcal{L}_{c}=-\frac{1}{|\mathcal{M}_{c}^{gt}|}\sum_{(\tilde{i},\tilde{j})\in\mathcal{M}_{c}^{gt}}\log\mathcal{P}_{c}\left(\tilde{i},\tilde{j}\right) $$
细粒度损失

细粒度损失采用 L2 损失:对于每个点 $\hat{𝑖}$ ,计算其生成的 heatmap 的方差 $𝜎^2(\hat{𝑖})$ 来测量其不确定性,以使得细化后的匹配不确定性较低,从而得到加权损失函数:

$$ \mathcal{L}_{f}=\frac{1}{|\mathcal{M}_{f}|}\sum_{(\hat{i},\hat{j}^{\prime})\in\mathcal{M}_{f}}\frac{1}{\sigma^{2}(\hat{i})}\left\|\hat{j}^{\prime}-\hat{j}_{gt}^{\prime}\right\|_{2}, $$ 其中$ \hat{𝑗}′_{𝑔𝑡}$ 是通过摄像机姿态和深度信息从 $\hat{𝑖}$ 通过空间变换转换到 $𝐹^{\hat{𝐵}}𝑡𝑟(\hat{𝑗})$ 来计算的,如果变换后超出局部窗口的范围,则忽略

关键技巧

  1. 分辨率选择:处理大尺寸图像时适当降低分辨率(建议800×600)

  2. 置信度过滤:根据场景调整match_threshold(室内0.2,室外0.1)

  3. GPU显存优化

    default_cfg['coarse']['temp_bug_fix'] = True  # 减少显存消耗
    
    
  4. 多尺度匹配:对缩放/旋转场景使用LoFTR-MS版本

⚠️ 注意:LoFTR对GPU显存要求较高(1080p图像需约8GB),建议使用RTX 3090/4090等显卡

原始论文

参考资料



文章链接:
https://www.zywvvd.com/notes/study/image-processing/feature-extraction/loftr/loftr/


“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

LoFTR 基于 Transformer 的特征提取匹配算法
https://www.zywvvd.com/notes/study/image-processing/feature-extraction/loftr/loftr/
作者
Yiwei Zhang
发布于
2025年8月12日
许可协议