COLMAP

Schönberger 2016 · 论文

一句话总结 — 事实上的标准开源增量式Structure-from-Motion与多视角立体(Multi-View Stereo)流水线(“Structure-from-Motion Revisited”,CVPR 2016),在整个3D视觉领域被用作离线重建和真值位姿的主力工具。

问题

到2016年,增量式SfM——逐张注册图像,同时三角化结构并进行光束法平差——已经是处理无序照片集合的主流策略,但”鲁棒性、精度、完整性和可扩展性仍然是构建真正通用流水线的关键问题”。已有系统(Bundler、VisualSFM)常常无法注册大比例的可注册图像,或因误注册和漂移而产生破碎的模型。Schönberger和Frahm重新审视了增量式流水线的每个阶段并加以强化,最终发布为COLMAP。

方法与架构

该流水线包含两个阶段:对应关系搜索(特征提取、匹配、几何验证,产生一个场景图)和增量式重建(初始化、通过PnP进行图像注册、三角化、光束法平差、外点过滤)。论文的贡献强化了每一个步骤:

cosα=taXabtaXab2tbXabtbXab2\cos\alpha=\frac{t_{a}-X_{ab}}{\left\|t_{a}-X_{ab}\right\|_{2}}\cdot\frac{t_{b}-X_{ab}}{\left\|t_{b}-X_{ab}\right\|_{2}}

),外加正深度(视差可行性检验)和低于阈值 tt 的重投影误差。对剩余测量值的递归处理能从被错误合并成一条轨迹的多个独立点中恢复出来。

E=jρj(π(Pc,Xk)xj22)E=\sum_{j}\rho_{j}\left(\left\|\pi\left(P_{c},X_{k}\right)-x_{j}\right\|_{2}^{2}\right)

优化对象是位姿 PcSE(3)P_c \in \mathrm{SE}(3) 和点 XkR3X_k \in \mathbb{R}^3(局部BA中使用Cauchy损失 ρj\rho_j;用Ceres配合稀疏直接求解器或PCG求解)。局部BA在每次注册后运行;全局BA仅在模型增长到一定百分比后才运行。COLMAP在VisualSFM的BA前重三角化(pre-BA RT)基础上增加了BA后重三角化,并在BA→RT→过滤之间迭代,直到被过滤掉的观测数量减少,以此对抗漂移。

一个配套的基于PatchMatch的MVS阶段(“Pixelwise View Selection for Unstructured Multi-View Stereo”,ECCV 2016)对输出进行稠密化;整个系统以维护良好的C++/CUDA代码库形式发布,附带GUI、CLI以及pycolmap绑定。

实验结果

在共计144,953张无序互联网照片、17个数据集上,与Bundler、VisualSFM、Theia和DISCO进行了评测:

对SLAM的意义

COLMAP是评判SLAM系统和学习式重建方法的参照基准,也是生成相机位姿以训练和评估这些方法的标准工具——大多数NeRF与3D高斯溅射(Gaussian Splatting)流水线都是从COLMAP位姿开始的。理解它的增量式设计有助于厘清SLAM在哪些方面有所不同(顺序输入、实时预算、回环检测),而其随图像数量增长的单帧代价,正是全局SfM(GLOMAP)、GPU并行(InstantSfM)以及前馈式(DUSt3R、VGGT)后继方法所要解决的痛点。

相关条目