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 objetivos de profundidad utilizan imágenes PNG en escala de grises de 16 bits escaladas o matrices NPY de coma flotante expresadas en metros.
Esta guía explica el formato de los conjuntos de datos que utilizan 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 de mapa de profundidad#
Cada muestra de entrenamiento consta de una imagen RGB y un archivo de profundidad asociado. Los valores PNG se dividen por el valor opcional depth_scale configurado en el conjunto de datos para obtener metros. El valor predeterminado es 1000, por lo que el valor 1500 representa 1.5 metros. El código 0 indica un valor no válido; los archivos PNG no necesitan metadatos incrustados.
- Los archivos de profundidad utilizan
.png(preferido) o.npy. Los mapas PNG deben ser imágenes en escala de grises uint16 2D. Las matrices NPY deben ser 2D y de coma flotante, con valores expresados en metros. - Configura
depth_scalesolo si los archivos PNG no utilizan 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 correspondiente archivo de imagen (por ejemplo,
scene_001.pngse empareja conscene_001.jpg). - Los mapas de profundidad pueden tener un tamaño inferior al de sus imágenes RGB siempre que mantengan la misma relación de aspecto; durante el entrenamiento se redimensionan en memoria.
- El cargador del conjunto de datos encuentra los archivos de profundidad sustituyendo el componente de directorio
imagespordepth. Da preferencia a.pngy, si no está disponible, recurre a.npy. - Los píxeles con profundidad
≤ 0se consideran 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, una imagen PNG uint16 proporciona 65.535 valores de profundidad positivos. La escala determina tanto la precisión como el alcance:
| 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 definir un valor max_depth inferior de forma independiente para calibrar la pérdida o 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 mediante archivos YAML. Estos son los campos principales:
| 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 por metro, opcional; 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 YOLO26 de estimación de profundidad con Python o la CLI:
from ultralytics import YOLO
# Carga un modelo de profundidad preentrenado
model = YOLO("yolo26n-depth.pt")
# Entrena con el conjunto de datos NYU Depth V2
results = model.train(data="nyu-depth.yaml", epochs=100, imgsz=640)Conjuntos de datos compatibles#
Los modelos YOLO26 de profundidad se preentrenan con una combinación amplia de varios conjuntos de datos (~2,19 M de imágenes) que abarca desde interiores (≤10 m) hasta exteriores (~80 m). Después, se evalúan en cinco benchmarks, sin entrenamiento específico previo en todos ellos salvo KITTI Eigen. Cada conjunto de datos tiene su propia página y varios están alojados en Ultralytics Platform, donde puedes explorarlos y entrenar en la nube.
Depuración
- Depth8: 8 imágenes de SUN RGB-D en un archivo de 1,3 MB que se descarga automáticamente, para probar rápidamente el flujo de trabajo
Fuentes de preentrenamiento
- ARKitScenes: imágenes reales de interiores, LiDAR de Apple ARKit (la mayor fuente real)
- SUN RGB-D: imágenes reales de interiores, RGB-D multisensor
- DIODE: imágenes reales de interiores y exteriores, datos de referencia densos de escáner láser
- Hypersim: interiores sintéticos fotorrealistas
- TartanAir: entornos sintéticos variados
- Virtual KITTI 2: conducción sintética en exteriores
- KITTI: conducción real en exteriores, LiDAR Velodyne (también es un benchmark de evaluación)
- ImageNet (con etiquetas seudogeneradas): conjunto de destilación con etiquetas seudogeneradas, la mayor fuente individual
Benchmarks de evaluación
- NYU Depth V2: benchmark principal de interiores
- KITTI Eigen: benchmark de conducción en exteriores
- ETH3D: alta precisión en interiores y exteriores
- Make3D: exteriores, fuera de distribución
- iBims-1: interiores de alta calidad (bordes y superficies planas)
La precisión de cada modelo en estos benchmarks y los pesos preentrenados descargables se enumeran 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 divisiones, como
images/trainyimages/val. - Guarda un PNG o NPY de profundidad por cada imagen en las carpetas correspondientes
depth/trainydepth/val, utilizando el mismo nombre base de archivo que la imagen. Usasave_depth_png()para convertir matrices en metros en archivos PNG compactos en milímetros. - Asegúrate de que los valores de profundidad decodificados estén expresados 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 imágenes PNG en escala de grises de 16 bits escaladas para crear conjuntos de datos compactos. De forma predeterminada, cada incremento entero equivale a un milímetro; configura
depth_scaleen el YAML del conjunto de datos para usar otra escala.ultralytics.data.utils.save_depth_png()convierte matrices en metros al formato predeterminado. También puedes utilizar directamente mapas NPY de coma flotante expresados en metros.Los píxeles con valores de profundidad
≤ 0se consideran no válidos y se enmascaran tanto para el cálculo de la pérdida como para la evaluación de las métricas. Esto incluye el ruido del sensor, las regiones del cielo y las superficies reflectantes en las que no se puede medir la profundidad de forma fiable.La validación de la estimación de profundidad muestra el conjunto estándar de métricas de Depth Anything:
- delta1 / delta2 / delta3: fracción de píxeles dentro de los umbrales 1,25×, 1,25²× y 1,25³×. Cuanto más alto, mejor.
- abs_rel — error relativo absoluto medio. Cuanto más bajo, mejor.
- rmse — raíz del error cuadrático medio en metros. Cuanto más bajo, mejor.
- silog — error logarítmico invariante a la escala. Cuanto más bajo, mejor.
Sí. Cada archivo de profundidad
.pngo.npydebe compartir el mismo nombre base que la imagen correspondiente. El cargador obtiene la ruta de profundidad sustituyendo el componente de directorioimagespordepth; da preferencia a PNG y, si no está disponible, recurre a NPY. Las imágenes cuyo archivo de profundidad no exista o no se pueda leer se descartan durante el análisis en caché del conjunto de datos y se muestra una advertencia.