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},
}

相關

  • 專案
  • 專案
  • 專案
  • 專案