Ultralytics YOLO27:
Get Started

Обзор наборов данных для оценки глубины#

При монокулярной оценке глубины каждому пикселю изображения присваивается значение глубины в метрах. Целевые значения глубины хранятся либо в масштабированных 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РазрешениеМаксимальная глубина
По умолчанию / 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Корневая папка набора данных.
trainПуть к изображениям для обучения относительно path или абсолютный путь.
valПуть к изображениям для валидации относительно path или абсолютный путь.
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

Использование#

Обучи модель 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-файла набора данных указано несколько директорий с изображениями, их источники объединяются для масштабного смешанного обучения.

Добавление собственного набора данных#

  1. Сохраняй RGB-изображения в папках для разделов набора данных, например images/train и images/val.
  2. Сохраняй для каждого изображения файл глубины PNG или NPY в соответствующих папках depth/train и depth/val, используя то же имя файла без расширения, что и у изображения. Используй save_depth_png(), чтобы преобразовать массивы в метрах в компактные PNG в миллиметрах.
  3. Убедись, что декодированные значения глубины выражены в метрах, а для недопустимых или отсутствующих пикселей используются 0 или отрицательные значения.
  4. Создай 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. Изображения, для которых файл глубины отсутствует или не читается, исключаются при сканировании кэшируемого набора данных; при этом выводится предупреждение.

Участники

Комментарии