huawei-bayerlab/marigold-v2

Marigold V2: Revisiting Diffusion Transformers for Monocular Depth Estimation

Marigold V2 – 扩散 Transformer 深度与稠密视觉模型

这是什么 – Marigold V2 是一个研究级代码库,可将预训练的扩散 Transformer(Qwen-Image-Edit-2509 模型)转换为快速、单步的预测器,用于各种稠密图像模态:单目深度、透视深度、表面法线和反照率。作者提供了一系列检查点、轻量微调配方(LoRA 适配器 + 小型 VAE 解码器),以及用于推理、评估和训练的脚本。

核心思想

  • 复用冻结的扩散主干 – 大型 Qwen 文本到图像模型保持冻结;仅学习小型可训练适配器(LoRA)和 VAE 解码器,使微调成本低廉(在单张 32 GB GPU 上约 1 周)。
  • 单步稠密预测 – 不同于需要多个采样步骤的经典扩散流程,Marigold V2 在一次前向传播中产生最终稠密图。
  • 多种输出模态 – 通过替换 LoRA 检查点和提示嵌入,同一个主干可重新用于深度(对数、线性、视差、透视)、法线和反照率。
  • 仿射不变深度 – 深度值以每张图像的未知尺度/平移输出,这与论文中使用的评估协议相符。

提供的组件

组件 内容
检查点 针对每种模态和深度参数化的 LoRA 适配器(存储为 trainables.safetensors)。全部共享冻结的 Qwen 主干和预先计算的文本提示嵌入,因此 7 B 文本编码器永远不会加载。
推理脚本(scripts/infer.py) 简单的 CLI,可对任何图像文件夹运行深度、法线或反照率。输出 NumPy .npy 图和可视化 PNG。
评估启动器 Bash 脚本,会下载标准深度/法线基准(NYUv2、KITTI、ETH3D、ScanNet、DIODE、iBims-1 等)并计算论文中报告的指标。
训练框架 YAML 驱动的配置系统(marigoldv2/experiments/...)加上小型注册表,用于连接数据集、变换、网络块、损失图和优化器。支持单 GPU 和多 GPU(accelerate launch)。
数据集辅助工具 用于下载和预处理大型 Hypersim、Virtual KITTI-2、LayeredDepth-Syn 和 DINOv3 感知损失检查点的脚本。
演示与网页 UI Hugging Face Spaces 链接(Marigold-V2-web),用于快速视觉测试。

快速开始(Linux、Python 3.10、CUDA GPU)

# Clone & set up environment (conda, CUDA 12.8 wheels)
git clone https://github.com/huawei-bayerlab/marigold-v2.git
cd marigold-v2
bash setup/setup_env.sh   # creates conda env "marigold-v2"
conda activate marigold-v2

# Download model weights and example images
python scripts/download_assets.py --skip-datasets

# Run depth on the bundled examples
python scripts/infer.py \
  --modality depth \
  --image_dir assets/examples \
  --output_dir output/examples

默认深度检查点(depth/Log-stage2)可产生 README 中报告的最先进数字(例如 NYUv2 上 AbsRel 3.6 %、δ1 98 %)。

训练新模型(大致流程)

  1. 准备数据 – 该仓库包含用于获取 Hypersim、Virtual KITTI-2 和可选分层深度数据的脚本。
  2. 从 marigoldv2/experiments/... 选择配置(例如 training_relative_log_depth_config_stage2.yaml)。
  3. 启动训练:
    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
    
    – 第 1 阶段(160 k 步)在 32 GB GPU 上约需 5 天;第 2 阶段(30 k 步)约 1 天。
  4. 生成的 trainables.safetensors 可直接与 scripts/infer.py 搭配使用。

扩展到新稠密任务 – 该框架是模块化的:

  • 在 marigoldv2/config/datasets/ 中添加数据集 YAML 和清单加载器。
  • 编写一个小型 network_graph 步骤,将解码后的 RGB 输出转换为所需表示(例如语义图)。
  • 添加损失模块(例如交叉熵)和验证指标。
  • 在新的实验文件夹中注册新模块,并将新的训练配置指向它们。 README 包含以表面法线实验为模板的逐步指南。

性能与硬件注意事项

  • 1024×1024 推理需要约 17 GB GPU 内存;2048×2048 需要约 29 GB。
  • 扩散 Transformer 在加载时量化为 4 位,可减少内存并加速推理。
  • 对于深度补全,该仓库提供分块局部适配脚本,可在较高分辨率输入上改善 MAE。

在哪里找到更多信息


TL;DR – Marigold V2 是一个以研究为导向的开源工具包,可将冻结的扩散 Transformer 重新用于快速、高质量的单目深度、透视深度、法线和反照率预测器,并附有用于端到端训练、评估和推理的脚本。它完全属于 AI/ML 领域,并非离题的集合。

相关