论文题目“Pixel-Perfect Structure-from-Motion with Featuremetric Refinement”(通过深度特征度量优化提高 SFM精度),发表于 ICCV 2021 (oral)。
注意到本文的作者是Paul‑Edouard Sarlin[1],该作者近两年发表了几项高质量的成果,如Superglue (CVPR 2020, 点击查看) / Pixloc (CVPR 2021, 点击查看)。
本文算法开源:https://github.com/cvg/pixel-perfect-sfm, 作者提到,该算法作为COLMAP优化建图插件后续会集成到视觉定位工具包hloc[2]中。
论文:https://arxiv.org/abs/2108.08291
在 3D 重建任务中,跨视角可复检的特征点提取尤为重要。原有的 SFM 框架中,特征提取之后其位置并不会发生改变,若这个提取过程中出现了误差(噪声干扰),势必造成后续几何结构的误差累计。
本文针对以上 SFM 框架中的两个步骤进行了优化:1. 特征匹配后使用 Featuremetric (深度特征度量)对特征点位置进行优化;2. 增量重建过程中通过类似的 Featuremetric 进行 BA(重投影误差变为 Featuremetric 误差)。本文算法通过大量实验验证,其在三角化/ SFM 等任务中的表现非常优秀。
总览:本文的优化框架可在任何基于局部特征点的 SFM 流程中使用,首先使用 CNN 提取图像特征图(dense features),根据稀疏的特征匹配得到初始的 tracks(一个track是指,同一个3D点在不同图像中的2D观测),调整每一个 track 对应的特征点在图像中的位置;根据调整后的位置进行 SFM 重建,重建过程中的 BA 优化残差由重投影误差变为 Featuremetric 误差。
输入:
张 SFM 建图图像
输出:场景地图,包括 3D 点
,相机位姿
,相机内参
3.1. 特征位置调整
图像表征:图像的像素强度表示对视角/光照等因素的变化较为敏感,本文采用了 CNN feature 的方式表示一张图像。具体的,对于图像
,使用S2DNet[3]提取到一个
维特征图
。注:特征图在通道上做了
归一化以提高泛化性,特征图的长宽与原图相同。
目标函数:对于每一个 track,调整它包含的 2D 特征点的位置,构建如下 featurematric 误差:
其中
表示特征点
与
之间的关联置信度,该置信度可由特征描述子的余弦距离
表示。可以看到,该过程对于每一个 track 是独立进行的,计算效率非常高。另外,为了保证例如视觉定位的性能,需要保持特征点复检率不发生较大改变,此时需要限制特征优化的最大变动距离
,其中
为未调整的原始位置,
表示特征点位置调整的最大像素距离,实验中设为 8(pixels)。
上述过程完成了特征点位置的优化,随后进行几何校验以及增量或者全局重建。对于重建过程,本文设计了如下BA残差:
其中
为 Huber 核函数,
是某个固定的参考向量,它被定义为距离 track
观测均值特征最近点那个向量。
实验平台:8 CPU cores (Intel Xeon E5-2630v4) and one NVIDIA RTX 1080 Ti。
在给定相机内参与位姿的情况下评价本文算法的生成的地图点精度。上述表格中 Accuracy 表示 3D 点满足不同阈值的比例,Completeness 表示 3D 点被成功三角化并满足阈值的比例(占总3D点的比例)(类似于召回率)。本文算法相比于 Patch Flow[4],能够提升在严格阈值下的精度与完整度,且均比未优化的精度与完整度高。
上述表格展示了平移量的 AUC 精度曲线,本文算法相比于未优化与 Patch Flow[4] 均有很大优势,SuperPoint 特征相比于其他特征点提取器提升力度明显。
本文算法在两个任务中获得显著的性能提升,其中 stereo 任务评价的是图像之间的相对位姿精度,这对于全局 SFM 的位姿初值计算尤为重要;multi-view 任务是针对包含
张图像的集合进行增量位姿优化,该任务评价的是该集合内部相机的相对位姿。
下图是算法优化前后特征点位置的分布,可以看到本文方法得到的特征点位置(绿点)在不同视角间是保持一致的,而原始的特征点(蓝点)容易受到提取噪声的干扰,导致了 SFM 重投影的 2D 点(红点)出现了不一致性(错位)。
4.4.1. 消融实验
4.4.2. 耗时
上图展示了本文算法进行 SFM 的耗时统计,相比 Patch Flow,本文算法耗时大幅度降低;在 Aachen Day-Night v1.1 数据集测试,7K 图像规模耗时小于 2 小时。
[1] Paul‑Edouard Sarlin 主页: https://psarlin.com [2] hloc: https://github.com/cvg/Hierarchical-Localization [3] S2DNet: Learning accurate correspondences for sparse-todense feature matching, ECCV 2020, https://github.com/germain-hug/S2DNet-Minimal
[4] Patch Flow: Mihai Dusmanu, Johannes L. Schonberger, and Marc Pollefeys. Multi-View Optimization of Local Feature Geometry. ECCV, 2020, https://github.com/mihaidusmanu/local-feature-refinement