Датасет глубины DIODE#
DIODE (плотная глубина в помещении и на улице) — это реальный датасет с высококачественной плотной эталонной глубиной, снятой лазерным сканером FARO Focus геодезического класса. Его особенность — съёмка как в помещении, так и на улице с помощью одного и того же датчика, благодаря чему датасет служит высокоточным связующим звеном между глубиной на небольших расстояниях в помещении и на больших расстояниях на улице для оценки глубины по одному изображению.
Основные особенности#
- Очень качественная плотная эталонная глубина, полученная с помощью лазерного сканера FARO Focus геодезического класса.
- Охватывает сцены как в помещении, так и на улице, снятые одним и тем же датчиком.
- Диапазон глубины охватывает расстояния от небольших значений в помещении до больших значений на улице — примерно до 80 м в смеси Ultralytics.
- Плотная и точная эталонная глубина для каждого пикселя, согласованная с кадрами RGB.
- Предоставляет высокоточную плотную эталонную глубину, связывающую области помещений и улицы.
Структура набора данных#
Датасет глубины DIODE разделён на две подвыборки:
- Train: 25 458 изображений с соответствующими картами глубины для обучения.
- Val: 771 изображение с соответствующими картами глубины для валидации во время обучения модели.
Каждый пример состоит из одного изображения RGB и соответствующего PNG-файла глубины uint16 с разрешением 256 единиц на метр (depth_scale: 256) в соответствии с форматом датасета глубины Ultralytics. Это обеспечивает разрешение 3,90625 мм при сохранении полного диапазона глубины на улице — 80 м. При первом использовании YAML-конфигурация датасета скачивает официальные архивы DIODE (~84 ГБ) и автоматически преобразует их в эту структуру.
Роль в YOLO26-Depth#
DIODE — обучающий источник в смеси нескольких датасетов объёмом около 2,19 млн пар «изображение — глубина», используемой для предварительного обучения Ultralytics YOLO26-Depth. Он добавляет высокоточную плотную эталонную глубину, которая связывает области помещений и улицы в пределах одного датчика и помогает модели обобщать данные для сцен как на небольших, так и на больших расстояниях. Полученные модели оцениваются на стандартных бенчмарках NYU, KITTI, Make3D, ETH3D и iBims-1.
Файл YAML набора данных#
Для задания конфигурации датасета используется YAML-файл. В нём содержится информация о путях к данным, классах и другие важные сведения.
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# DIODE dataset for monocular depth estimation — real indoor + outdoor, FARO Focus survey-grade laser, depth up to ~80 m
# Documentation: https://docs.ultralytics.com/datasets/depth/diode
# Example usage: yolo depth train data=depth-diode.yaml model=yolo26n-depth.pt
# parent
# ├── ultralytics
# └── datasets
# └── depth-diode ← downloads here (84 GB archives, ~90 GB converted)
# ├── images/{train,val} # RGB images
# └── depth/{train,val} # paired 16-bit *.png depth maps (images/ -> depth/)
# If an interrupted download leaves a partial dataset, delete the depth-diode dir and re-run to rebuild it.
path: depth-diode # dataset root dir (relative to Ultralytics settings 'datasets_dir')
train: images/train # train images (relative to 'path') 25458 images
val: images/val # val images (relative to 'path') 771 images
max_depth: 80 # (m) maximum valid depth; GT beyond this is excluded from val metrics
nc: 1
names:
0: depth
channels: 3
depth_scale: 256 # PNG value 256 = 1 meter; represents the 80 m outdoor range
# Download script/URL (optional)
download: |
import shutil
from pathlib import Path
import numpy as np
from ultralytics.data.utils import save_depth_png
from ultralytics.utils import TQDM
from ultralytics.utils.downloads import download
# Download and extract the official archives (train ~81 GB, val ~2.6 GB), then convert:
# flatten <split>/<scene>/<scan>/*.png into images/<split>/ and save the paired *_depth.npy
# (masked invalid -> 0, clipped at 80 m) as depth/<split>/*.png
dir = Path(yaml["path"]) # dataset root dir
download([f"https://diode-dataset.s3.amazonaws.com/{s}.tar.gz" for s in ("train", "val")], dir=dir / "source", delete=True)
for split in ("train", "val"):
(dir / "images" / split).mkdir(parents=True, exist_ok=True)
(dir / "depth" / split).mkdir(parents=True, exist_ok=True)
for im in TQDM(sorted((dir / "source" / split).rglob("*.png")), desc=f"Converting {split}"):
name = "_".join(im.relative_to(dir / "source").parts) # train/indoors/scene/scan/x.png -> train_indoors_scene_scan_x.png
depth = np.load(im.with_name(f"{im.stem}_depth.npy")).squeeze().astype(np.float32)
depth[np.load(im.with_name(f"{im.stem}_depth_mask.npy")) == 0] = 0.0 # zero out invalid pixels
save_depth_png(dir / "depth" / split / f"{name[:-4]}.png", depth.clip(max=80), scale=256)
im.replace(dir / "images" / split / name)
shutil.rmtree(dir / "source")Использование#
Чтобы обучить модель YOLO26n-depth на датасете DIODE с размером изображения 640, используй приведённые ниже фрагменты кода. Полный список доступных аргументов см. на странице обучения модели.
from ultralytics import YOLO
# Загрузить модель
model = YOLO("yolo26n-depth.pt") # загрузить предварительно обученную модель глубины (рекомендуется для обучения)
# Обучить модель
results = model.train(data="depth-diode.yaml", epochs=100, imgsz=640)Предварительно обученные модели#
Семейство моделей YOLO26 для оценки глубины обучается на большой смеси нескольких датасетов, включающей DIODE. При первом использовании эти модели автоматически скачиваются из релиза ресурсов Ultralytics v8.4.0, например YOLO26x-depth; доступны модели разных размеров для различных требований к точности и ресурсам.
Цитирование и благодарности#
Если ты используешь датасет DIODE в исследовательской или разработческой работе, укажи следующую статью:
@article{vasiljevic2019diode,
title={DIODE: A Dense Indoor and Outdoor DEpth Dataset},
author={Vasiljevic, Igor and Kolkin, Nick and Zhang, Shanyi and Luo, Ruotian and Wang, Haochen and Dai, Falcon Z. and Daniele, Andrea F. and Mostajabi, Mohammadreza and Basart, Steven and Walter, Matthew R. and Shakhnarovich, Gregory},
journal={arXiv preprint arXiv:1908.00463},
year={2019}
}Благодарим авторов за создание и поддержку этого ценного ресурса для сообщества компьютерного зрения.
Часто задаваемые вопросы#
В DIODE представлены сцены как в помещении, так и на улице, снятые одним лазерным сканером FARO Focus геодезического класса; он обеспечивает очень плотную и точную эталонную глубину на коротких расстояниях в помещении и больших расстояниях на улице. Благодаря съёмке одним датчиком этот датасет служит высокоточным связующим звеном между областями помещений и улицы в смеси для обучения YOLO26-Depth.
Конфигурация Ultralytics содержит 25 458 пар «изображение — глубина» для обучения и 771 пару для валидации. Данные о глубине хранятся в PNG-файлах uint16 с разрешением 256 единиц на метр (
depth_scale: 256): это обеспечивает разрешение 3,9 мм при охвате полного диапазона глубины на улице — 80 м, описанного в формате датасета глубины Ultralytics.Загрузи предварительно обученные веса для оценки глубины и укажи в
dataпуть к включённому YAML-файлу, напримерyolo depth train data=depth-diode.yaml model=yolo26n-depth.pt epochs=100 imgsz=640. Эквивалентный вариант на Python см. в разделе Использование, а полный список аргументов — на странице обучения.