XFeat Revisited: Reproducibility and Evaluation of a Lightweight Image Matcher
Lazar Đoković, Aimee Lin
cs.CV, cs.LG
2026-08-10
复现轻量匹配器 XFeat:效率主张在姿态估计上稳稳复现甚至略胜;但两个架构理由被高估,Aachen 定位数字复现不出,跨模态匹配几乎全垮。
XFeat 是 2024 年提出的一个轻量级局部特征提取与匹配网络,目的是在 CPU 这类算力受限的硬件上,用很少的通道和大特征图,把图像匹配(找两幅图里同一个物理点)做得又快又准。它有两种模式:稀疏的 XFeat 只保留最有把握的一批关键点,半稠密的 XFeat 先粗匹配一大批再精修,换取更多几何约束。因为又快又省,机器人、AR 这类实时场景里用得很广。
这篇本身不提新方法,做的是复现研究(reproducibility study):照着论文和补充材料把 XFeat 重新实现一遍、重新训练,再和作者放出的 checkpoint 对比,顺带做原论文没讲透的架构消融,还把评测推到了原论文没碰过的跨模态场景。作者特别区分了「复现」(自己重训的模型)和「再评测」(直接跑作者 checkpoint),因为论文、补充材料和公开代码在主干结构、融合块、训练损失这几处对不上,这让「原版到底指哪个」本身就模糊。
XFeat 的主干是 6 个卷积块,通道极少(4/8/24/64/64/128),先保持分辨率再逐级 stride-2 下采样,只在便宜的位置加通道。描述符分支融合最后三块的输出成一张 1/8 分辨率的 64 维稠密描述符图,一个可靠性头给每个描述符打分;关键点检测走一条独立分支,直接吃灰度图,按 8×8 格子预测关键点。半稠密模式用一个 MLP 精修粗对应。
复现训练用 MegaDepth 加 2 万张 COCO(6:4),图统一缩到 800×600,4 个随机种子、每个模型约 17 小时(L4 GPU)。评测覆盖 MegaDepth-1500、ScanNet-1500(相对位姿)、HPatches(单应估计)、Aachen Day-Night(视觉定位),并扩展到 RUBIK(驾驶场景位姿)、FIRE(视网膜配准)、MTV(热成像与可见光航空)、SRIF(光学/SAR/红外遥感)。
四个原始主张,逐条裁定。
| 主张 | 裁定 | 关键数字 |
| 高效与精度折中(CPU) | 成立 | 稀疏 XFeat 在 M1 Pro 上 11.8 FPS、Acc@10° 76.2,是最快的学习方法;XFeat 86.2 / 6.3 FPS |
| 分离关键点分支有助半稠密 | 部分成立 | 接到主干后,稀疏 MegaDepth AUC@10° 57.9→55.4,XFeat 65.7→53.8(跌幅更大但方差 ±11.9) |
| 单一跳连更好 | 基本不成立 | 去掉跳连 ScanNet 掉、MegaDepth 不掉;ResNet 式与 Input 跳连反而持平或更好 |
| 下游任务有竞争力 | 部分成立 | HPatches 单应估计紧贴原报;Aachen 视觉定位复现不出 |
复现模型在姿态估计上不但跟得上,还略胜一筹:稀疏 XFeat 在 MegaDepth-1500 的 AUC@10° 从原报 56.4 提到 57.9,XFeat 在 ScanNet-1500 从 34.7 提到 37.1。核心的「又快又准」站得住。
架构层面两个设计理由却被高估。分离关键点分支主要在半稠密模式有用,稀疏模式下收益没那么明显;单一跳连的位置根本看不出比替代方案好,作者自卖的「这个位置最优」站不住。最值得注意的复现失败是 Aachen 视觉定位:作者 checkpoint 和复现模型在所有阈值上都低于原报(白天 0.25m/2° 从 84.7 掉到 76.3),差距更可能来自定位管线(HLoc 的检索、参考图构建、几何校验)没说清,不是模型本身的问题。
扩展评测给出了更冷的结论:跨模态基本全垮。驾驶场景 RUBIK 上 XFeat 成功率约 15%,远低于配 LightGlue 的方法的 30% 到 37%;热成像与可见光 MTV 上匹配精度仅约 9%、AUC@20° 约 1.4%(LoFTR 是 27.5%);遥感 SRIF 上光学与光学还能用(S@10 约 40%),光学与红外掉到 12.86%,光学与 SAR 几乎为零(<2%)。半稠密模式在跨模态里不仅没帮上忙,还多塞噪声。
对在用 XFeat 的人,这篇是一份可信的体检报告,结论可以拿来决策。在自然 RGB 图、标准匹配任务上,XFeat 该怎么用还怎么用,效率是真的。但别相信它「跨模态零样本也行」,热成像、SAR 这类严重模态差异必须另做适配。也别把它的两个架构卖点当公理,分离关键点分支只在半稠密场景下有意义,单一跳连基本无关紧要。
对写论文的人,这是一个范本:把「再评测作者权重」和「复现重训」分开做,能精准定位差距来自模型还是评测口径。Aachen 那个例子说明,下游数字复现不出来时,先怀疑评测管线没说清,而不是怀疑模型。
作为复现研究,局限主要是覆盖面和确定性。作者自己指出,在更难的匹配条件下训练方差明显变大(XFeat 接主干的 MegaDepth AUC@10° 方差达 ±11.9),所以几个消融差距的量级要谨慎读。他们没联系原作者确认那些模糊的实现细节,所有取舍都靠论文加代码加经验。Aachen 的差距归因到 HLoc 配置是合理推断但没坐实,因为没能复现出原作者的精确设置。扩展的跨模态评测里,每种数据集的预处理、阈值、归一化都各自不同,绝对数字之间不完全可比。另外 CPU 帧率受硬件影响很大,绝对 FPS 和原报对不上,只能看相对排序。