huawei-bayerlab/marigold-v2

Marigold V2: Revisiting Diffusion Transformers for Monocular Depth Estimation

Marigold V2 – 확산 트랜스포머 깊이 및 밀집 비전 모델

개요 – Marigold V2는 사전 학습된 확산 트랜스포머(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를 출력합니다.
평가 런처 표준 깊이/법선 벤치마크(NYUv2, KITTI, ETH3D, ScanNet, DIODE, iBims-1 등)를 다운로드하고 논문에 보고된 지표를 계산하는 Bash 스크립트.
학습 프레임워크 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과 매니페스트 로더를 추가합니다.
  • 디코딩된 RGB 출력을 원하는 표현(예: 시맨틱 맵)으로 변환하는 작은 network_graph 단계를 작성합니다.
  • 손실 모듈(예: 교차 엔트로피)과 검증 지표를 추가합니다.
  • 새 실험 폴더에 새 모듈을 등록하고 새 학습 구성을 연결합니다. README에는 표면 법선 실험을 템플릿으로 사용한 단계별 가이드가 포함되어 있습니다.

성능 및 하드웨어 참고 사항

  • 1024×1024 추론에는 약 17 GB GPU 메모리가 필요하고, 2048×2048에는 약 29 GB가 필요합니다.
  • 확산 트랜스포머는 로드 시 4비트로 양자화되어 메모리를 줄이고 추론 속도를 높입니다.
  • 깊이 완성을 위해 저장소는 고해상도 입력에서 실행할 때 MAE를 개선하는 타일형 로컬 적응 스크립트를 제공합니다.

더 찾아볼 곳


TL;DR – Marigold V2는 동결된 확산 트랜스포머를 빠르고 고품질의 단안 깊이, 투시 깊이, 법선, 알베도 예측기로 재활용하는 연구 중심의 오픈소스 툴킷으로, 종단 간 학습, 평가, 추론을 위한 스크립트를 갖추고 있습니다. 이는 전적으로 AI/ML 영역에 속하며 주제에서 벗어난 모음이 아닙니다.

관련

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