Ultralytics YOLO27:

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

Монокулярная оценка глубины назначает каждому пикселю изображения значение глубины в метрах. Целевые значения глубины хранятся либо в масштабированных 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 зарезервирован для недопустимых пикселей, PNG uint16 предоставляет 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

# 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 для всех, кроме KITTI Eigen. Для каждого набора данных предусмотрена отдельная страница, а некоторые из них размещены на Ultralytics Platform для просмотра и облачного обучения.

Отладка

  • 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 — высококачественные данные из помещений (границы и плоские поверхности)

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

Участники

Комментарии