cvg/GeoCalib
GeoCalib: Learning Single-image Calibration with Geometric Optimization (ECCV 2024)
GeoCalib – 單張影像相機校準
功能 – GeoCalib 接收單張 RGB 影像,並預測相機的內參(焦距,可選畸變)以及場景中的重力方向(即上向量)。它結合了提取幾何線索的深度神經網絡與輕量級幾何最佳化步驟,相比以往純學習方法獲得更高精度。
主要功能
- 支援多種經典相機模型:
pinhole、simple_radial、radial和simple_divisional(魚眼)。 - 可使用部分先驗資訊(已知焦距或已知重力方向)。
- 支援同一相機拍攝的多張影像批次處理,甚至支援多個剛性安裝的相機組成的相機陣列(共享共同的重力方向)。
- 提供極小的僅推理 Python 套件(
geocalib),依賴項目極少(Python ≥ 3.9,PyTorch)。 - 配備 Gradio 網頁示範、Colab 記事本和即時網路攝影機示範。
安裝與快速開始
# 克隆並安裝推理套件
git clone https://github.com/cvg/GeoCalib.git && cd GeoCalib
python -m pip install -e . # 或直接從倉儲 URL 安裝
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)
result = model.calibrate(img)
print('camera intrinsics →', result['camera'])
print('gravity direction →', result['gravity'])
該套件也支援透過 torch.hub 使用:
model = torch.hub.load('cvg/GeoCalib', 'GeoCalib', trust_repo=True)
示範與互動使用
- Colab 記事本 – 在瀏覽器中執行完整流程。
- Gradio 示範 – 部署於 https://veichta-geocalib.hf.space,可上傳影像並查看估計的水平線、上向量及可選視覺化(網格、虛擬盒子等)。
- 網路攝影機示範 –
python -m geocalib.interactive_demo --camera_id 0啟動即時視窗;按鍵可切換視覺化和相機模型。
訓練與評估
- 核心訓練程式碼位於配套庫
siclib中。透過pip install -e siclib安裝。 - 預訓練模型在 OpenPano 資料集上訓練,該資料集為新發布的約 2.8k 個 HDR 全景圖(轉換為約 37k 個透視裁剪影像)。
- 評估腳本涵蓋多個基準(LaMAR、MegaDepth、TartanAir、Stanford2D3D)。例如
python -m siclib.eval.lamar2k --conf geocalib-pinhole --tag geocalib命令可執行完整測試並將結果寫入outputs/results/。 - README 中的結果表顯示,GeoCalib 在所有列出資料集上對滾動、俯仰和視野角誤差的 AUC 分數均達最高,優於 DeepCalib、ParamNet 和 UVP。
資料集 – OpenPano
- 整合了 HDRMAPS、PolyHaven 和 Laval 室內 HDR 收集的 HDR 全景圖。
- 腳本(
siclib.datasets.utils.download_openpano)可下載公開全景圖;另一腳本可建立訓練集,支援 HDR 影像的可選色调映射。 - 處理後可獲得約 37k 個訓練影像,以及各約 2k 個驗證與測試影像。
為何重要 從單張影像中準確估計內參與重力方向對許多下游任務極為有用:3D 重構、AR/VR 對齊、機器人導航,以及任何需要在無多視角資料的情況下推理場景方向的應用。GeoCalib 將學習與經典最佳化結合,兼具靈活性(可處理畸變)與高精度。
以上所有資訊均直接來自倉儲的 README;未推斷任何額外功能。
相關
- 專案
- 專案
- 專案
- 專案
- 專案