cvg/GeoCalib

GeoCalib: Learning Single-image Calibration with Geometric Optimization (ECCV 2024)

GeoCalib – 単一画像からのカメラ較正

機能
GeoCalibは、1枚のRGB画像のみから、カメラの内部パラメータ(焦点距離、オプションのレンズ歪み)と重力方向(ワールドアップベクトル)を推定します。 初期推定値を予測するディープラーニングバックボーンと、射影制約を満たすようにパラメータを精密化する幾何最適化ステップを組み合わせています。

重要性
正確な内部パラメータと既知の重力方向は、3次元再構成、AR/VR、ロボティクス、自律航法など、多くの下流タスクに不可欠です。 従来はキャリブレーションパターンや複数画像が必要でしたが、GeoCalibはその要件を不要にし、単一フレームしか撮影できないハンドヘルドデバイス、ドローン、ロボットでのオンザフライ較正を可能にします。

主要コンポーネント

  • geocalib Pythonパッケージ – 軽量推論ライブラリ(Python ≥ 3.9、CUDA任意)。 GeoCalibクラスと、load_imageメソッドおよびcalibrateメソッドを提供します。
  • カメラモデル – 以下の4つのモデルをサポート:
    1. pinhole(焦点距離のみ)
    2. simple_radial(1つの歪み係数k1)
    3. radial(2つの係数k1、k2)
    4. simple_divisional(魚眼レンズ式の単一係数)
  • 部分/複数画像サポート – 既知の内部パラメータや重力を事前情報として入力でき、同じ内部パラメータを共有するバッチを較正したり、剛体に取り付けられたカメラのリグを較正したりできます。
  • トレーニングおよび評価フレームワーク – siclibライブラリ上に構築。 新しいOpenPanoデータセット(≈ 2.8 kパノラマ → ~37 kの切り出しビュー)でのトレーニングや、複数のベンチマーク(LaMAR、MegaDepth、TartanAir、Stanford2D3D)での評価のためのスクリプトが含まれています。

試してみる方法

# パッケージのインストール(編集モード)
git clone https://github.com/cvg/GeoCalib.git && cd GeoCalib
pip install -e .

# 簡単な推論
python - <<'PY'
import torch
from geocalib import GeoCalib
model = GeoCalib().to('cuda' if torch.cuda.is_available() else 'cpu')
img = model.load_image('my_picture.jpg').to(model.device)
out = model.calibrate(img)
print('camera intrinsics:', out['camera'])
print('gravity direction:', out['gravity'])
PY

実行可能なColabノートブックとGradioウェブデモもREADMEからリンクされています。

トレーニングデータ – OpenPano

  • HDRMAPS、PolyHaven、およびLavalの室内HDRデータセットからのHDRパノラマを組み合わせています。
  • トーンマッピングとオプションの歪みシミュレーションの後、パイプラインは~37 kのトレーニング用切り出しと、検証およびテスト用の分割を作成します。
  • スクリプト(siclib.datasets.create_dataset_from_pano)がダウンロード、トーンマッピング、データセット生成を処理します。

パフォーマンス(Area‑Under‑Curve、1°/5°/10°の誤差しきい値)は4つの公開ベンチマークで、GeoCalibはDeepCalib、ParamNet、UVPなどの従来手法を一貫して上回ります。特にロール角とピッチ角の推定で優れています。

典型的なユースケース

  • ロボティクス / ドローン – キャリブレーションボードなしで新しいカメラを機上で較正できます。
  • AR/VR – ハンドヘルドスマートフォンやヘッドマウントディスプレイの内部パラメータを迅速に取得できます。
  • Structure‑from‑motionパイプライン – 単一ビューしか利用できない場合に、バンドル調整の優れた初期推定値を提供します。

次のステップ

  • camera_model引数を使用して、さまざまなカメラモデルを試します。
  • 既知の焦点距離や既知の重力などの事前情報を入力して、制約付きシナリオでのロバスト性を向上させます。
  • Cameraクラスを拡張して、カスタム歪みモデルを追加します。
  • 提供された評価スクリプトを使用して、独自のデータセットでベンチマークを行います。

上記の情報はすべて、リポジトリのREADMEから直接引用しています。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト