Ultralytics YOLO27:

Visão geral dos conjuntos de dados de estimativa de profundidade#

A estimativa de profundidade monocular atribui um valor de profundidade em metros a cada pixel de uma imagem. Os alvos de profundidade usam PNGs em escala de cinza de 16 bits ou matrizes NPY de ponto flutuante em metros.

Este guia explica o formato dos conjuntos de dados usado pelos modelos de estimativa de profundidade Ultralytics YOLO e lista as configurações de conjuntos de dados integradas disponíveis para treino e validação.

Formato de conjunto de dados compatível#

Formato do mapa de profundidade#

Cada amostra de treino consiste numa imagem RGB e num ficheiro de profundidade correspondente. Os valores PNG são divididos pelo depth_scale opcional ao nível do conjunto de dados para produzir metros. O valor predefinido é 1000, portanto, um valor de 1500 representa 1.5 metros. O código 0 significa inválido; os PNGs não precisam de metadados incorporados.

  • Os ficheiros de profundidade usam .png (preferencial) ou .npy. Os mapas PNG devem ser imagens em escala de cinza uint16 2D. As matrizes NPY devem ser 2D e de ponto flutuante, com valores em metros.
  • Define depth_scale apenas quando os PNGs não usam a convenção predefinida de milímetros. Por exemplo, o KITTI usa 256 e o Virtual KITTI 2 usa 100.
  • Cada ficheiro de profundidade deve ter o mesmo nome-base que o respetivo ficheiro de imagem (por exemplo, scene_001.png corresponde a scene_001.jpg).
  • Os mapas de profundidade podem ser menores do que as respetivas imagens RGB, desde que a proporção seja igual; o treino redimensiona-os em memória.
  • O carregador do conjunto de dados encontra os ficheiros de profundidade substituindo o componente de diretório images por depth, dando preferência a .png e recorrendo a .npy.
  • Os pixels com profundidade ≤ 0 são tratados como inválidos e excluídos do cálculo da perda e das métricas.

Como o código 0 é reservado para pixels inválidos, um PNG uint16 fornece 65 535 valores de profundidade positivos. A escala controla tanto a precisão como o alcance:

Convençãodepth_scaleResoluçãoProfundidade máxima
Predefinição / ARKitScenes10001 mm65.535 m
KITTI2563.90625 mm255.99609375 m
Virtual KITTI 21001 cm655.35 m

Estes são limites de armazenamento, não limites de treino recomendados. Um conjunto de dados pode definir um max_depth menor de forma independente para calibração da perda ou avaliação.

O esquema padrão mantém as imagens e os mapas de profundidade em pastas paralelas:

dataset/
├── images/
│   ├── train/
│   └── val/
└── depth/
    ├── train/
    └── val/

Por exemplo, uma imagem em images/train/scene_001.jpg corresponde a um mapa de profundidade em depth/train/scene_001.png.

Formato YAML do conjunto de dados#

Os conjuntos de dados de estimativa de profundidade são configurados com ficheiros YAML. Os campos principais são:

ChaveDescrição
pathDiretório raiz do conjunto de dados.
trainCaminho das imagens de treino relativo a path ou um caminho absoluto.
valCaminho das imagens de validação relativo a path ou um caminho absoluto.
testCaminho opcional das imagens de teste.
ncNúmero de classes — sempre 1 para a estimativa de profundidade.
namesMapeamento dos nomes das classes — sempre {0: depth}.
depth_scaleUnidades PNG opcionais por metro; o valor predefinido é 1000.
ultralytics/cfg/datasets/nyu-depth.yaml
# 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.zip

Utilização#

Treina um modelo de estimativa de profundidade YOLO26 com Python ou CLI:

Exemplo
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 dados suportados#

Os modelos de profundidade YOLO26 são pré-treinados em uma ampla mistura de vários conjuntos de dados (~2,19M imagens) que abrangem faixas de ambientes internos (≤10 m) a externos (~80 m), sendo avaliados em seguida em cinco benchmarks, zero-shot em todos, exceto no KITTI Eigen. Cada conjunto de dados possui uma página dedicada, e vários estão hospedados na Ultralytics Platform para navegação e treinamento em nuvem.

Depuração

  • Depth8 — 8 imagens SUN RGB-D num arquivo de 1,3 MB descarregado automaticamente, para testes rápidos do pipeline

Fontes de pré-treino

  • ARKitScenes — interior real, LiDAR Apple ARKit (maior fonte real)
  • SUN RGB-D — interior real, RGB-D multissensor
  • DIODE — interior e exterior reais, verdade fundamental densa de scanner laser
  • Hypersim — interior sintético fotorrealista
  • TartanAir — sintético, ambientes diversificados
  • Virtual KITTI 2 — condução exterior sintética
  • KITTI — condução exterior real, LiDAR Velodyne (também uma referência de avaliação)
  • ImageNet (pseudo-rotulado) — conjunto de destilação pseudo-rotulado, a maior fonte individual

Referências de avaliação

  • NYU Depth V2 — principal referência interior
  • KITTI Eigen — referência de condução exterior
  • ETH3D — interior e exterior de alta precisão
  • Make3D — exterior, fora da distribuição
  • iBims-1 — interior de alta qualidade (contornos e superfícies planas)

A precisão de cada modelo nestas referências e os pesos pré-treinados descarregáveis estão listados na página da tarefa de estimativa de profundidade. Um YAML de conjunto de dados cujo campo train lista vários diretórios de imagens combina estas fontes para um treino misto em grande escala.

Adicionar o teu próprio conjunto de dados#

  1. Guarda as imagens RGB em pastas de divisão, como images/train e images/val.
  2. Guarda um PNG ou NPY de profundidade por imagem nas pastas correspondentes depth/train e depth/val, usando o mesmo nome-base do ficheiro de imagem. Usa save_depth_png() para converter matrizes em metros em PNGs compactos em milímetros.
  3. Garante que os valores de profundidade descodificados estão em metros e que os pixels inválidos ou em falta usam 0 ou valores negativos.
  4. Cria um YAML de conjunto de dados com path, train, val, nc: 1 e names: {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: 1000

Perguntas frequentes#

  • Usa PNGs em escala de cinza de 16 bits para conjuntos de dados compactos. Por predefinição, cada passo inteiro corresponde a um milímetro; define depth_scale no YAML do conjunto de dados para usar outra escala. ultralytics.data.utils.save_depth_png() converte matrizes em metros para o formato predefinido. Os mapas NPY de ponto flutuante em metros também funcionam diretamente.

  • Os pixels com valores de profundidade ≤ 0 são tratados como inválidos e excluídos tanto do cálculo da perda como da avaliação das métricas. Isto abrange ruído do sensor, regiões do céu e superfícies refletoras onde a profundidade não pode ser medida de forma fiável.

  • A validação da estimativa de profundidade apresenta o conjunto padrão de métricas do Depth Anything:

    • delta1 / delta2 / delta3 — percentagem de pixels dentro dos limiares de 1.25×, 1.25²× e 1.25³×. Valores mais altos são melhores.
    • abs_rel — erro relativo absoluto médio. Quanto menor, melhor.
    • rmse — raiz do erro quadrático médio em metros. Quanto menor, melhor.
    • silog — erro logarítmico invariante à escala. Quanto menor, melhor.
  • Sim. Cada ficheiro de profundidade .png ou .npy deve partilhar o mesmo nome-base que a imagem correspondente. O carregador determina o caminho da profundidade substituindo o componente de diretório images por depth, dando preferência a PNG e recorrendo a NPY. As imagens cujo ficheiro de profundidade esteja em falta ou não possa ser lido são descartadas durante a análise do conjunto de dados em cache, com um aviso.

Comentários