Ultralytics YOLO27:

깊이 추정 데이터셋 개요#

단안 깊이 추정은 이미지의 모든 픽셀에 미터 단위의 깊이 값을 할당합니다. 깊이 타깃은 스케일이 적용된 16비트 grayscale PNG 또는 미터 단위의 부동 소수점 NPY 배열을 사용합니다.

이 가이드에서는 Ultralytics YOLO 깊이 추정 모델에서 사용하는 데이터셋 형식을 설명하고, 학습 및 검증에 사용할 수 있는 기본 제공 데이터셋 구성을 나열합니다.

지원되는 데이터셋 형식#

깊이 맵 형식#

각 학습 샘플은 RGB 이미지 하나와 이에 대응하는 깊이 파일 하나로 구성됩니다. PNG 값은 선택적 데이터셋 수준의 depth_scale으로 나누어 미터 단위로 변환합니다. 기본값은 1000이므로 1500 값은 1.5미터를 나타냅니다. 0 코드는 유효하지 않음을 의미하며, PNG에는 포함된 메타데이터가 필요하지 않습니다.

  • 깊이 파일은 .png(권장) 또는 .npy을 사용합니다. PNG 맵은 2D uint16 grayscale 이미지여야 합니다. NPY 배열은 2D 부동 소수점 배열이어야 하며, 값은 미터 단위여야 합니다.
  • PNG가 기본 밀리미터 규칙을 사용하지 않을 때만 depth_scale을 설정합니다. 예를 들어 KITTI는 256을 사용하고 Virtual KITTI 2는 100를 사용합니다.
  • 각 깊이 파일은 이에 대응하는 이미지 파일과 동일한 stem을 가져야 합니다(예: scene_001.pngscene_001.jpg과 쌍을 이룹니다).
  • 종횡비가 일치하는 경우 깊이 맵은 RGB 이미지보다 작아도 되며, 학습 중 메모리에서 크기가 조정됩니다.
  • 데이터셋 로더는 images 디렉터리 구성 요소를 depth로 바꾸어 깊이 파일을 찾으며, .png를 우선 사용하고 없으면 .npy으로 대체합니다.
  • 깊이가 ≤ 0인 픽셀은 유효하지 않은 것으로 처리되어 손실 및 metric 계산에서 제외됩니다.

0 코드는 유효하지 않은 픽셀용으로 예약되어 있으므로 uint16 PNG는 양의 깊이 값 65,535개를 제공합니다. 스케일은 정밀도와 범위를 모두 제어합니다.

규칙depth_scale해상도최대 깊이
기본값 / ARKitScenes10001 mm65.535 m
KITTI2563.90625 mm255.99609375 m
Virtual KITTI 21001 cm655.35 m

이는 권장 학습 상한이 아닌 저장 한도입니다. 데이터셋은 손실 보정 또는 평가를 위해 더 작은 max_depth을 독립적으로 설정할 수 있습니다.

표준 레이아웃에서는 이미지와 깊이 맵을 병렬 폴더에 저장합니다.

dataset/
├── images/
│   ├── train/
│   └── val/
└── depth/
    ├── train/
    └── val/

예를 들어 images/train/scene_001.jpg의 이미지에는 depth/train/scene_001.png의 깊이 맵이 대응됩니다.

데이터셋 YAML 형식#

깊이 추정 데이터셋은 YAML 파일로 구성합니다. 주요 필드는 다음과 같습니다.

설명
path데이터셋 루트 디렉터리입니다.
trainpath을 기준으로 한 학습 이미지 경로 또는 절대 경로입니다.
valpath을 기준으로 한 검증 이미지 경로 또는 절대 경로입니다.
test선택 사항인 테스트 이미지 경로입니다.
nc클래스 수 — 깊이 추정에서는 항상 1입니다.
names클래스 이름 매핑 — 항상 {0: depth}입니다.
depth_scale미터당 선택적 PNG 단위 수이며, 기본값은 1000입니다.
ultralytics/cfg/datasets/nyu-depth.yaml
# 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) 범주에 걸치는 광범위한 다중 데이터셋 조합(~2.19M 이미지)으로 사전 학습된 후, KITTI Eigen을 제외한 모든 벤치마크에서 제로샷 방식으로 5개의 벤치마크에 걸쳐 평가됩니다. 각 데이터셋에는 전용 페이지가 있으며, 일부 데이터셋은 탐색 및 클라우드 학습을 위해 Ultralytics 플랫폼에 호스팅되어 있습니다.

디버깅

  • Depth8 — 빠른 파이프라인 테스트를 위한 1.3MB 자동 다운로드 아카이브에 포함된 SUN RGB-D 이미지 8개

사전 학습 소스

  • ARKitScenes — 실제 실내, Apple ARKit LiDAR(가장 큰 실제 소스)
  • SUN RGB-D — 실제 실내, 다중 센서 RGB-D
  • DIODE — 실제 실내 및 실외, 밀집 레이저 스캐너 ground truth
  • Hypersim — 합성 포토리얼리스틱 실내
  • TartanAir — 합성, 다양한 환경
  • Virtual KITTI 2 — 합성 실외 주행
  • KITTI — 실제 실외 주행, Velodyne LiDAR(평가 벤치마크이기도 함)
  • ImageNet (의사 라벨링) — 의사 라벨링된 distillation 세트, 단일 소스로는 가장 큼

평가 벤치마크

  • NYU Depth V2 — 주요 실내 벤치마크
  • KITTI Eigen — 실외 주행 벤치마크
  • ETH3D — 고정밀 실내 및 실외
  • Make3D — 실외, 분포 외 데이터
  • iBims-1 — 고품질 실내(경계 및 평면 표면)

이러한 벤치마크의 모델별 정확도와 다운로드 가능한 사전 학습 가중치는 깊이 추정 작업 페이지에 나와 있습니다. train 필드에 여러 이미지 디렉터리를 나열하는 데이터셋 YAML은 이러한 소스를 결합하여 대규모 혼합 학습에 사용합니다.

사용자 데이터셋 추가#

  1. RGB 이미지를 images/trainimages/val과 같은 분할 폴더에 저장합니다.
  2. 이미지와 동일한 file stem을 사용하여 대응하는 depth/traindepth/val 폴더에 이미지당 깊이 PNG 또는 NPY 파일 하나를 저장합니다. save_depth_png()를 사용하면 미터 배열을 용량이 작은 밀리미터 PNG로 변환할 수 있습니다.
  3. 디코딩된 깊이 값이 미터 단위인지 확인하고, 유효하지 않거나 누락된 픽셀에는 0 또는 음수 값을 사용합니다.
  4. 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: 1000

FAQ#

  • 용량이 작은 데이터셋에는 스케일이 적용된 16비트 grayscale PNG를 사용합니다. 기본적으로 각 정수 단계는 1밀리미터이며, 다른 스케일을 사용하려면 데이터셋 YAML에서 depth_scale을 설정합니다. ultralytics.data.utils.save_depth_png()은 미터 배열을 기본 형식으로 변환합니다. 미터 단위의 부동 소수점 NPY 맵도 직접 사용할 수 있습니다.

  • 깊이 값이 ≤ 0인 픽셀은 유효하지 않은 것으로 처리되며 손실 계산과 metric 평가 모두에서 마스킹됩니다. 여기에는 깊이를 신뢰성 있게 측정할 수 없는 센서 노이즈, 하늘 영역 및 반사 표면이 포함됩니다.

  • 깊이 추정 검증에서는 표준 Depth Anything metric 세트를 보고합니다.

    • delta1 / delta2 / delta3 — 1.25×, 1.25²×, 1.25³× 임계값 이내에 있는 픽셀의 비율입니다. 높을수록 좋습니다.
    • abs_rel — 평균 absolute relative error입니다. 낮을수록 좋습니다.
    • rmse — 미터 단위의 root mean squared error입니다. 낮을수록 좋습니다.
    • silog — scale-invariant logarithmic error입니다. 낮을수록 좋습니다.
  • 예. 각 깊이 .png 또는 .npy 파일은 대응하는 이미지와 동일한 stem을 공유해야 합니다. 로더는 images 디렉터리 구성 요소를 depth으로 바꾸어 깊이 경로를 파생하며, PNG를 우선 사용하고 없으면 NPY로 대체합니다. 깊이 파일이 없거나 읽을 수 없는 이미지는 경고와 함께 캐시된 데이터셋 스캔 중 제외됩니다.

댓글