📝笔记:ICCV 2021最佳学生论文 | COLMAP 优化建图组件 Pixel-Perfect SFM

论文题目“Pixel-Perfect Structure-from-Motion with Featuremetric Refinement”(通过在特征尺度优化进行高精度 SFM),获得 ICCV 2021 最佳学生论文。

本文的优化框架可在任何基于局部特征点的 SFM 流程中使用,使用 CNN 提取图像特征图(dense features),根据稀疏的特征匹配得到初始的 tracks,调整每一个 track 对应的特征点在图像中的位置;根据调整后的位置进行 SFM 重建,重建过程中的 BA 优化残差由重投影误差变为 Featuremetric 误差。

背景

注意到本文的作者是Paul‑Edouard Sarlin,该作者近两年发表了几项高质量的成果,如superglue(CVPR 2020)/pixloc(CVPR 2021)。

本文算法开源:https://github.com/cvg/pixel-perfect-sfm , 该算法后续会集成到视觉定位工具包hloc中。

论文:https://arxiv.org/abs/2108.08291

项目:https://psarlin.com/pixsfm

SLIDES: https://psarlin.com/pixsfm/assets/pixsfm_slides.pdf

摘要

在 3D 重建任务中,跨视角的可复检的特征点检测尤为重要。原有的 SFM 框架中,特征提取之后其位置并不会发生改变,若这个过程中出现了一定误差,势必造成后续几何结构的误差累计。

本文针对以上 SFM 框架中的两个步骤进行了优化:1. 特征匹配后使用 Featuremetric 对特征点位置进行优化;2. 增量重建过程中通过类似的 Featuremetric 进行 BA(重投影误差变为 Featuremetric 误差)。本文算法通过大量实验验证,其在 SFM 任务中表现非常优秀。

关键技术点

总览:本文的优化框架可在任何基于局部特征点的 SFM 流程中使用,首先使用 CNN 提取图像特征图(dense features),根据稀疏的特征匹配得到初始的 tracks,调整每一个 track 对应的特征点在图像中的位置;根据调整后的位置进行 SFM 重建,重建过程中的 BA 优化残差由重投影误差变为 Featuremetric 误差。

输入:\(N\) 张 SFM 建图图像 \(\{\mathbf{I}_i\}\)

输出:场景地图,包括 3D 点 \(\{\mathbf{P}_i\} \in \mathbb{R}^3\),相机位姿 \(\left(\mathbf{R}_i, \mathbf{t}_i\right) \in \mathbf{SE}(3)\),相机内参 \(\{\mathbf{C}_i\}\)

特征位置调整

图像表征:图像的像素强度表示对视角/光照等因素的变化较为敏感,本文采用了 CNN feature 的方式表示一张图像。具体的,对于图像 \(\mathbf{I}_i\),使用S2DNet提取到一个 \(D\) 维特征图 \(\mathbf{F}_{i} \in \mathbb{R}^{W \times H \times D}\)。注:特征图在通道上做了 \(L_2\) 归一化以提高泛化性,特征图的长宽与原图相同。

目标函数:对于每一个 track,调整它包含的 2D 特征点的位置,构建如下 featurematric 误差:

\[E_{\mathrm{FKA}}^{j}=\sum_{(u, v) \in \mathcal{M}(j)} w_{u v}\left\|\mathbf{F}_{i(u)}\left[\mathbf{p}_{u}\right]-\mathbf{F}_{i(v)}\left[\mathbf{p}_{v}\right]\right\|_{\gamma}\]

其中 \(w_{u,v}\) 表示特征点 \(u\)\(v\) 之间的关联置信度,该置信度可由特征描述子的余弦距离 \(\mathbf{d}_{u}^{\top} \mathbf{d}_{v}\) 表示。可以看到,该过程对于每一个 track 是独立进行的,计算效率非常高。另外,为了保证例如视觉定位的性能,需要保持特征点复检率不发生较大改变,此时需要限制特征优化的最大变动距离 \(\left\|\mathbf{p}_{u}-\mathbf{p}_{u}^{0}\right\| \leq K\),其中 \(\mathbf{p}_{u}^{0}\) 为未调整的原始位置,\(K\) 表示特征点位置调整的最大距离,实验中设为 8(pixels)。

注意 :上式中有一个小歧义需要指出。因为\(u\)\(v\)来自于不同的图像,如它们分别位于图\(i\)与图\(k\)。但是上式中将特征图的下标都写成了\(\mathbf{F}_{i}\),这显然是有问题的。针对该问题,我在GitHub提交了一个#issue31咨询了作者的看法,作者认同了我的理解。以下是作者的回复截图:

BA 优化

上述过程完成了特征点位置的优化,随后进行几何校验以及增量或者全局重建。对于重建过程,本文设计了如下误差函数:

\[E_{\mathrm{FBA}}=\sum_{j} \sum_{(i, u) \in \mathcal{T}(j)}\left\|\mathbf{F}_{i}\left[\Pi\left(\mathbf{R}_{i} \mathbf{P}_{j}+\mathbf{t}_{i}, \mathbf{C}_{i}\right)\right]-\mathbf{f}^{j}\right\|_{\gamma}\]

其中 \(\gamma\) 为 Huber 核函数,\(\mathbf{f}^{j}\) 是某个固定的参考向量,它被定义为距离 track \(j\) 观测均值特征最近点那个向量。

\[\begin{aligned} \mathbf{f}^{j} &=\underset{\mathbf{f} \in\left\{\mathbf{f}_{u}^{j}\right\}}{\operatorname{argmin}}\left\|\boldsymbol{\mu}^{j}-\mathbf{f}\right\| \\ \text { 其中 } \boldsymbol{\mu}^{j} &=\underset{\boldsymbol{\mu} \in \mathbb{R}^{D}}{\operatorname{argmin}} \sum_{\mathbf{f} \in\left\{\mathbf{f}_{u}^{j}\right\}}\|\mathbf{f}-\boldsymbol{\mu}\|_{\gamma} \end{aligned}\]

实验

实验平台:8 CPU cores (Intel Xeon E5-2630v4) and one NVIDIA RTX 1080 Ti。

3D 三角化

在给定相机内参与位姿的情况下评价本文算法的生成的地图点精度。上述表格中 Accuracy 表示 3D 点满足不同阈值的比例,Completeness 表示有 3D 点被成功三角化并满足阈值的比例(类似于召回率)。本文算法相比于 Patch Flow,能够提升在严格阈值下的精度与完整度,且均比未优化的精度与完整度高。

相机位姿估计

上述表格展示了平移量的 AUC 精度曲线,本文算法相比于未优化与 Patch Flow 均有很大优势,SuperPoint 特征相比于其他特征点提取器提升力度明显。

SFM 性能

本文算法在两个任务中获得显著的性能提升,其中 stereo 任务评价的是图像之间的相对位姿精度,这对于全局 SFM 的位姿初值计算尤为重要;multi-view 任务是针对包含 \(N\) 张图像的集合进行增量位姿优化,该任务评价的是该集合内部相机的相对位姿。

下图是算法优化前后特征点位置的分布,可以看到本文方法得到的特征点位置(绿点)在不同视角间是保持一致的,而原始的特征点(蓝点)容易受到提取噪声的干扰,导致了 SFM 重投影的 2D 点(红点)出现了非一致。

其他

  1. 消融实验

  1. 耗时

上图展示了本文算法进行 SFM 的耗时统计,相比 Patch-Flow,本文算法耗时大幅度降低;在 Aachen Day-Night v1.1 数据集测试,7K 图像规模耗时小于 2 小时。

结论

  1. 提供了一种用于优化 SFM 建图精度的方案,能够大幅度提升建图精度与后续的视觉定位精度。
  2. 本文算法在进行 BA 时需要占用较大的运行内存空间(feature maps),特别是面对大规模场景重建时,具体使用时需要权衡计算量与精度。