Descripción general de los conjuntos de datos de estimación de profundidad#
La estimación monocular de profundidad asigna un valor de profundidad en metros a cada píxel de una imagen. Los valores objetivo de profundidad utilizan PNG en escala de grises de 16 bits escalados o matrices NPY de coma flotante en metros.
Esta guía explica el formato de conjunto de datos utilizado por los modelos de estimación de profundidad de Ultralytics YOLO y enumera las configuraciones de conjuntos de datos integradas disponibles para el entrenamiento y la validación.
Formato de conjunto de datos compatible#
Formato del mapa de profundidad#
Cada muestra de entrenamiento consta de una imagen RGB y un archivo de profundidad asociado. Los valores PNG se dividen entre el depth_scale opcional a nivel de conjunto de datos para obtener metros. El valor predeterminado es 1000, por lo que un valor de 1500 representa 1.5 metros. El código 0 indica que no es válido; los PNG no necesitan metadatos incrustados.
- Los archivos de profundidad utilizan
.png(preferido) o.npy. Los mapas PNG deben ser imágenes 2D en escala de grises uint16. Las matrices NPY deben ser 2D y de coma flotante, con valores en metros. - Establece
depth_scalesolo cuando los PNG no utilicen la convención predeterminada de milímetros. Por ejemplo, KITTI utiliza256y Virtual KITTI 2 utiliza100. - Cada archivo de profundidad debe tener el mismo nombre base que su archivo de imagen correspondiente (por ejemplo,
scene_001.pngse empareja conscene_001.jpg). - Los mapas de profundidad pueden ser más pequeños que sus imágenes RGB siempre que coincida la relación de aspecto; el entrenamiento cambia su tamaño en memoria.
- El cargador del conjunto de datos encuentra los archivos de profundidad sustituyendo el componente de directorio
imagespordepth, dando preferencia a.pngy recurriendo a.npycomo alternativa. - Los píxeles con profundidad
≤ 0se tratan como no válidos y se excluyen del cálculo de la pérdida y de las métricas.
Como el código 0 está reservado para los píxeles no válidos, un PNG uint16 proporciona 65.535 valores de profundidad positivos. La escala controla tanto la precisión como el rango:
| Convención | depth_scale | Resolución | Profundidad máxima |
|---|---|---|---|
| Predeterminada / ARKitScenes | 1000 | 1 mm | 65.535 m |
| KITTI | 256 | 3.90625 mm | 255.99609375 m |
| Virtual KITTI 2 | 100 | 1 cm | 655.35 m |
Estos son límites de almacenamiento, no límites de entrenamiento recomendados. Un conjunto de datos puede establecer de forma independiente un max_depth menor para calibrar la pérdida o realizar la evaluación.
La estructura estándar mantiene las imágenes y los mapas de profundidad en carpetas paralelas:
dataset/
├── images/
│ ├── train/
│ └── val/
└── depth/
├── train/
└── val/Por ejemplo, una imagen en images/train/scene_001.jpg se empareja con un mapa de profundidad en depth/train/scene_001.png.
Formato YAML del conjunto de datos#
Los conjuntos de datos de estimación de profundidad se configuran con archivos YAML. Los campos principales son:
| Clave | Descripción |
|---|---|
path | Directorio raíz del conjunto de datos. |
train | Ruta de las imágenes de entrenamiento relativa a path o una ruta absoluta. |
val | Ruta de las imágenes de validación relativa a path o una ruta absoluta. |
test | Ruta opcional de las imágenes de prueba. |
nc | Número de clases: siempre 1 para la estimación de profundidad. |
names | Asignación de nombres de clase: siempre {0: depth}. |
depth_scale | Unidades PNG opcionales por metro; el valor predeterminado es 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.zipUso#
Entrena un modelo de estimación de profundidad YOLO26 con Python o la 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)Conjuntos de datos compatibles#
Los modelos de profundidad de YOLO26 están preentrenados en una amplia combinación de múltiples conjuntos de datos (~2.19M de imágenes) que abarcan rangos de interiores (≤10 m) a exteriores (~80 m), y luego se evalúan en cinco puntos de referencia, de forma zero-shot en todos excepto en KITTI Eigen. Cada conjunto de datos tiene una página dedicada, y varios están alojados en Ultralytics Platform para su exploración y entrenamiento en la nube.
Depuración
- Depth8 — 8 imágenes SUN RGB-D en un archivo de 1,3 MB que se descarga automáticamente, para probar rápidamente la canalización
Fuentes de preentrenamiento
- ARKitScenes — interior real, LiDAR de Apple ARKit (la mayor fuente real)
- SUN RGB-D — interior real, RGB-D multisensor
- DIODE — interior y exterior reales, datos de referencia densos de escáner láser
- Hypersim — interior sintético fotorrealista
- TartanAir — sintético, entornos diversos
- Virtual KITTI 2 — conducción exterior sintética
- KITTI — conducción exterior real, LiDAR de Velodyne (también un benchmark de evaluación)
- ImageNet (con etiquetas pseudoanotadas) — conjunto de destilación con etiquetas pseudoanotadas, la mayor fuente individual
Benchmarks de evaluación
- NYU Depth V2 — benchmark principal de interiores
- KITTI Eigen — benchmark de conducción exterior
- ETH3D — interior y exterior de alta precisión
- Make3D — exterior, fuera de distribución
- iBims-1 — interior de alta calidad (bordes y superficies planas)
La precisión de cada modelo en estos benchmarks y los pesos preentrenados descargables se indican en la página de la tarea de estimación de profundidad. Un YAML de conjunto de datos cuyo campo train enumera varios directorios de imágenes combina estas fuentes para realizar un entrenamiento mixto a gran escala.
Añadir tu propio conjunto de datos#
- Guarda las imágenes RGB en carpetas de partición como
images/trainyimages/val. - Guarda un PNG o NPY de profundidad por imagen en las carpetas
depth/trainydepth/valcorrespondientes, utilizando el mismo nombre base que la imagen. Usasave_depth_png()para convertir matrices en metros en PNG compactos en milímetros. - Asegúrate de que los valores de profundidad decodificados estén en metros y de que los píxeles no válidos o ausentes utilicen
0o valores negativos. - Crea un YAML del conjunto de datos con
path,train,val,nc: 1ynames: {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: 1000Preguntas frecuentes#
Utiliza PNG en escala de grises de 16 bits escalados para conjuntos de datos compactos. De forma predeterminada, cada paso entero equivale a un milímetro; establece
depth_scaleen el YAML del conjunto de datos para utilizar otra escala.ultralytics.data.utils.save_depth_png()convierte las matrices en metros al formato predeterminado. Los mapas NPY de coma flotante en metros también funcionan directamente.Los píxeles con valores de profundidad
≤ 0se tratan como no válidos y se enmascaran tanto en el cálculo de la pérdida como en la evaluación de las métricas. Esto incluye el ruido de los sensores, las regiones del cielo y las superficies reflectantes en las que la profundidad no se puede medir de forma fiable.La validación de la estimación de profundidad informa del conjunto de métricas estándar de Depth Anything:
- delta1 / delta2 / delta3 — porcentaje de píxeles dentro de los umbrales 1,25×, 1,25²× y 1,25³×. Cuanto mayor, mejor.
- abs_rel — error relativo absoluto medio. Cuanto menor, mejor.
- rmse — raíz del error cuadrático medio en metros. Cuanto menor, mejor.
- silog — error logarítmico invariante a la escala. Cuanto menor, mejor.
Sí. Cada archivo de profundidad
.pngo.npydebe compartir el mismo nombre base que la imagen correspondiente. El cargador deriva la ruta de profundidad sustituyendo el componente de directorioimagespordepth, dando preferencia a PNG y recurriendo a NPY como alternativa. Las imágenes cuyo archivo de profundidad falta o no se puede leer se descartan durante el análisis del conjunto de datos almacenado en caché y se muestra una advertencia.