huawei-bayerlab/marigold-v2

Marigold V2: Revisiting Diffusion Transformers for Monocular Depth Estimation

마리골드 V2 – 확산-변환기 깊이 및 밀도-비전 모델

무엇인가요 – 마리골드 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 텍스트-프롬프트 임베딩을 제공하여 7B 텍스트 인코더를 로드할 필요가 없습니다.

빠른 시작 (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

결과는 output/examples 폴더에 *.npy 깊이 맵과 시각화 PNG 파일로 나타납니다.

훈련 / 미세 조정 방법

  1. 훈련 데이터(Hypersim, Virtual KITTI 2)와 iREPA 손실에 필요한 DINOv3 특징을 다운로드합니다:
python scripts/download_assets.py --include-dinov3
  1. 두 단계 깊이 훈련 실행(단계 1 ≈ 5일, 단계 2 ≈ 32GB GPU에서 1일):
# 단계 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를 보유하고 있으며, 몇 일 안에 사용자 정의 데이터셋으로 모델을 미세 조정하고자 할 때.
  • 새로운 밀도-비전 출력(법선, 알베도, 투명 깊이 등)으로 확장할 수 있는 단일 코드베이스를 원할 때.

"마리골드 V2는 단안 깊이 추정을 위한 확산 변환기를 재고하는 혁신적인 접근입니다. 이는 빠르고 정확한 예측을 가능하게 하며, 연구 및 실용적 응용 모두에 큰 기여를 할 수 있습니다." — @toshas

인용

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

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트