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 píxel de uma imagem. Os alvos de profundidade utilizam PNGs em tons de cinza de 16 bits dimensionados ou matrizes NPY de ponto flutuante em metros.
Este guia explica o formato de conjunto de dados usado pelos modelos de estimativa de profundidade Ultralytics YOLO e lista as configurações de conjunto de dados integradas disponíveis para treinamento e validação.
Formato de conjunto de dados suportado#
Formato do mapa de profundidade#
Cada amostra de treino consiste numa imagem RGB e num ficheiro de profundidade emparelhado. Os valores PNG são divididos pelo nível do conjunto de dados opcional depth_scale para produzir metros. O padrão é 1000, pelo que um valor de 1500 representa 1.5 metros. O código 0 significa inválido; os PNGs não necessitam de metadados incorporados.
- Os ficheiros de profundidade utilizam
.png(preferencial) ou.npy. Os mapas PNG devem ser imagens em tons de cinza uint16 2D. As matrizes NPY devem ser 2D e de ponto flutuante, com valores em metros. - Define
depth_scaleapenas quando os PNGs não utilizam a convenção de milímetros padrão. Por exemplo, o KITTI utiliza256e o Virtual KITTI 2 utiliza100. - Cada arquivo de profundidade deve ter o mesmo nome base que o arquivo de imagem correspondente (por exemplo,
scene_001.pngfaz par comscene_001.jpg). - Os mapas de profundidade podem ser mais pequenos do que as respetivas imagens RGB, desde que a proporção de aspeto coincida; o treino redimensiona-os na memória.
- O carregador do conjunto de dados encontra os ficheiros de profundidade substituindo o componente de diretório
imagespordepth, preferindo.pnge recorrendo a.npy. - Os pixels com profundidade
≤ 0são tratados como inválidos e excluídos do cálculo de perda e métricas.
Como o código 0 está reservado para píxeis inválidos, um PNG uint16 fornece 65.535 valores de profundidade positivos. A escala controla tanto a precisão como o intervalo:
| Convenção | depth_scale | Resolução | Profundidade máxima |
|---|---|---|---|
| Padrão / ARKitScenes | 1000 | 1 mm | 65.535 m |
| KITTI | 256 | 3.90625 mm | 255.99609375 m |
| Virtual KITTI 2 | 100 | 1 cm | 655.35 m |
Estes são limites de armazenamento, não limites de treino recomendados. Um conjunto de dados pode definir um max_depth mais pequeno de forma independente para calibração de perda ou avaliação.
O layout padrão mantém imagens e mapas de profundidade em pastas paralelas:
dataset/
├── images/
│ ├── train/
│ └── val/
└── depth/
├── train/
└── val/Por exemplo, uma imagem em images/train/scene_001.jpg é emparelhada com um mapa de profundidade em depth/train/scene_001.png.
Formato YAML de conjunto de dados#
Conjuntos de dados de estimativa de profundidade são configurados com arquivos YAML. Os campos principais são:
| Chave | Descrição |
|---|---|
path | Diretório raiz do conjunto de dados. |
train | Caminho da imagem de treinamento relativo a path, ou um caminho absoluto. |
val | Caminho da imagem de validação relativo a path, ou um caminho absoluto. |
test | Caminho opcional de imagem de teste. |
nc | Número de classes — sempre 1 para estimativa de profundidade. |
names | Mapeamento de nomes de classes — sempre {0: depth}. |
depth_scale | Unidades PNG opcionais por metro; o padrão é 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#
Treine um modelo de estimativa de profundidade YOLO26 com Python ou 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)Datasets suportados#
Os modelos de profundidade YOLO26 são pré-treinados em uma ampla mistura de múltiplos conjuntos de dados (~2,19M de imagens) abrangendo faixas internas (≤10 m) a externas (~80 m), e então avaliados zero-shot em cinco benchmarks. Cada conjunto de dados tem uma página dedicada:
Depuração
- Depth8 — 8 imagens SUN RGB-D em um arquivo compactado de download automático de 1,3 MB, para testes rápidos de pipeline
Fontes de pré-treinamento
- ARKitScenes — ambiente interno real, Apple ARKit LiDAR (maior fonte real)
- SUN RGB-D — ambiente interno real, RGB-D multissensor
- DIODE — ambiente interno + externo real, verdade terrestre com escâner a laser denso
- Hypersim — ambiente interno sintético fotorrealista
- TartanAir — sintético, ambientes diversos
- Virtual KITTI 2 — direção sintética em ambiente externo
- KITTI — direção real em ambiente externo, Velodyne LiDAR (também uma referência de avaliação)
- ImageNet (pseudo-labeled) — conjunto de destilação com pseudorrotulagem, a maior fonte única
Benchmarks de avaliação
- NYU Depth V2 — principal referência para ambientes internos
- KITTI Eigen — referência de direção em ambiente externo
- ETH3D — alta precisão em ambientes internos + externos
- Make3D — ambiente externo, fora de distribuição
- iBims-1 — ambiente interno de alta qualidade (bordas e superfícies planares)
A precisão por modelo nestas referências e os pesos pré-treinados para download estão listados na Depth Estimation task page. Um arquivo YAML de dataset cujo campo train lista vários diretórios de imagens combina essas fontes para treinamento misto em larga escala.
Adicionando seu próprio conjunto de dados#
- Salve imagens RGB em pastas de divisão como
images/traineimages/val. - Guarda um PNG ou NPY de profundidade por imagem nas pastas correspondentes
depth/trainedepth/valutilizando a mesma raiz de ficheiro que a imagem. Utilizasave_depth_png()para converter matrizes de metros em PNGs de milímetros compactos. - Certifica-te de que os valores de profundidade descodificados estão em metros e de que os píxeis inválidos ou em falta utilizam
0ou valores negativos. - Crie um YAML de conjunto de dados com
path,train,val,nc: 1enames: {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: 1000FAQ#
Utiliza PNGs em tons de cinza de 16 bits dimensionados para conjuntos de dados compactos. Por predefinição, cada incremento inteiro corresponde a um milímetro; define
depth_scaleno YAML do conjunto de dados para outra escala.ultralytics.data.utils.save_depth_png()converte matrizes de metros para o formato predefinido. Os mapas NPY de ponto flutuante em metros também funcionam diretamente.Pixels com valores de profundidade
≤ 0são tratados como inválidos e mascarados tanto no cálculo de perda quanto na avaliação de métricas. Isso abrange ruído de sensores, regiões de céu e superfícies reflexivas onde a profundidade não pode ser medida com confiabilidade.A validação da estimativa de profundidade relata o conjunto padrão de métricas Depth Anything:
- delta1 / delta2 / delta3 — porcentagem de pixels dentro dos limites de 1,25×, 1,25²×, 1,25³×. Quanto maior, melhor.
- abs_rel — erro relativo absoluto médio. Quanto menor, melhor.
- rmse — erro quadrático médio em metros. Quanto menor, melhor.
- silog — erro logarítmico invariante de escala. Quanto menor, melhor.
Sim. Cada ficheiro de profundidade
.pngou.npydeve partilhar a mesma raiz que a imagem correspondente. O carregador obtém o caminho de profundidade substituindo o componente de diretórioimagespordepth, preferindo PNG e recorrendo a NPY. As imagens cujo ficheiro de profundidade esteja em falta ou seja ilegível são descartadas durante a verificação do conjunto de dados em cache com um aviso.