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_scaleapenas quando os PNGs não usam a convenção predefinida de milímetros. Por exemplo, o KITTI usa256e o Virtual KITTI 2 usa100. - Cada ficheiro de profundidade deve ter o mesmo nome-base que o respetivo ficheiro de imagem (por exemplo,
scene_001.pngcorresponde ascene_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
imagespordepth, dando preferência a.pnge recorrendo a.npy. - Os pixels com profundidade
≤ 0sã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ção | depth_scale | Resolução | Profundidade máxima |
|---|---|---|---|
| Predefiniçã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 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:
| Chave | Descrição |
|---|---|
path | Diretório raiz do conjunto de dados. |
train | Caminho das imagens de treino relativo a path ou um caminho absoluto. |
val | Caminho das imagens de validação relativo a path ou um caminho absoluto. |
test | Caminho opcional das imagens de teste. |
nc | Número de classes — sempre 1 para a estimativa de profundidade. |
names | Mapeamento dos nomes das classes — sempre {0: depth}. |
depth_scale | Unidades PNG opcionais por metro; o valor predefinido é 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.zipUtilização#
Treina 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)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#
- Guarda as 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/val, usando o mesmo nome-base do ficheiro de imagem. Usasave_depth_png()para converter matrizes em metros em PNGs compactos em milímetros. - Garante que os valores de profundidade descodificados estão em metros e que os pixels inválidos ou em falta usam
0ou valores negativos. - Cria 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: 1000Perguntas 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_scaleno 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
≤ 0sã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
.pngou.npydeve partilhar o mesmo nome-base que a imagem correspondente. O carregador determina o caminho da profundidade substituindo o componente de diretórioimagespordepth, 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.