huawei-bayerlab/marigold-v2
Marigold V2: Revisiting Diffusion Transformers for Monocular Depth Estimation
Marigold V2 – 扩散变换器深度与密集视觉模型
是什么 – Marigold V2 是一个研究级代码库,将一个预训练的扩散变换器(Qwen‑Image‑Edit‑2509 模型)转化为多个密集图像到图像任务的快速单步预测器:单目深度(对数深度和线性深度)、透视深度、表面法线和反照率。作者提供了一种轻量级微调方案,可在单个消费级 GPU 上运行(完整深度模型约需 5 天,其他变体少于 1 天),并在标准基准测试中达到最先进精度。
核心思想
- 扩散变换器再利用 – 大型扩散模型被冻结;仅训练小型 LoRA 适配器和 VAE 解码器,使微调成本低廉。
- 单步推理 – 训练后,模型在一次前向传播中即可预测目标密集图,无需迭代扩散采样。
- 统一架构 – 通过加载不同的检查点和提示嵌入,可简单地将同一骨干网络切换为输出深度、法线或反照率。
- 仿射不变深度 – 深度预测在每张图像上允许未知的尺度/偏移,与论文中使用的评估协议一致。
你将获得
- 适用于任意图像文件夹的即用型推理脚本(
scripts/infer.py)。 - 主要深度和法线基准测试(NYUv2、KITTI、ETH3D、ScanNet、DIODE、iBims‑1、Sintel 等)的评估启动器。
- 训练脚本和模块化 YAML 驱动的配置系统,可复现已发表模型或添加新任务。
- 托管在 Hugging Face 上的预训练检查点(LoRA 适配器 + VAE 解码器),以及预计算的 Qwen 文本提示嵌入,因此 7 B 文本编码器无需加载。
快速开始(Linux,Python 3.10,CUDA GPU)
# 克隆并设置 conda 环境(默认使用 CUDA 12.8 轮子)
git clone https://github.com/huawei-bayerlab/marigold-v2.git
cd marigold-v2
bash setup/setup_env.sh # 创建环境 "marigold-v2"
conda activate marigold-v2
# 下载模型权重和演示资源(跳过大型数据集)
python scripts/download_assets.py --skip-datasets
# 在示例图像上运行深度推理
python scripts/infer.py \
--modality depth \
--image_dir assets/examples \
--output_dir output/examples
结果将以 *.npy 深度图和可视化 PNG 的形式出现在 output/examples 目录下。
如何训练 / 微调
- 下载训练数据(Hypersim、Virtual KITTI 2)和 iREPA 损失所需的 DINOv3 特征:
python scripts/download_assets.py --include-dinov3
- 运行两阶段深度训练(阶段 1 ≈ 5 天,阶段 2 ≈ 1 天,32 GB GPU):
# 阶段 1 – iREPA + 像素损失
python marigoldv2/script/train/train.py \
--config marigoldv2/experiments/20260316_qwen_depth/training_relative_log_depth_config.yaml \
--output_dir output/train_runs --no_wandb
# 阶段 2 – SinkLoss + VAE 微调(从阶段 1 检查点初始化)
python marigoldv2/script/train/train.py \
--config marigoldv2/experiments/20260316_qwen_depth/training_relative_log_depth_config_stage2.yaml \
--output_dir output/train_runs --no_wandb
替换配置路径以训练法线、反照率或检查点表中列出的其他深度变体。
扩展至新密集任务 该框架由 YAML 配置驱动,声明:
- 数据集定义(
marigoldv2/config/datasets/) - 要注册自定义组件的 Python 模块列表(
register_modules) - 描述前向传播的
network_graph(例如:encode → DiT → decode → post‑process) - 拉取预测和目标的
loss_graph - 包含调度、量化和 LoRA 设置的
optimization块。 要添加新任务,复制现有实验文件夹,实现一个小的数据集加载器、输出适配器(例如,将解码后的 RGB 转换为 XYZ 法线),以及损失函数,然后将新 YAML 配置指向它们。在scripts/infer.py中添加MODALITIES条目后,推理将自动支持新模态。
基准测试与性能(论文中报告)
| 指标 | NYUv2 | KITTI | ETH3D | ScanNet | DIODE |
|---|---|---|---|---|---|
| AbsRel ↓ / δ1 ↑(深度) | 3.6 / 98.0 | 5.4 / 97.4 | 2.8 / 99.2 | 3.7 / 97.9 | 5.2 / 97.1 |
| 平均角度误差 ↓ / 11.25° ↑(法线) | 16.6 / 61.2 | 14.1 / 67.4 | 15.9 / 70.9 | 28.7 / 27.6 | |
| 反照率(Hypersim 测试) – PSNR 20.78,SSIM 0.811,LPIPS 0.195 |
资源
- 演示:Hugging Face Space – https://huggingface.co/spaces/toshas/Marigold-V2
- 模型权重:https://huggingface.co/huawei-bayerlab/marigold-v2-0
- 论文:https://arxiv.org/abs/2609.08084(即将发表于 ACM TOG,SIGGRAPH Asia 2026)
- 网站:https://hf.co/spaces/huawei-bayerlab/marigold-v2-web
何时使用
- 你需要高质量的单目深度或其他密集预测,但不想承担多步扩散采样的开销。
- 你拥有单个 GPU,并希望在几天内对自定义数据集进行模型微调。
- 你需要一个单一代码库,可扩展至新的密集视觉输出(法线、反照率、透视深度等)。
引用
@article{pavlovic2026marigoldv2,
author = {Pavlovic, Igor and Wandel, Thiemo and Obukhov, Anton and Bartolomei, Luca and Davydov, Andrey and Tosi, Fabio and Poggi, Matteo and S{"u}sstrunk, Sabine and Dai, Dengxin},
title = {Marigold V2: Revisiting Diffusion Transformers for Monocular Depth Estimation},
year = {2026},
journal = {ACM Trans. Graph.},
volume = {45},
number = {6},
pages = {204},
doi = {10.1145/3842528},
}
相关
- 项目
- 项目
- 项目
- 项目