huawei-bayerlab/marigold-v2

Marigold V2: Revisiting Diffusion Transformers for Monocular Depth Estimation

Marigold V2 – Diffusion‑Transformer Depth および Dense‑Vision モデル

何であるか – Marigold V2 は、事前学習済みの拡散変換器(Qwen‑Image‑Edit‑2509 モデル)を、単一ステップで高速に動作する、複数の密な画像対画像タスク(単眼深度(対数深度および線形深度の両方)、透過深度、表面法線、アルベド)の予測器に変換する研究用コードベースです。著者らは、1台のコンシューマーGPUで実行可能な軽量なファインチューニング手法を提供しており、全深度モデルでは約5日、他のバリエーションでは1日未満で実行可能でありながら、標準ベンチマークで最先端の精度に到達しています。

主なアイデア

  • 拡散変換器の再利用 – 大規模な拡散モデルは固定;わずかなLoRAアダプタとVAEデコーダのみを学習するため、ファインチューニングが低コストです。
  • 単一ステップ推論 – 学習後、モデルは反復的な拡散サンプリングを必要とせず、1回の順伝播でターゲットの密なマップを予測します。
  • 統一されたアーキテクチャ – 同じバックボーンを異なるチェックポイントとプロンプト埋め込みを読み込むことで、深度、法線、アルベドの出力に簡単に切り替えることができます。
  • アフィン不変深度 – 深度予測は各画像ごとに未知のスケール/シフトまで許容され、論文で使用される評価プロトコルと一致しています。

提供されるもの

  • 任意の画像フォルダに対して即座に利用可能な推論スクリプト(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のウェHEEL)
git clone https://github.com/huawei-bayerlab/marigold-v2.git
cd marigold-v2
bash setup/setup_env.sh   # env "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

結果は output/examples 下に *.npy 形式の深度マップと視覚化用PNGファイルとして出力されます。

学習/ファインチューニングの方法

  1. 学習データ(Hypersim、Virtual KITTI 2)とiREPA損失に必要なDINOv3特徴量をダウンロードします:
python scripts/download_assets.py --include-dinov3
  1. 2段階の深度学習を実行します(ステージ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(例:エンコード → DiT → デコード → 後処理)
  • 予測値とターゲットを統合するloss_graph
  • スケジュール、量子化、LoRA設定を含むoptimizationブロック。 新しいタスクを追加するには、既存の実験フォルダをコピーし、小さなデータセットローダー、出力アダプタ(例:デコードされたRGBをXYZ法線に変換)、および損失関数を実装し、新しいYAML設定ファイルでそれらを指すようにします。scripts/infer.pyMODALITIESエントリを追加すると、推論は自動的に新しいモダリティをサポートします。

ベンチマークと性能(論文で報告)

メトリクス 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},
}

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト