Visão geral dos conjuntos de dados para estimativa de profundidade#
A estimativa monocular de profundidade atribui um valor de profundidade, em metros, a cada pixel de uma imagem. Os valores de profundidade utilizam PNGs em escala de cinzentos de 16 bits ou matrizes NPY de vírgula flutuante, em metros.
Este guia explica o formato de conjunto de dados utilizado pelos modelos Ultralytics YOLO de estimativa de profundidade e apresenta as configurações de conjuntos de dados incorporadas 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, definido ao nível do conjunto de dados, para obter metros. O valor predefinido é 1000, pelo que um valor de 1500 representa 1.5 metros. O código 0 indica um valor inválido; os PNGs não precisam de metadados incorporados.
- Os ficheiros de profundidade utilizam
.png(preferencial) ou.npy. Os mapas PNG têm de ser imagens em escala de cinzentos 2D uint16. As matrizes NPY têm de ser 2D e de vírgula flutuante, com valores em metros. - Define
depth_scaleapenas se os PNGs não utilizarem a convenção predefinida de milímetros. Por exemplo, o KITTI utiliza256e o Virtual KITTI 2 utiliza100. - Cada ficheiro de profundidade deve ter o mesmo nome base que o ficheiro de imagem correspondente (por exemplo,
scene_001.pngcorresponde ascene_001.jpg). - Os mapas de profundidade podem ser mais pequenos do que as imagens RGB, desde que mantenham a mesma proporção; 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, dando preferência a.pnge recorrendo a.npycomo alternativa. - Os pixels com profundidade
≤ 0são considerados inválidos e excluídos do cálculo da função de perda e das métricas.
Como o código 0 está reservado para pixels inválidos, um PNG uint16 oferece 65,535 valores de profundidade positivos. A escala controla a precisão e 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 recomendados para o treino. Um conjunto de dados pode definir um max_depth mais baixo, de forma independente, para calibrar a função de perda ou a avaliação.
O layout 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 é associada 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 para as imagens de treino relativo a path ou um caminho absoluto. |
val | Caminho para as imagens de validação relativo a path ou um caminho absoluto. |
test | Caminho opcional para as imagens de teste. |
nc | Número de classes — sempre 1 para 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.zipUso#
Treina um modelo YOLO26 de estimativa de profundidade com Python ou CLI:
from ultralytics import YOLO
# Carrega um modelo de profundidade pré-treinado
model = YOLO("yolo26n-depth.pt")
# Treina com o conjunto de dados NYU Depth V2
results = model.train(data="nyu-depth.yaml", epochs=100, imgsz=640)Conjuntos de dados compatíveis#
Os modelos YOLO26 de profundidade são pré-treinados com uma combinação abrangente de vários conjuntos de dados (~2.19M imagens), que abrange desde ambientes internos (≤10 m) a ambientes externos (~80 m), e depois são avaliados em cinco referências, sem treino específico em todas, exceto KITTI Eigen. Cada conjunto de dados tem uma página dedicada e vários estão alojados na Plataforma Ultralytics para consulta e treino na nuvem.
Depuração
- Depth8 — 8 imagens SUN RGB-D num arquivo de 1.3 MB com transferência automática, para testar rapidamente o pipeline
Fontes de pré-treino
- ARKitScenes — interiores reais, LiDAR do Apple ARKit (maior fonte real)
- SUN RGB-D — interiores reais, RGB-D multissensor
- DIODE — interiores e exteriores reais, dados de referência detalhados de scanner a laser
- Hypersim — interiores sintéticos fotorrealistas
- TartanAir — ambientes sintéticos diversificados
- Virtual KITTI 2 — condução em ambientes externos sintéticos
- KITTI — condução em ambientes externos reais, LiDAR Velodyne (também uma referência de avaliação)
- ImageNet (com rótulos pseudo) — conjunto de destilação com rótulos pseudo, a maior fonte individual
Referências de avaliação
- NYU Depth V2 — principal referência de ambientes internos
- KITTI Eigen — referência de condução em ambientes externos
- ETH3D — alta precisão em ambientes internos e externos
- Make3D — ambientes externos, fora da distribuição
- iBims-1 — ambientes internos de alta qualidade (bordas e superfícies planas)
A precisão de cada modelo nestas referências e os pesos pré-treinados disponíveis para transferência 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 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, utilizando o mesmo nome base do ficheiro de imagem. Utilizasave_depth_png()para converter matrizes em metros em PNGs compactos em milímetros. - Certifica-te de que os valores de profundidade descodificados estão em metros e que os pixels inválidos ou em falta utilizam
0ou valores negativos. - Cria um YAML do 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#
Utiliza PNGs compactos em escala de cinzentos de 16 bits para conjuntos de dados compactos. Por predefinição, cada unidade inteira corresponde a um milímetro; define
depth_scaleno YAML do conjunto de dados para utilizar outra escala.ultralytics.data.utils.save_depth_png()converte matrizes em metros para o formato predefinido. Os mapas NPY de vírgula flutuante em metros também funcionam diretamente.Os pixels com valores de profundidade
≤ 0são considerados inválidos e mascarados, tanto no cálculo da função de perda como na avaliação das métricas. Isto abrange ruído do sensor, regiões do céu e superfícies refletoras, onde não é possível medir a profundidade de forma fiável.A validação da estimativa de profundidade apresenta o conjunto padrão de métricas Depth Anything:
- delta1 / delta2 / delta3 — fração de pixels dentro dos limiares de 1.25×, 1.25²× e 1.25³×. Quanto maior, melhor.
- 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.npytem de partilhar o mesmo nome base que a imagem correspondente. O carregador obtém o caminho da profundidade substituindo o componente de diretórioimagespordepth, dando preferência ao PNG e recorrendo ao NPY como alternativa. As imagens cujos ficheiros de profundidade estão em falta ou não podem ser lidos são descartadas durante a análise em cache do conjunto de dados, com um aviso.