Ultralytics YOLO27:
Get Started

깊이 추정 데이터셋 개요#

단안 깊이 추정은 이미지의 모든 픽셀에 미터 단위의 깊이 값을 할당합니다. 깊이 타깃은 스케일링된 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해상도최대 깊이
기본값 / 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

# 사전 학습된 깊이 모델을 불러옵니다.
model = YOLO("yolo26n-depth.pt")

# NYU Depth V2 데이터셋으로 학습합니다.
results = model.train(data="nyu-depth.yaml", epochs=100, imgsz=640)

지원되는 데이터셋#

YOLO26 깊이 모델은 실내(≤10m)부터 실외(약 80m)까지 아우르는 여러 데이터셋의 대규모 혼합 데이터(약 219만 장)로 사전 학습된 후, KITTI Eigen을 제외한 모든 벤치마크에서 제로샷 방식으로 평가됩니다. 각 데이터셋에는 전용 페이지가 있으며, 일부 데이터셋은 탐색 및 클라우드 학습을 위해 Ultralytics Platform에서 호스팅됩니다.

디버깅

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

사전 학습 데이터 출처

  • ARKitScenes — 실제 실내 환경, Apple ARKit LiDAR(가장 큰 실제 데이터 출처)
  • SUN RGB-D — 실제 실내 환경, 다중 센서 RGB-D
  • DIODE — 실제 실내 및 실외 환경, 조밀한 레이저 스캐너 정답 데이터
  • Hypersim — 사진처럼 사실적인 합성 실내 환경
  • TartanAir — 다양한 환경을 포함하는 합성 데이터
  • Virtual KITTI 2 — 합성 실외 주행 환경
  • KITTI — 실제 실외 주행 환경, Velodyne LiDAR(평가 벤치마크로도 사용)
  • ImageNet(의사 레이블링) — 의사 레이블링된 지식 증류 데이터셋으로, 단일 데이터 출처 중 가장 규모가 큽니다.

평가 벤치마크

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

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

사용자 데이터셋 추가#

  1. images/train 및 images/val과 같은 분할 폴더 아래에 RGB 이미지를 저장합니다.
  2. 이미지와 동일한 파일명을 사용해 해당 depth/train 및 depth/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

자주 묻는 질문#

  • 용량을 줄이려면 스케일링된 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 — 미터 단위의 제곱 평균 제곱근 오차입니다. 낮을수록 좋습니다.
    • silog — 스케일 불변 로그 오차입니다. 낮을수록 좋습니다.
  • 예. 각 깊이 .png 또는 .npy 파일은 해당 이미지와 파일명(확장자 제외)이 같아야 합니다. 로더는 images 디렉터리 구성 요소를 depth으로 바꾸어 깊이 경로를 만들며, PNG를 우선 사용하고 없으면 NPY를 사용합니다. 깊이 파일이 없거나 읽을 수 없는 이미지는 캐시된 데이터셋 검사 중 경고와 함께 제외됩니다.

댓글