hloc

Sarlin 2019 · コード

一行要約 — HF-Netの階層的位置推定レシピ(NetVLADによる粗い場所検索の後、SuperPoint + SuperGlueによる精密なローカルマッチングとPnPを行う)を実装したオープンソースツールボックスであり、コミュニティ標準の視覚位置推定パイプラインとなった。

問題

HF-Netによる粗から密への位置推定パラダイム(“From Coarse to Fine: Robust Hierarchical Localization at Large Scale”, CVPR 2019)は、グローバル記述子、検索、ローカル特徴、マッチング、SfM三角測量、PnPという多段階システムであり、各研究グループがこの連鎖をゼロから再実装することで、結果の再現と比較が困難になっていた。大規模な位置推定は高速(クエリをデータベース全画像と照合するわけにはいかない)かつ高精度(検索だけでは粗い、メートルレベルの位置しか得られない)でなければならない。hlocはこの連鎖全体を保守されたソフトウェアとしてパッケージ化し、最先端の位置推定を工学プロジェクトではなく設定の選択にする。

手法とアーキテクチャ

このツールボックスは、階層的位置推定パイプラインをエンドツーエンドで実行するスクリプト群として構成されている(リポジトリ自身のパイプライン説明に基づく):

  1. ローカル特徴抽出を全データベース画像とクエリ画像に対して行う — SuperPoint、DISK、D2-Net、SIFT、またはR2D2をhloc/extractors/経由で使用。
  2. 参照3D SfMモデルの構築: (検索または事前SfMモデルにより)共視性のあるデータベース画像ペアを見つけ、SuperGlueまたはより高速なLightGlue(hloc/matchers/)でマッチングし、COLMAP(v1.3以降は純粋なpycolmapで、COLMAPのインストールは不要)で新しいSfMモデルを三角測量する。LiDARスキャンが幾何情報を提供する場合(例: InLoc)、このステップはスキップされる。
  3. 粗い検索: グローバル記述子 — NetVLAD、AP-GeM/DIR、OpenIBL、またはMegaLoc — が各クエリに関連するデータベース画像の上位kk件を検索する(例: Aachenではトップ50のNetVLAD)。
  4. 精密マッチング: 検索された画像に対してクエリ特徴をマッチングする(学習型マッチャー、または比率/距離/相互チェックを用いたNN、密なLoFTRマッチングもサポート)。
  5. 位置推定: 得られた2D-3D対応関係はPnP + RANSACソルバーに渡されて6自由度クエリ姿勢が得られ、モジュラーAPIによりすべての推定器パラメータが公開される。
  6. 可視化とデバッグ: 各実行では、クエリごとに検索された画像、マッチ、RANSACインライア数などの姿勢ソルバー統計がログ出力される。

特徴とマッチはレイアウトが文書化されたHDF5ファイルとして交換されるため、任意のPyTorch特徴抽出器/マッチャーはBaseModelをサブクラス化することで組み込むことができる — これはまさにDISK、LightGlue、LoFTR、SOSNet、CosPlaceなどが各バージョン(v1.0の2020年からv1.4の2023年まで)を通じて取り込まれてきた方法である。あらかじめ用意されたhloc/pipelines/はAachen Day-Night、InLoc、Extended CMU Seasons、RobotCar Seasons、4Seasons、Cambridge Landmarks、7-Scenesをカバーし、同じスタックが順序付けられていない画像からのSfM再構成をゼロから実行する。

実験結果

リポジトリに報告されている数値(visuallocalization.netで評価)、ベンチマークの3つの精度しきい値内で位置推定できたクエリの割合:

SLAMにおける意義

リロカリゼーション、ループクロージャ、マップベースの位置推定を構築する人にとって、hlocは出発点となる参照実装である: 粗から密へのパラダイムを最先端の学習型コンポーネントと既知の良好なデフォルト設定によって実運用化し、オフラインのCOLMAPマッピングとオンラインのリロカリゼーションを1つの特徴スタックで橋渡しする。多くの研究システムやプロダクトプロトタイプがhlocを直接、あるいは自前の位置推定スタックのテンプレートとして使用しており、クエリごとのインライア数のpickleログは、位置推定エンジニアリングの日常業務である失敗解析を異例なほど容易にしている。

関連ノート