깊이 추정 데이터셋 개요#
단안 깊이 추정은 이미지의 모든 픽셀에 미터 단위의 깊이 값을 할당합니다. 깊이 타겟은 크기가 조정된 16비트 그레이스케일 PNG 또는 미터 단위의 부동소수점 NPY 배열을 사용합니다.
이 가이드는 Ultralytics YOLO 깊이 추정 모델에서 사용하는 데이터셋 형식을 설명하고 학습 및 검증에 사용할 수 있는 내장 데이터셋 구성을 나열합니다.
지원되는 데이터셋 형식#
깊이 맵 형식#
각 학습 샘플은 하나의 RGB 이미지와 한 쌍의 깊이 파일로 구성됩니다. PNG 값을 선택적인 데이터셋 수준의 depth_scale(으)로 나누어 미터를 산출합니다. 기본값은 1000이므로, 1500의 값은 1.5 미터를 나타냅니다. 코드 0는 유효하지 않음을 의미하며, PNG에는 임베디드 메타데이터가 필요하지 않습니다.
- 깊이 파일은
.png(권장) 또는.npy을 사용합니다. PNG 맵은 2D uint16 그레이스케일 이미지여야 합니다. NPY 배열은 2D 및 부동소수점이어야 하며, 값은 미터 단위여야 합니다. - PNG가 기본 밀리미터 규칙을 사용하지 않는 경우에만
depth_scale을 설정하세요. 예를 들어, KITTI는256을 사용하고 Virtual KITTI 2는100를 사용합니다. - 각 깊이 파일은 일치하는 이미지 파일과 동일한 스템을 가져야 합니다 (예:
scene_001.png은scene_001.jpg과 쌍을 이룹니다). - 종횡비가 일치하는 한 깊이 맵은 RGB 이미지보다 작을 수 있습니다. 학습 시 메모리 내에서 크기가 조정되기 때문입니다.
- 데이터셋 로더는
images디렉토리 컴포넌트를depth(으)로 교체하여 깊이 파일을 찾으며,.png를 선호하고.npy으로 대체합니다. - 깊이가
≤ 0인 픽셀은 유효하지 않은 것으로 처리되며 손실 및 메트릭 계산에서 제외됩니다.
코드 0은 유효하지 않은 픽셀을 위해 예약되어 있으므로, uint16 PNG는 65,535개의 양수 깊이 값을 제공합니다. 스케일은 정밀도와 범위를 모두 제어합니다:
| 규칙 | depth_scale | 해상도 | 최대 깊이 |
|---|---|---|---|
| 기본값 / ARKitScenes | 1000 | 1 mm | 65.535 m |
| KITTI | 256 | 3.90625 mm | 255.99609375 m |
| Virtual KITTI 2 | 100 | 1 cm | 655.35 m |
이는 저장 한계일 뿐 권장되는 학습 상한선이 아닙니다. 데이터셋은 손실 보정이나 평가를 위해 더 작은 max_depth을 독립적으로 설정할 수 있습니다.
표준 레이아웃은 이미지와 깊이 맵을 병렬 폴더에 유지합니다:
dataset/
├── images/
│ ├── train/
│ └── val/
└── depth/
├── train/
└── val/예를 들어, images/train/scene_001.jpg의 이미지는 depth/train/scene_001.png의 깊이 맵과 쌍을 이룹니다.
데이터셋 YAML 형식#
깊이 추정 데이터셋은 YAML 파일로 구성됩니다. 주요 필드는 다음과 같습니다:
| 키 | 설명 |
|---|---|
path | 데이터셋 루트 디렉토리입니다. |
train | path에 상대적인 학습 이미지 경로 또는 절대 경로입니다. |
val | path에 상대적인 검증 이미지 경로 또는 절대 경로입니다. |
test | 선택적인 테스트 이미지 경로입니다. |
nc | 클래스 수 — 깊이 추정의 경우 항상 1입니다. |
names | 클래스 이름 매핑 — 항상 {0: depth}입니다. |
depth_scale | 미터당 선택적 PNG 단위; 기본값은 1000입니다. |
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# NYU Depth V2 dataset for monocular depth estimation
# Documentation: https://cs.nyu.edu/~fergus/datasets/nyu_depth_v2.html
# 795 train + 654 val (Eigen test split) images, 480x640, indoor scenes, depth in meters
# Example usage: yolo depth train data=nyu-depth.yaml model=yolo26n-depth.pt
# parent
# ├── ultralytics
# └── datasets
# └── nyu-depth-png ← downloads here (≈1.5 GB)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: nyu-depth-png # dataset root dir (relative to Ultralytics settings 'datasets_dir')
train: images/train # train images (relative to 'path') 795 images
val: images/val # val images (relative to 'path') 654 images
# Depth maps are paired uint16 millimeter PNGs under depth/<split>/, resolved by
# swapping '/images/' -> '/depth/' on each image path.
# Classes
nc: 1
names:
0: depth
channels: 3
depth_scale: 1000
# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/nyu-depth-png.zip사용법#
Python 또는 CLI를 사용하여 YOLO26 깊이 추정 모델을 학습합니다:
from ultralytics import YOLO
# Load a pretrained depth model
model = YOLO("yolo26n-depth.pt")
# Train on the NYU Depth V2 dataset
results = model.train(data="nyu-depth.yaml", epochs=100, imgsz=640)지원되는 데이터셋#
YOLO26 깊이 모델은 실내(≤10m)에서 실외(~80m) 범위에 걸친 광범위한 다중 데이터셋 혼합(~219만 개 이미지)으로 사전 학습된 후 5개 벤치마크에서 제로샷 방식으로 평가됩니다. 각 데이터셋에는 전용 페이지가 있습니다:
디버깅
- Depth8 — 빠른 파이프라인 테스트를 위해 1.3 MB 자동 다운로드 아카이브에 포함된 8개의 SUN RGB-D 이미지
사전 학습 소스
- ARKitScenes — 실제 실내, Apple ARKit LiDAR (가장 큰 실제 소스)
- SUN RGB-D — 실제 실내, 다중 센서 RGB-D
- DIODE — 실제 실내 + 실외, 조밀한 레이저 스캐너 정답(Ground Truth)
- Hypersim — 합성 포토리얼리스틱 실내
- TartanAir — 합성, 다양한 환경
- Virtual KITTI 2 — 합성 실외 주행
- KITTI — 실제 실외 주행, Velodyne LiDAR (평가 벤치마크이기도 함)
- ImageNet (pseudo-labeled) — 의사 라벨링된 증류 세트, 가장 큰 단일 소스
평가 벤치마크
- NYU Depth V2 — 주요 실내 벤치마크
- KITTI Eigen — 실외 주행 벤치마크
- ETH3D — 고정밀 실내 + 실외
- Make3D — 실외, 분포 외(out-of-distribution)
- iBims-1 — 고품질 실내 (가장자리 및 평면 표면)
이러한 벤치마크에서의 모델별 정확도와 다운로드 가능한 사전 학습된 가중치는 Depth Estimation task page에 나열되어 있습니다. train 필드에 여러 이미지 디렉토리가 나열된 데이터셋 YAML은 대규모 혼합 학습을 위해 이러한 소스들을 결합합니다.
자체 데이터셋 추가#
images/train및images/val과 같은 분할 폴더 아래에 RGB 이미지를 저장하세요.- 이미지와 동일한 파일 스템을 사용하여 일치하는
depth/train및depth/val폴더 아래에 이미지당 하나의 깊이 PNG 또는 NPY를 저장합니다.save_depth_png()를 사용하여 미터 배열을 압축된 밀리미터 PNG로 변환합니다. - 디코딩된 깊이 값이 미터 단위인지 확인하고, 유효하지 않거나 누락된 픽셀에는
0또는 음수 값을 사용하세요. path,train,val,nc: 1,names: {0: depth}를 포함하는 데이터셋 YAML을 생성하세요.
path: path/to/my-depth-dataset
train: images/train
val: images/val
nc: 1
names:
0: depth
# Optional: PNG integer units per meter (default 1000)
depth_scale: 1000FAQ#
압축된 데이터셋에는 크기가 조정된 16비트 그레이스케일 PNG를 사용하세요. 기본적으로 각 정수 단계는 1밀리미터입니다. 다른 스케일을 위해 데이터셋 YAML에
depth_scale을 설정하세요.ultralytics.data.utils.save_depth_png()은 미터 배열을 기본 형식으로 변환합니다. 미터 단위의 부동소수점 NPY 맵도 직접 작동합니다.깊이 값이
≤ 0인 픽셀은 유효하지 않은 것으로 처리되며 손실 계산과 메트릭 평가 모두에서 마스킹됩니다. 이는 센서 노이즈, 하늘 영역, 그리고 깊이를 안정적으로 측정할 수 없는 반사 표면을 다룹니다.깊이 추정 검증은 표준 Depth Anything 메트릭 세트를 보고합니다:
- delta1 / delta2 / delta3 — 1.25×, 1.25²×, 1.25³× 임계값 이내의 픽셀 비율. 높을수록 좋습니다.
- abs_rel — 평균 절대 상대 오차입니다. 낮을수록 좋습니다.
- rmse — 미터(m) 단위의 평균 제곱근 오차입니다. 낮을수록 좋습니다.
- silog — 척도 불변 로그 오차입니다. 낮을수록 좋습니다.
네. 각 깊이
.png또는.npy파일은 해당 이미지와 동일한 스템을 공유해야 합니다. 로더는images디렉토리 컴포넌트를depth(으)로 교체하여 깊이 경로를 유도하며, PNG를 선호하고 NPY로 대체합니다. 깊이 파일이 누락되었거나 읽을 수 없는 이미지는 경고와 함께 캐시된 데이터셋 스캔 중에 제외됩니다.