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;未推断任何额外功能。
相关
- 项目
- 项目
- 项目
- 项目
- 项目