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 目录下。

如何训练 / 微调

  1. 下载训练数据(Hypersim、Virtual KITTI 2)和 iREPA 损失所需的 DINOv3 特征:
python scripts/download_assets.py --include-dinov3
  1. 运行两阶段深度训练(阶段 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

资源

何时使用

  • 你需要高质量的单目深度或其他密集预测,但不想承担多步扩散采样的开销。
  • 你拥有单个 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},
}

相关

  • 项目
  • 项目
  • 项目
  • 项目