Обзор наборов данных для оценки глубины#
При монокулярной оценке глубины каждому пикселю изображения присваивается значение глубины в метрах. Целевые значения глубины хранятся либо в масштабированных 16-битных изображениях PNG в оттенках серого, либо в массивах NPY с числами с плавающей точкой, выраженными в метрах.
В этом руководстве описан формат набора данных, который используют модели Ultralytics YOLO для оценки глубины, а также перечислены встроенные конфигурации наборов данных для обучения и валидации.
Поддерживаемый формат набора данных#
Формат карты глубины#
Каждый обучающий пример состоит из одного RGB-изображения и соответствующего ему файла глубины. Значения PNG делятся на необязательный параметр набора данных depth_scale, чтобы получить метры. По умолчанию используется 1000, поэтому значение 1500 соответствует 1.5 метрам. Код 0 обозначает недопустимое значение; PNG не требуют встроенных метаданных.
- Файлы глубины используют
.png(предпочтительный вариант) или.npy. Карты PNG должны быть двумерными изображениями в оттенках серого с типом 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
# Загрузить предварительно обученную модель оценки глубины
model = YOLO("yolo26n-depth.pt")
# Обучить на наборе данных NYU Depth V2
results = model.train(data="nyu-depth.yaml", epochs=100, imgsz=640)Поддерживаемые датасеты#
Модели YOLO26 для оценки глубины предварительно обучены на широкой смеси наборов данных (~2,19 млн изображений), охватывающей диапазон от помещений (≤10 м) до открытых пространств (~80 м), а затем оцениваются на пяти бенчмарках; для всех, кроме KITTI Eigen, используется режим zero-shot. Для каждого набора данных есть отдельная страница; несколько наборов размещены на Ultralytics Platform, где их можно просматривать и использовать для облачного обучения.
Отладка
- Depth8 — 8 изображений SUN RGB-D в архиве размером 1,3 МБ с автоматической загрузкой для быстрой проверки конвейера
Источники для предварительного обучения
- ARKitScenes — реальные сцены помещений, LiDAR Apple ARKit (крупнейший реальный источник)
- SUN RGB-D — реальные сцены помещений, данные RGB-D с нескольких датчиков
- DIODE — реальные сцены помещений и открытых пространств, плотная эталонная разметка от лазерного сканера
- Hypersim — синтетические фотореалистичные сцены помещений
- TartanAir — синтетические данные из разнообразных окружений
- Virtual KITTI 2 — синтетические данные дорожного движения на открытом воздухе
- KITTI — реальные данные дорожного движения на открытом воздухе, LiDAR Velodyne (также бенчмарк для оценки)
- ImageNet (псевдоразмеченный) — набор данных для дистилляции с псевдоразметкой, крупнейший отдельный источник
Бенчмарки для оценки
- NYU Depth V2 — основной бенчмарк для сцен помещений
- KITTI Eigen — бенчмарк дорожного движения на открытом воздухе
- ETH3D — высокая точность для помещений и открытых пространств
- Make3D — данные для открытых пространств, отличающиеся от обучающего распределения
- iBims-1 — высококачественные данные для помещений (границы и плоские поверхности)
Точность каждой модели на этих бенчмарках и загружаемые предварительно обученные веса перечислены на странице задачи оценки глубины. Если в поле train YAML-файла набора данных указано несколько директорий с изображениями, их источники объединяются для масштабного смешанного обучения.
Добавление собственного набора данных#
- Сохраняй 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: 1000Часто задаваемые вопросы#
Для компактных наборов данных используй 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. Изображения, для которых файл глубины отсутствует или не читается, исключаются при сканировании кэшируемого набора данных; при этом выводится предупреждение.