Estimación de profundidad monocular#
La estimación de profundidad monocular predice un mapa de profundidad por píxel a partir de una única imagen RGB. Cada píxel de salida contiene un valor de profundidad en metros que representa la distancia estimada desde la cámara hasta ese punto de la superficie.
La salida de un modelo de profundidad es un mapa flotante denso de forma (H, W) alineado con la imagen de entrada. Esta representación por píxel hace que la estimación de profundidad monocular sea idónea para la reconstrucción de escenas en 3D, la navegación de robots, la creación de contenidos de realidad aumentada y virtual (AR/VR) y cualquier aplicación que requiera una disposición espacial a partir de una sola cámara.
Usa task=depth o la tarea de la CLI yolo depth para la estimación de profundidad monocular. Los archivos del modelo de profundidad YOLO26 utilizan el sufijo -depth, como yolo26n-depth.pt.
Watch: Monocular Depth Estimation with Ultralytics YOLO26 | Python Tutorial | Vision AI 🚀
Modelos#
A continuación se muestran los modelos de profundidad YOLO26 preentrenados en una amplia combinación de múltiples conjuntos de datos (interiores + exteriores, ~2,19M de imágenes). Las columnas de métricas se informan en la división de prueba Eigen de NYU Depth V2.
Los Modelos se descargan automáticamente de la última versión de Ultralytics en su primer uso.
| Modelo | tamaño (píxeles) | delta1NYU | abs_relNYU | rmseNYU | Velocidad CPU ONNX (ms) | Velocidad T4 TensorRT10 (ms) | params (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|---|
| YOLO26n-depth | 768 | 0.882 | 0.109 | 0.414 | 272.0 ± 27.2 | 2.7 ± 0.1 | 6.4 | 46.9 |
| YOLO26s-depth | 768 | 0.896 | 0.104 | 0.399 | 393.7 ± 13.1 | 3.8 ± 0.0 | 13.2 | 67.9 |
| YOLO26m-depth | 768 | 0.921 | 0.089 | 0.364 | 621.5 ± 49.7 | 6.0 ± 0.1 | 23.3 | 130.7 |
| YOLO26l-depth | 768 | 0.930 | 0.083 | 0.351 | 821.9 ± 50.7 | 7.7 ± 0.1 | 27.7 | 157.2 |
| YOLO26x-depth | 768 | 0.933 | 0.080 | 0.344 | 1240.9 ± 73.3 | 13.6 ± 0.2 | 57.0 | 302.0 |
- delta1NYU es el porcentaje de píxeles donde la profundidad predicha está dentro de un factor de 1,25 respecto a la verdad fundamental, en la división de prueba Eigen de NYU Depth V2 (654 imágenes) con TTA de escala múltiple + volteo horizontal y alineación log-least-squares.
- La precisión a escala única sin TTA es reproducible con
yolo depth val model=yolo26n-depth.pt data=nyu-depth.yaml imgsz=768 device=0(sustituyemodel=para cada tamaño), que utiliza alineación de mediana (solo escala) y obtiene puntuaciones más bajas: delta1 0,783 (n), 0,793 (s), 0,840 (m), 0,853 (l), 0,860 (x). - abs_rel es el error relativo absoluto medio entre los valores de profundidad predichos y los de la verdad fundamental.
- rmse es el error cuadrático medio en metros.
- Speed es la latencia exclusiva de inferencia (se excluyen el preprocesamiento y el postprocesamiento) a
imgsz=768,batch=1, expresada como la media ± la desviación estándar en ejecuciones cronometradas tras el calentamiento. CPU ONNX es ONNX Runtime fp32 en un Intel Xeon de 32 núcleos (Skylake); T4 TensorRT10 es TensorRT fp16 en una Tesla T4. - params y FLOPs se miden a 768×768, la resolución de entrenamiento de los pesos publicados.
Velocidad en comparación con Depth Anything V2#
Depth Anything V2 es una base abierta muy utilizada para la profundidad monocular. Su columna vertebral de transformador visual DINOv2 y su decodificador DPT consumen muchos recursos informáticos, por lo que, en la misma Tesla T4 bajo TensorRT fp16, el modelo Depth Anything V2 publicado más pequeño es más lento que todos los modelos de profundidad YOLO26, incluido YOLO26x-depth, que transporta más del doble de parámetros.
A ~768 px — imgsz=768 para YOLO26, la resolución a la que se entrenan sus pesos publicados, y 770 px para Depth Anything V2, cuyo tronco DINOv2 requiere un múltiplo de su tamaño de parche de 14:
| Modelo | parámetros (M) | FLOPs (B) | T4 TensorRT10 (ms) | FPS | Aceleración frente a V2 Small | Aceleración frente a V2 Base |
|---|---|---|---|---|---|---|
| Depth Anything V2 Base | 97.5 | 1025.5 | 55.40 | 18.1 | — | — |
| Depth Anything V2 Small | 24.8 | 346.9 | 20.99 | 47.6 | — | — |
| YOLO26x-depth | 57.0 | 302.0 | 13.57 | 73.7 | 1.5× | 4.1× |
| YOLO26l-depth | 27.7 | 157.2 | 7.68 | 130.2 | 2.7× | 7.2× |
| YOLO26m-depth | 23.3 | 130.7 | 6.00 | 166.7 | 3.5× | 9.2× |
| YOLO26s-depth | 13.2 | 67.9 | 3.82 | 261.6 | 5.5× | 14.5× |
| YOLO26n-depth | 6.4 | 46.9 | 2.73 | 365.8 | 7.7× | 20.3× |
A ~640 px — imgsz=640 y 644 px respectivamente —, el orden no varía, y YOLO26n-depth es 5,9 veces más rápido que Depth Anything V2 Small:
| Modelo | T4 TensorRT10 (ms) | FPS |
|---|---|---|
| Depth Anything V2 Base | 35.10 | 28.5 |
| Depth Anything V2 Small | 13.62 | 73.4 |
| YOLO26x-depth | 10.26 | 97.5 |
| YOLO26l-depth | 6.14 | 162.8 |
| YOLO26m-depth | 4.71 | 212.1 |
| YOLO26s-depth | 3.08 | 324.4 |
| YOLO26n-depth | 2.29 | 436.9 |
- La latencia es exclusiva de la inferencia,
batch=1, TensorRT fp16 en una Tesla T4 —el mismo entorno de pruebas que la tabla de modelos anterior, que se muestra aquí con dos decimales; los FPS son el recíproco de la latencia sin redondear. Las columnas Speedup dividen la latencia de Depth Anything V2 Small (20,99 ms) y Base (55,40 ms) entre la latencia de YOLO26. - Depth Anything V2 Small y Base son los puntos de control ViT-S y ViT-B publicados.
- La comparación abarca únicamente la latencia; las dos familias de modelos no se evalúan aquí bajo un protocolo de precisión compartido.
Rango de profundidad y la cabecera log-depth#
La cabeza de profundidad predice exp(logit) — sin límite (~0,02–150 m) — y desacopla la forma de la escena de la escala absoluta: la red predice un campo de profundidad logarítmica relativa, y los metros absolutos se establecen mediante una transformación independiente de dos parámetros (exp(a·log d + b)) recuperada en la evaluación, mediante una calibración ligera o mediante un ajuste preciso. La alternativa habitual, una cabeza sigmoid × max_depth acotada, integra en su lugar un límite fijo en la arquitectura, por lo que cualquier profundidad superior a max_depth se recorta, lo que impide entrenar con escenas de mayor alcance y predecirlas.
Por qué la cabecera no tiene límites: evidencia en todos los rangos de profundidad#
A/B controlado: mismos datos, mismo cronograma, solo cambia la cabecera. Entrenar ambas cabeceras desde cero con una combinación idéntica de datos de interiores (≤10 m) y exteriores (≤80 m):
| Cabezal | Rango de salida | Val δ1 de rango mixto | Comportamiento del entrenamiento |
|---|---|---|---|
sigmoid × max_depth (10 m) | limitado 0–10 m | 0.221 | se estabiliza en la época 1 |
log (sin límite) | 0–~150 m | 0.367 (+66%) | mejora continuamente |
La cabeza acotada no puede representar la mayoría de los píxeles de exterior (>10 m), por lo que deja de mejorar casi de inmediato; la cabeza log aprende de todo el rango.
El modo de fallo que soluciona: ajuste fino de un solo conjunto de datos, estratificado por rango. Ajustar una cabecera delimitada (10 m) en conjuntos de datos individuales funciona cuando los datos se ajustan al límite y colapsa cuando lo exceden:
| Conjunto de datos | Rango de profundidad | δ1 de cabecera limitada |
|---|---|---|
| SUN RGB-D | ≤10 m | 0.78 ✅ |
| Hypersim | principalmente ≤10 m | 0.74 ✅ |
| KITTI | ~80 m | 0,08 ❌ (abs_rel ≈ 7,0 — la discrepancia de escala 80/10) |
| vKITTI2 | 80 m | 0.04 ❌ |
El colapso se produce exactamente en el límite de la cota. La cabeza log no tiene dicho límite.
Modelos publicados: rendimiento en múltiples rangos. La familia de cabezas log enviada, evaluada en benchmarks que van desde 10 m (NYU, iBims-1) hasta 80 m (KITTI), con δ1 alineado a escala:
| Evaluación comparativa (Benchmark) | Rango | YOLO26x-depth (log) | lanzamiento anterior limitado |
|---|---|---|---|
| NYU Eigen | 10 m | 0.933 | 0.934 |
| iBims-1 | 10 m | 0.961 | 0.945 |
| ETH3D | ~60 m | 0.959 | 0.931 |
| Make3D | ~70 m | 0.302 | 0.296 |
| KITTI Eigen | 80 m | 0.942 | 0.891 |
| Media | — | 0.819 | 0.799 |
Ambas columnas tal y como se publicaron. El resto de las filas se evalúan con el protocolo TTA y de mínimos cuadrados logarítmicos descrito en sus páginas de conjuntos de datos, que el validador de este repositorio no implementa, por lo que la fila de KITTI no se puede volver a medir en las mismas condiciones; la página de KITTI incluye cifras medidas en la división canónica Eigen de 652 fotogramas.
Las mayores ganancias se obtienen en los puntos de referencia de exteriores de mayor rango (KITTI, ETH3D) — exactamente donde un límite fijo de 10 m perjudica más — mientras que el rendimiento en interiores se conserva.
Entrenar#
Entrena YOLO26n-depth en el conjunto de datos Depth8 durante 100 épocas con un tamaño de imagen de 640. Para obtener una lista completa de los argumentos disponibles, consulta la página Configuration.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-depth.yaml") # build a new model from YAML
model = YOLO("yolo26n-depth.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n-depth.yaml").load("yolo26n-depth.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="depth8.yaml", epochs=100, imgsz=640)Consulta todos los detalles del modo train en la página Train.
Ajuste fino con tus propios datos#
Al adaptar un modelo de profundidad preentrenado a un conjunto de datos personalizado, reduce la tasa de aprendizaje y utiliza el optimizador AdamW. La configuración predeterminada del optimizador está ajustada para entrenar desde cero (SGD con lr0=0.01); si se aplica a un modelo de profundidad que ya ha convergido, puede sobrescribir el conocimiento preentrenado y degradar los resultados, especialmente al realizar un ajuste preciso en un solo dominio.
from ultralytics import YOLO
model = YOLO("yolo26s-depth.pt") # start from pretrained weights
model.train(
data="path/to/your_dataset.yaml",
epochs=20,
imgsz=640,
optimizer="AdamW",
lr0=1e-4, # ~100x below the from-scratch default
warmup_bias_lr=1e-4, # keep warmup gentle too
)Consejos adicionales:
- La aumentación se controla mediante los argumentos estándar (
degrees,translate,scale,shear,perspective,flipud,fliplr,hsv_h,hsv_s,hsv_v); la distorsión geométrica y los giros se aplican de forma idéntica al mapa de profundidad vinculado. Para ver la receta exacta utilizada para los pesos de YOLO26-Depth publicados, inspecciona el elementotrain_argsalmacenado en el punto de control; consulta Inspecting YOLO26 Checkpoint Training Args. mosaic,mixup,cutmixycopy_pasteno están implementados para la profundidad. El cargador de conjuntos de datos de profundidad establece automáticamente estas probabilidades en 0, por lo que pasarlas no tiene ningún efecto. Estas aumentaciones no son compatibles porque combinan varias imágenes, lo que produciría mapas de profundidad emparejados no válidos.- Cualquier rango de profundidad funciona sin configuración previa. Los modelos con cabeza
logpredicen una profundidad sin límites, por lo que se adaptan a datos de corto alcance (macro) o de largo alcance (exteriores/conducción) sin necesidad de realizar cambios. Si configurasmax_depth:en el archivo YAML de tu conjunto de datos (en metros), delimitarás qué píxeles de verdad de terreno (GT) cuentan para las métricas de validación. - Mantén el rendimiento general. Si necesitas que el modelo siga siendo preciso en escenas más allá de tu conjunto de entrenamiento, mezcla una pequeña fracción (~5–10%) de imágenes diversas de propósito general en tus datos de entrenamiento; esto reduce sustancialmente el olvido durante el ajuste fino.
- Entrena desde cero (
model=yolo26s-depth.yaml) solo si tu dominio es muy diferente y dispones de un conjunto de datos grande; en ese caso, el SGD predeterminadolr0=0.01es apropiado, ya que no hay pesos preentrenados que preservar.
Calibración de la escala de profundidad#
La cabeza de profundidad separa la forma (estructura relativa de la escena) de la escala (metros absolutos). Si un modelo ya produce una buena profundidad relativa en tus escenas, pero los valores absolutos no son correctos para tu cámara, puedes corregir la escala en segundos con model.calibrate() —un ajuste de forma cerrada de una regresión log-afín de dos parámetros frente a un pequeño conjunto etiquetado, sin entrenamiento por gradiente y sin cambios en los pesos de la red, por lo que no puede degradar la estructura relativa.
from ultralytics import YOLO
model = YOLO("yolo26s-depth.pt")
# Fit scale on a labeled split (~100+ images is enough), then persist it
model.calibrate(data="path/to/your_dataset.yaml")
model.save("yolo26s-depth-calibrated.pt")La calibración necesita una profundidad de verdad de terreno con la que ajustarse, por lo que se ejecuta en una división etiquetada; no es algo que pueda ocurrir en una inferencia a ciegas. Se ajusta y puntúa en los mismos píxeles que evalúan las métricas de validación: se excluye la verdad de terreno (GT) situada en o más allá del parámetro max_depth del archivo YAML del conjunto de datos (100 m por defecto). Úsala cuando la profundidad relativa ya sea buena y solo falle la escala o el rango; si la estructura relativa en sí misma necesita cambiar para tu dominio, haz un ajuste preciso en su lugar.
El entrenamiento hace esto por ti automáticamente: una vez que se completa model.train(...), los puntos de control mejor y último se calibran en el conjunto de validación para que emitan una profundidad escalada métricamente de forma nativa.
Los puntos de control publicados de yolo26*-depth.pt vienen con esta calibración ya integrada, ajustada en la combinación de validación de preentrenamiento. Se trata de una única escala global en todos los dominios, por lo que para obtener la profundidad absoluta más precisa en una cámara o tipo de escena específico, ejecuta model.calibrate() en una pequeña división etiquetada de tus propios datos; esto sustituye al ajuste preintegrado.
Formato del conjunto de datos#
Los conjuntos de datos de estimación de profundidad emparejan cada imagen RGB con un archivo de profundidad correspondiente. Los objetivos de profundidad se almacenan como matrices .npy que contienen valores float32 en metros. El archivo YAML del conjunto de datos apunta a un directorio images/; el cargador deduce la ruta del archivo de profundidad sustituyendo el componente images por depth y cambiando la extensión de la imagen por .npy.
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.npy. Consulta la Guía del conjunto de datos de estimación de profundidad para ver la especificación completa del formato.
Validar#
Valida la precisión de un modelo YOLO26n-depth entrenado en un conjunto de datos de estimación de profundidad. Pasa data explícitamente para que la validación utilice el archivo YAML del conjunto de datos previsto. Los pesos publicados se entrenan en imgsz=768, por lo que debes validar y predecir en ese tamaño para obtener la mejor precisión.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-depth.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Validate the model
metrics = model.val(data="nyu-depth.yaml")
metrics.delta1 # percentage of pixels within threshold δ=1.25
metrics.abs_rel # mean absolute relative error
metrics.rmse # root mean squared error (meters)
metrics.silog # scale-invariant logarithmic errorPredecir#
Usa un modelo YOLO26n-depth entrenado para ejecutar predicciones en imágenes.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-depth.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg") # predict on an image
# Access the results
for result in results:
depth_map = result.depth.data.cpu().numpy() # torch.Tensor -> NumPy float32, shape (H, W), metersConsulta todos los detalles del modo predict en la página Predict.
Resultado de la salida#
La estimación de profundidad de YOLO devuelve un objeto Results por imagen. Cada resultado almacena un mapa de profundidad flotante denso para toda la imagen.
| Atributo | Tipo | Forma | Descripción |
|---|---|---|---|
result.depth | DepthMap | (H,W) | Mapa de profundidad denso por píxel. |
result.depth.data | torch.Tensor | (H,W) | Valores de profundidad en metros; llama a .cpu().numpy() para obtener NumPy. |
result.boxes | - | - | Sin cuadros de instancia. |
result.masks | - | - | Sin máscaras de instancia. |
Para ver los campos de Results específicos de cada tarea en todas ellas, consulta la sección Predict Results by Task.
Colorear el mapa de profundidad#
El mapa de profundidad bruto es una matriz flotante de un solo canal en metros, útil para el cálculo, pero difícil de leer directamente. Para convertirlo en una imagen en color, utiliza el colorize_depth auxiliar en ultralytics.utils.plotting, que asigna la matriz de profundidad (H, W) a una imagen BGR uint8 (H, W, 3) (los píxeles no válidos <= 0 se renderizan en negro).
result.plot() ya superpone esta coloración sobre la imagen de entrada utilizando los valores predeterminados (cmap="jet", mode="disparity"); llama a colorize_depth directamente cuando desees una imagen de profundidad en color independiente o una paleta de colores o normalización diferente.
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import colorize_depth
model = YOLO("yolo26n-depth.pt")
result = model("https://ultralytics.com/images/bus.jpg")[0]
depth = result.depth.data.cpu().numpy() # (H, W) float32, meters
# Colorize with near = warm and save
cv2.imwrite("depth_colored.png", colorize_depth(depth, cmap="spectral")) # (H, W, 3) BGR uint8
# Fix the range to 0-20 m so the same color means the same distance across frames
cv2.imwrite("depth_metric.png", colorize_depth(depth, vmin=0.0, vmax=20.0, cmap="inferno", mode="metric"))
# Blended overlay straight from the Results object (uses cmap="jet", mode="disparity")
result.save("depth_overlay.png")Cada mapa de colores va de frío/oscuro a cálido/brillante. El mode decide qué extremo está cerca, y vmin/vmax fijan el rango en todos los fotogramas para que un color signifique siempre la misma distancia.
| Argumento | Valor | Descripción |
|---|---|---|
cmap | jet (por defecto) | Azul → verde → rojo de alto contraste, la paleta que utiliza result.plot(). |
cmap | inferno | Negro → púrpura → naranja → amarillo. Perceptualmente uniforme, apto para daltónicos y legible en escala de grises. |
cmap | spectral | Rojo → amarillo → verde → azul (Spectral_r de matplotlib). |
mode | disparity (por defecto) | Normaliza la profundidad inversa (1/d) entre los percentiles 2 y 98; se absorben los valores atípicos cálidos cercanos y lejanos. |
mode | metric | Normaliza la profundidad en metros de forma lineal entre vmin y vmax; el color cálido indica distancia lejana, por lo que los colores corresponden a la distancia real. |
Exportar#
Exporta un modelo YOLO26n-depth a un formato diferente como ONNX, CoreML, etc.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-depth.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Export the model
model.export(format="onnx")Los formatos de exportación de estimación de profundidad de YOLO26 disponibles se encuentran en la tabla siguiente. Puedes exportar a cualquier formato utilizando el argumento format, es decir, format='onnx' o format='engine'. Puedes predecir o validar directamente en modelos exportados, es decir, yolo predict model=yolo26n-depth.onnx. Se muestran ejemplos de uso para tu modelo una vez finalizada la exportación.
| Formato | Argumento de format | Modelo | Metadatos | Argumentos |
|---|---|---|---|---|
| PyTorch | - | yolo26n-depth.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-depth.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-depth.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-depth_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-depth.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-depth.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-depth_saved_model/ | ✅ | imgsz, keras, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-depth.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-depth_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-depth_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-depth.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-depth_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-depth_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-depth_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-depth_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-depth_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-depth_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-depth_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| LiteRT | litert | yolo26n-depth.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-depth_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n-depth_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
Consulta todos los detalles de export en la página Export.
FAQ#
Prepara imágenes RGB emparejadas y archivos de profundidad
.npy, y luego crea un archivo YAML de conjunto de datos que apunte a tu directorioimages/. El cargador encuentra los archivos de profundidad automáticamente sustituyendoimagespordepthen la ruta y cambiando la extensión de la imagen por.npy.Parte de pesos preentrenados y utiliza una tasa de aprendizaje baja con AdamW para que el ajuste preciso conserve lo que el modelo ya sabe (consulta el motivo en Fine-tuning on your own data):
Ejemplofrom ultralytics import YOLO # Load a pretrained YOLO26 depth model model = YOLO("yolo26s-depth.pt") # Fine-tune on a custom depth dataset results = model.train( data="path/to/your_dataset.yaml", epochs=20, imgsz=640, optimizer="AdamW", lr0=1e-4, warmup_bias_lr=1e-4, )Consulta la página Configuration para ver más argumentos disponibles.
La validación de la estimación de profundidad reporta el conjunto de métricas utilizado por Depth Anything y trabajos relacionados con la profundidad monocular:
- delta1 / delta2 / delta3 — porcentaje de píxeles donde la relación entre la profundidad predicha y la real (o su inversa) es inferior a 1,25, 1,25² y 1,25³ respectivamente. Cuanto más alto, mejor.
- abs_rel — error absoluto medio relativo. Cuanto más bajo, mejor.
- rmse — error cuadrático medio en metros. Cuanto más bajo, mejor.
- silog — error logarítmico invariante a la escala. Cuanto más bajo, mejor.
Cada predicción está alineada por la mediana con su verdad terreno por imagen, cada métrica se finaliza en esa imagen y esos resultados por imagen se promedian sobre el conjunto de validación, por lo que cada imagen pesa lo mismo independientemente de cuántos píxeles de profundidad válidos contenga. Las imágenes con menos de 10 píxeles de verdad terreno válidos se omiten y no entran en dicho promedio, ya que alinear la mediana de un puñado de píxeles carece de sentido; en su lugar, las predicciones no finitas se puntúan en los límites de profundidad. Esto coincide con el promedio por muestra y el umbral mínimo de 10 píxeles utilizados por Depth Anything V2.
El mapa de profundidad se almacena como un elemento
torch.Tensorde forma(H, W)donde cada valor es la profundidad predicha en metros (utilizaresult.depth.data.cpu().numpy()para una matrizfloat32de NumPy). Accede a él a través deresult.depth.datadespués de ejecutar la predicción. El mapa está alineado con la resolución de la imagen de entrada.Ultralytics YOLO26 proporciona configuraciones YAML de conjuntos de datos integradas para varios conjuntos de datos de estimación de profundidad, incluidos NYU Depth V2, KITTI, Hypersim, SUN RGB-D y ARKitScenes. Consulta la Guía del conjunto de datos de estimación de profundidad para ver la lista completa y los detalles del formato.
Valida un modelo de profundidad YOLO26 preentrenado proporcionando el YAML del conjunto de datos utilizado para la evaluación:
Ejemplofrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-depth.pt") # Validate the model metrics = model.val(data="nyu-depth.yaml") print("delta1:", metrics.delta1) print("abs_rel:", metrics.abs_rel) print("rmse:", metrics.rmse)Exporta un modelo de profundidad YOLO26 a ONNX con Python o CLI:
Ejemplofrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-depth.pt") # Export the model to ONNX format model.export(format="onnx")Para obtener más detalles sobre la exportación a varios formatos, consulta la página Export.