Conjunto de datos de profundidad DIODE#
DIODE (Dense Indoor/Outdoor DEpth) es un conjunto de datos del mundo real con una verdad terreno de profundidad densa de muy alta calidad capturada mediante un escáner láser de grado topográfico FARO Focus. De forma única, cubre tanto escenas de interiores como de exteriores con el mismo sensor, lo que lo convierte en un puente de alta precisión entre la profundidad de interiores de corto alcance y la de exteriores de largo alcance para la monocular depth estimation.
Características clave#
- Verdad fundamental de profundidad densa de muy alta calidad proveniente de un escáner láser de grado topográfico FARO Focus.
- Cubre escenas tanto de interior como de exterior capturadas con el mismo sensor.
- El rango de profundidad abarca desde distancias cortas en interiores hasta distancias largas en exteriores, alcanzando hasta aproximadamente 80 m en la mezcla de Ultralytics.
- Verdad fundamental densa y precisa por píxel alineada con los fotogramas RGB.
- Proporciona una verdad fundamental densa de alta precisión que conecta los dominios de interior y exterior.
Estructura del dataset#
El conjunto de datos de profundidad DIODE se divide en dos subconjuntos:
- Train: 25.458 imágenes con mapas de profundidad emparejados para el entrenamiento.
- Val: 771 imágenes con mapas de profundidad emparejados para la validación durante el entrenamiento del modelo.
Cada muestra consta de una imagen RGB y un mapa de profundidad float32 emparejado .npy que almacena distancias por píxel en metros, siguiendo el Ultralytics depth dataset format.
Rol en YOLO26-Depth#
DIODE es una fuente de entrenamiento en la mezcla de preentrenamiento multidataset de Ultralytics YOLO26-Depth de aproximadamente 2,19 millones de pares de imagen-profundidad. Contribuye con una verdad fundamental densa de alta precisión que conecta los dominios de interior y exterior dentro de un solo sensor, ayudando al modelo a generalizar entre escenas de corto y largo alcance. Los modelos resultantes se evalúan en los benchmarks estándar NYU, KITTI, Make3D, ETH3D y iBims-1.
YAML del dataset#
Se utiliza un archivo YAML (Yet Another Markup Language) para definir la configuración del conjunto de datos. Contiene información sobre las rutas del conjunto de datos, clases y otra información relevante.
# 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 *.npy, float32 meters (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
# Download script/URL (optional)
download: |
import shutil
from pathlib import Path
import numpy as np
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>/*.npy
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
np.save(dir / "depth" / split / f"{name[:-4]}.npy", depth.clip(max=80))
im.replace(dir / "images" / split / name)
shutil.rmtree(dir / "source")Uso#
Para entrenar un modelo YOLO26n-depth en el conjunto de datos DIODE con un tamaño de imagen de 640, puedes utilizar los siguientes fragmentos de código. Para obtener una lista exhaustiva de los argumentos disponibles, consulta la página de Training del modelo.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-depth.pt") # load a pretrained depth model (recommended for training)
# Train the model
results = model.train(data="depth-diode.yaml", epochs=100, imgsz=640)Modelos preentrenados#
La familia de profundidad YOLO26 está entrenada con la amplia mezcla de preentrenamiento de profundidad de múltiples conjuntos de datos de la que forma parte DIODE. Estos modelos se descargan automáticamente desde la última versión de Ultralytics, por ejemplo, YOLO26x-depth a partir de v8.4.0, y abarcan un rango de tamaños para diferentes requisitos de precisión y recursos.
Citas y agradecimientos#
Si utilizas el conjunto de datos DIODE en tu trabajo de investigación o desarrollo, por favor cita el siguiente artículo:
@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}
}Queremos agradecer a los autores por crear y mantener este valioso recurso para la comunidad de visión por computador.