Обзор наборов данных для оценки глубины#
Оценка глубины по одному изображению присваивает значение глубины в метрах каждому пикселю на изображении. В качестве целей глубины используются либо масштабированные 16-битные изображения в оттенках серого в формате PNG, либо массивы NPY с плавающей точкой в метрах.
В этом руководстве объясняется формат наборов данных, используемый моделями оценки глубины Ultralytics YOLO, а также перечислены встроенные конфигурации наборов данных, доступные для обучения и валидации.
Поддерживаемый формат наборов данных#
Формат карты глубины#
Каждый обучающий пример состоит из одного RGB-изображения и одного парного файла глубины. Значения PNG делятся на необязательный параметр уровня датасета depth_scale, чтобы получить значения в метрах. По умолчанию используется 1000, поэтому значение 1500 представляет 1.5 метра. Код 0 означает недопустимое значение; файлы PNG не требуют встроенных метаданных.
- Файлы глубины используют
.png(предпочтительно) или.npy. Карты PNG должны быть двумерными 16-битными изображениями в оттенках серого (uint16). Массивы NPY должны быть двумерными и содержать числа с плавающей точкой, со значениями в метрах. - Устанавливай
depth_scaleтолько тогда, когда PNG не используют стандартное соглашение с миллиметрами. Например, 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Использование#
Обучи модель оценки глубины YOLO26 с помощью Python или CLI:
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 предварительно обучены на широком наборе данных (~2,19 млн изображений), охватывающем диапазоны от помещений (≤10 м) до открытых пространств (~80 м), а затем протестированы без обучения (zero-shot) на пяти бенчмарках. Для каждого набора данных есть отдельная страница:
Отладка
- Depth8 — 8 изображений SUN RGB-D в автоматически загружаемом архиве объемом 1.3 МБ для быстрого тестирования пайплайна
Источники предварительного обучения
- 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 — высококачественные интерьеры (границы и планарные поверхности)
Точность каждой модели на этих бенчмарках и загружаемые предобученные веса перечислены на странице задачи оценки глубины. YAML набора данных, поле train которого перечисляет несколько каталогов изображений, объединяет эти источники для масштабного смешанного обучения.
Добавление собственного набора данных#
- Сохраняй RGB-изображения в папках с разделением, таких как
images/trainиimages/val. - Сохраняй один PNG или NPY файл глубины на каждое изображение в соответствующих папках
depth/trainиdepth/val, используя то же имя файла, что и у изображения. Используйsave_depth_png()для преобразования массивов в метрах в компактные PNG в миллиметрах. - Убедись, что декодированные значения глубины выражены в метрах, а для недопустимых или отсутствующих пикселей используется
0или отрицательные значения. - Создай YAML-файл датасета с
path,train,val,nc: 1иnames: {0: depth}.
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 для компактных датасетов. По умолчанию каждый целый шаг равен одному миллиметру; установи
depth_scaleв файле YAML датасета для другого масштаба.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. Изображения, чей файл глубины отсутствует или не читается, отбрасываются во время сканирования кэшированного датасета с выдачей предупреждения.