复现苹果SOTA图像匹配:用image-matching-toolbox在MegaDepth和ScanNet上跑ASpanFormer相对位姿估计
【免费下载链接】image-matching-toolboxThis is a toolbox repository to help evaluate various methods that perform image matching from a pair of images.项目地址: https://gitcode.com/gh_mirrors/im/image-matching-toolbox
image-matching-toolbox(包名immatch)是一个面向图像特征匹配的统一评测工具箱,为 ASpanFormer、LoFTR、SuperGlue 等主流图像匹配算法提供了标准化接口与基准评测脚本。本文带你用两行命令,在MegaDepth和ScanNet两大经典数据集上复现苹果提出的 SOTA 匹配方法ASpanFormer的相对位姿估计结果。
一、这个图像匹配工具箱能做什么?
工具箱把各种图像匹配方法封装成统一接口,覆盖三类主流技术路线:
| 类型 | 支持的方法 |
|---|---|
| 稀疏关键点匹配 | SuperPoint、D2Net、CAPS、R2D2、Dog-AffNet-HardNet + SuperGlue 匹配器 |
| 半稠密匹配(Transformer 类) | ASpanFormer、LoFTR、COTR |
| 局部细化 | Patch2Pix |
评测能力覆盖 HPatches 匹配/单应估计、InLoc / Aachen / RobotCar 视觉定位,以及本文主角——MegaDepth 与 ScanNet 的相对位姿估计。
下面这张图展示了工具箱输出的一组图像匹配结果(关键点连线),你可以直观理解"匹配"任务长什么样:
二、最快安装方法:3步搭好运行环境 🛠️
完整说明见 docs/install.md,核心步骤如下(环境基于 Python 3.7 + PyTorch 1.7.0 + CUDA 10.2):
1️⃣克隆仓库并初始化子模块(各算法原始实现以子模块形式放在third_party/下):
git clone https://gitcode.com/gh_mirrors/im/image-matching-toolbox cd image-matching-toolbox git submodule update --init2️⃣下载预训练权重。ASpanFormer 的 outdoor/indoor 权重通过软链接指向third_party/aspanformer/weights,统一由下载脚本处理:
cd pretrained bash download.sh3️⃣创建 conda 环境并以开发模式安装:
conda env create -f environment.yml conda activate immatch python setup.py develop环境定义见 environment.yml,权重下载脚本见 pretrained/download.sh。
三、数据准备:MegaDepth 与 ScanNet 如何放置 📦
评测脚本对数据目录有固定约定(详见 docs/evaluation.md):
- MegaDepth:去畸变后的图像放在
data/datasets/MegaDepth_undistort/,测试对信息(1500 张测试图)由 ASpanFormer 官方提供,位于third_party/aspanformer/assets/megadepth_test_1500_scene_info/ - ScanNet:测试场景放在
data/datasets/scannet/test/(含color/图像与pose/位姿文件),测试对与内参信息在third_party/aspanformer/assets/scannet_test_1500/
数据集组织方式沿用了 LoFTR 的官方测试协议,保证结果可直接对比。
四、核心操作:两行命令跑通相对位姿估计 🚀
在仓库根目录执行(完整评测逻辑在 immatch/eval_relapose.py):
# MegaDepth 户外场景(加载 outdoor.ckpt) python -m immatch.eval_relapose --config 'aspanformer' --benchmark 'megadepth' # ScanNet 室内场景(加载 indoor.ckpt) python -m immatch.eval_relapose --config 'aspanformer' --benchmark 'scannet'就这么简单。命令背后发生了三件事:
- 按基准加载配置:脚本读取 configs/aspanformer.yml 中对应的
megadepth/scannet段,自动切换权重与输入分辨率(如 MegaDepth 测试分辨率 1152×1152,ScanNet 用 480×640 的室内权重) - 逐对匹配:调用封装好的 ASpanFormer 模块(immatch/modules/aspanformer.py)预测关键点对
- 估计相对位姿:用 OpenCV 的本质矩阵 + RANSAC(
cv2.findEssentialMat+cv2.recoverPose)从匹配点恢复 R、t,再与真值比对
调试技巧:加--debug只跑前 10 对,加--print_out打印每对的匹配数与误差。
五、读懂结果:AUC 指标意味着什么 📊
评测最终输出形如RelaPose AUC@1/3/5/10/20deg的曲线指标(计算逻辑见 immatch/utils/metrics.py):
- 旋转误差 R_err:预测旋转与真值的角度差(度)
- 平移误差 t_err:平移方向的角度误差(度)
- AUC@θ:误差小于 θ 度的样本累计面积,θ 越小分数越高,说明匹配方法在精细位姿上的能力越强
拿到不同方法的 AUC 曲线后,还可以用仓库自带的 Jupyter 笔记 notebooks/HPatches_MMA_Curves.ipynb 绘制方法对比曲线。
六、新手上手小贴士 💡
- 先用 Notebook 感受接口:notebooks/visualize_matches_on_example_pairs.ipynb 里有 10 行左右的示例,几秒即可看到任意方法的匹配连线
- 换方法只需换配置:
--config参数换成 configs/ 下的任意 yaml 文件名(如loftr、cotr),同一套评测流程即可横向对比 - 显存不够?:ASpanFormer 在 832×832 分辨率下推理,建议 8GB 以上显存的显卡;MegaDepth 段可通过
test_res调低分辨率快速验证流程
小结
image-matching-toolbox 把"装环境 → 放数据 → 跑评测"压缩成了标准化三步,让你无需逐个折腾各家官方仓库,就能快速复现ASpanFormer 图像匹配在 MegaDepth 与 ScanNet 上的 SOTA 相对位姿估计结果,并方便地与 LoFTR、COTR 等方法横向对比。上手试试吧!
【免费下载链接】image-matching-toolboxThis is a toolbox repository to help evaluate various methods that perform image matching from a pair of images.项目地址: https://gitcode.com/gh_mirrors/im/image-matching-toolbox
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考