论文笔记:From Coarse to Fine: Robust Hierarchical Localization at Large Scale
0 Background
视觉定位是指,在大尺度场景下,已知环境地图,给定任意一张图片,计算出该图片对应的位姿。目前比较流行的方法是,由粗到细两步定位。先通过图像检索的方式找到最接近的关键帧,再与该关键帧匹配局部特征。由于关键帧位姿已知,所以通过PnP等方法可以估计出当前帧位姿。两步定位可以避免从所有关键帧中直接匹配带来的时间复杂度,同时避免了将整个环境地图加载进内存带来的空间复杂度。
本文基于作者更早一些的工作《Leveraging Deep Visual Descriptors for Hierarchical Efficient Localization》,在那篇文章中,作者使用MobileNetVLAD实现图像检索,再使用局部特征(FREAK、SIFT等)实现位姿估计。
在看这篇文章之前可以看下 CVPR 2020 的 Long-term Visual Localization 比赛:
其中在手持设备定位方面,排在最前面的就是这篇 HF-Net + SuperGlue 的组合,可以看出其还是很有实战竞争力的。
1 Introduction
在视觉定位领域,基本上有两种主要的方向,一种是所谓的 End-to-end 方法,代表作是 PoseNet,这类方法直接用图片和 pose 真值作为监督学习,对于给定的同一场景的图片可以回归出 6dof 的真值。这种方法优点是数据库很小,一个网络可以覆盖一个很大的场景,而且虽然需要 Pose 真值但并不需要显式的空间三维重建。但是缺点也很明显,这类方法无非是简单地通过学习建立起了图像和pose之间的映射关系,本质上就是一个图像相似度匹配的过程,因此不可能回归出精确地真值以及获得对于未学习场景的迁移能力。
近年来比较成功的方式是基于图像检索的方法来进行视觉定位,该类任务采用由粗到细的定位方式,先用全局特征找到数据库中的关键帧(粗定位),再用局部特征匹配找到 6DoF 的姿态(精定位)。示意图如下:
本文的贡献主要在以下三点:
- 本文的方法在很多大场景定位数据集上达到了 SOTA 的性能
- 本文提出了一个 HF-Net 网络,能够实现上述的由粗到细的多任务特征输出
- 本文展示了在实际场景中知识蒸馏方法在多任务上的有效性
2 Hierarchical Localization
HFNet 的层级定位整体示意图如上图所示,主要有如下过程:
Prior retrieval (先验检索)
首先在所有关键帧数据库中 knn 找到最相近的 k 个关键帧。作者认为由于 SfM 中特征点数远多于关键帧数,因此进行先验检索而不是直接匹配特征点是更加高效的。
Covisibility clustering (共视聚类)
在前述 k 个关键帧所对应的 pose 进行聚类,找到位置最集中的若干关键帧作为候选帧。
所谓分层定位的思想,图上已经解释的很清楚了这里就不再重复了。
Local feature matching (局部特征匹配)
这一部分就是局部特征匹配以及常用的 RANSAC 等几何校验过程完成最终的 3D-2D 匹配。
3 HF-Net (Hierarchical Feature Network)
本文设计的 HF-Net 是一个整合了 Global Feature 和 Local Feature 的多任务网络,能够在一张图直接得到 3 种特征输出(Keypoint、Descriptor、Global Feature)。该网络非常适合 SLAM 这类需要较高性能的任务。
3.1 HF-Net Architecture
本文,作者将图像检索和局部特征提取融合到了统一的网络中,称为HF-Net。使用MobileNet作为基础网络,后面拆分为两个分支,一个是NetVLAD,输出图像的全局描述符,另一个是 SuperPoint,输出关键点和对应的描述子。网络结构如下图所示。训练时,使用教师网络对该轻量级网络进行蒸馏(distillation),使之接近教师网络的精度,同时保持较高的速度。
具体网络结构如上图所示,整体网络与 MobileNetVLAD 一致,总体结构描述如下:
- 在 Backbone 方面:为了速度考虑使用 MobileNet 作为 Backbone;
- 在 Global Feature 方面:使用 MobileNet 的输出加上 NetVLAD 构成全局描述子;
- 在 Local Feature 方面:使用 MobileNet 的前面7个 layer 作为特征输出,然后使用 SuperPoint 的 Decoder 部分输出 Keypoint 和 Dense Local Descriptor。
具体采用的哪一层的输出,代码中是这样给出的:
1 2 | 'global_endpoint': 'layer_18', 'local_endpoint': 'layer_7', |
作者在附录中也给出了详细的网络结构图:
3.2 Training Process
在训练过程,作者采用的是知识蒸馏的方法,简单来说就是用已经确定有效的大网络模型训练得出的结果,作为小网络模型的监督信号,最终实现小网络模型近似模拟大网络的效果。
作者首先谈了这样一个多任务网络训练中的2个主要问题:
问题1:Data scarcity (数据稀缺性)
对于 SLAM 这种特征匹配任务来说,很难获取到足够多的同时包含全局和局部描述的数据,
问题2:Data augmentation (数据增强)
在 SuperPoint 训练过程中使用了大量的数据增强来使得局部特征描述子能够有较强的抗光照、模糊、噪声等等性能。但是过于重的数据增强对于局部特征学习有益的同时却可能对于全局特征的学习造成困难。
针对这样的问题,作者提出的解决方案就是 Multi-task distillation (多任务蒸馏)
方法:Multi-task distillation (多任务蒸馏)
作者根据之前的一篇文章《Multi-task learning using uncertainty to weigh losses for scene geometry and semantics》 的技术,通过设计一个自动学习权重的 loss,一个学生网络 S 可以同时学习到教师网络 t_1、t_2、t_3 的知识,而不需要手动调整权重。
据此作者设计了这样的 loss 函数:
\begin{aligned}L &=e^{-w_{1}}\left\|\mathbf{d}_{s}^{g}-\mathbf{d}_{t_{1}}^{g}\right\|_{2}^{2}+e^{-w_{2}}\left\|\mathbf{d}_{s}^{l}-\mathbf{d}_{t_{2}}^{l}\right\|_{2}^{2} \\&+2 e^{-w_{3}} \text { CrossEntropy }\left(\mathbf{p}_{s}, \mathbf{p}_{t_{3}}\right)+\sum_{i} w_{i}\end{aligned}其中 \mathbf{d}^{g} 和 \mathbf{d}^{l} 分别表示 global 和 local 特征向量,\mathbf{p} 表示 keypoint scores,w_{1,2,3} 是需要自动学习的权重。
这一多任务蒸馏可以适用于很多场景,也可以用任何其他的网络或者传统方法来做。
3.3 Teacher Models
上面的网络设计看起来很不错,不过对于一个知识蒸馏网络来说到底怎么选择 Teacher 呢?对于三个 Teacher 作者做了如下一些实验:
Global Feature
这一部分没什么选择,目前主流的方法就是 NetVLAD。这部分内容在之前博客中(论文笔记:NetVLAD: CNN architecture for weakly supervised place recognition)已经分享过了。
Detectors
作者比较了 DoG、Harris、SuperPoint、LF-Net,从几个 Detector 实验结果来看,作者的结论是,SuperPoint 在可复现性(repeatability)和 MLE 的均衡性上更好。
Descriptors
作者比较了 Root-SIFT、LF-Net、SuperPoint、DOAP 几个主要的 Detector,从几个 Descriptor 的实验结果来看作者结论是:
- DOAP 在 SfM 数据集上全面吊打了其他描述子(由于其在 HPatches 训练没有这一数据集结果)
- SuperPoint 在 Homography 上效果最佳,但是 SuperPoint 只有使用自身提取的 Keypoint 匹配效果才最好,对于 Harris 效果很差
因此这里面 DOAP 和 SuperPoint 各有千秋,作者做了另外一个实验:
通过这一实验作者得出的结论为:
- DOAP 在夜晚的数据集上会有明显的性能下降,效果不太稳定(可能的原因是没有做 SuperPoint 这样复杂的数据增强)
- 对比 NV+SP 和 NV+HF,可以发现 HF-Net 的 local feature 比 SuperPoint 还略有提升,这一点比较奇怪,因为 HF-Net 本来是从 SuperPoint 蒸馏出来的,按理说性能会有小幅下降才对。对此作者的解释为由于 HF-Net 在同一网络加入了 Global Feature 的监督,使得这一部分的整个网络在更深的语义层次特征中获得了监督,从而变相提升了浅层的 Keypoint 特征。
最终作者根据上面的实验综合考虑,HF-Net 使用的是 SuperPoint 提供 Keypoint 和 Descriptor 监督,用 NetVLAD 提供全局特征监督。
4 Experiments
成功的例子示意图:
在公开数据集上的精度评测结果如下:
在公开数据集上的速度评测结果如下:
在 HPatches 上的一些样例:
在 SfM 上的一些样例:
个人小结
作者做了比较详细的实验比较,特别对于 Teacher 的选择上做得比较细。文章动机也比较明确,整体思路一气呵成。在实际应用中,这一网络框架也是比较具有实用价值的。
相关材料
论文下载:
Github 源码:
https://github.com/ethz-asl/hfnet
非常喜欢作者对于文章在应用场景的分析! Rico