Link to this sectionConjunto de Dados de Profundidade DIODE#
DIODE (Dense Indoor/Outdoor DEpth) é um conjunto de dados do mundo real com ground truth de profundidade densa de altíssima qualidade, capturado por um scanner a laser de nível de levantamento FARO Focus. Exclusivamente, cobre cenas internas e externas com o mesmo sensor, tornando-o uma ponte de alta precisão entre a profundidade interna de curto alcance e a externa de longo alcance para estimativa de profundidade monocular.
Link to this sectionPrincipais recursos#
- Ground truth de profundidade densa de altíssima qualidade de um scanner a laser de nível de levantamento FARO Focus.
- Cobre cenas internas e externas capturadas com o mesmo sensor.
- O alcance de profundidade abrange desde curtas distâncias internas até longas distâncias externas, até aproximadamente 80 m na mistura Ultralytics.
- Ground truth denso e preciso por pixel, alinhado aos quadros RGB.
- Fornece ground truth denso de alta precisão que conecta domínios internos e externos.
Link to this sectionEstrutura do Dataset#
O conjunto de dados de profundidade DIODE é dividido em dois subconjuntos:
- Treino: 25.458 imagens com mapas de profundidade pareados para treinamento.
- Val: 771 imagens com mapas de profundidade pareados para validação durante o treinamento do modelo.
Cada amostra consiste em uma imagem RGB e um mapa de profundidade .npy float32 pareado que armazena distâncias por pixel em metros, seguindo o formato de conjunto de dados de profundidade Ultralytics.
Link to this sectionPapel no YOLO26-Depth#
DIODE é uma fonte de treinamento na mistura de pré-treinamento de múltiplos conjuntos de dados Ultralytics YOLO26-Depth de aproximadamente 2,19M pares de imagem-profundidade. Ele contribui com ground truth denso de alta precisão que conecta domínios internos e externos dentro de um único sensor, ajudando o modelo a generalizar entre cenas de curto e longo alcance. Os modelos resultantes são avaliados nos benchmarks padrão NYU, KITTI, Make3D, ETH3D e iBims-1.
Link to this sectionYAML do Dataset#
Um arquivo YAML (Yet Another Markup Language) é usado para definir a configuração do conjunto de dados. Ele contém informações sobre os caminhos do conjunto de dados, classes e outras informações relevantes.
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# DIODE dataset for monocular depth estimation — real indoor + outdoor, FARO Focus survey-grade laser, depth up to ~80 m
# Documentation: https://docs.ultralytics.com/datasets/depth/diode
# Example usage: yolo depth train data=depth-diode.yaml model=yolo26n-depth.pt
# parent
# ├── ultralytics
# └── datasets
# └── depth-diode ← downloads here (84 GB archives, ~90 GB converted)
# ├── images/{train,val} # RGB images
# └── depth/{train,val} # paired *.npy, float32 meters (images/ -> depth/)
# If an interrupted download leaves a partial dataset, delete the depth-diode dir and re-run to rebuild it.
path: depth-diode # dataset root dir (relative to Ultralytics settings 'datasets_dir')
train: images/train # train images (relative to 'path') 25458 images
val: images/val # val images (relative to 'path') 771 images
max_depth: 80 # (m) maximum valid depth; GT beyond this is excluded from val metrics
nc: 1
names:
0: depth
channels: 3
# Download script/URL (optional)
download: |
import shutil
from pathlib import Path
import numpy as np
from ultralytics.utils import TQDM
from ultralytics.utils.downloads import download
# Download and extract the official archives (train ~81 GB, val ~2.6 GB), then convert:
# flatten <split>/<scene>/<scan>/*.png into images/<split>/ and save the paired *_depth.npy
# (masked invalid -> 0, clipped at 80 m) as depth/<split>/*.npy
dir = Path(yaml["path"]) # dataset root dir
download([f"https://diode-dataset.s3.amazonaws.com/{s}.tar.gz" for s in ("train", "val")], dir=dir / "source", delete=True)
for split in ("train", "val"):
(dir / "images" / split).mkdir(parents=True, exist_ok=True)
(dir / "depth" / split).mkdir(parents=True, exist_ok=True)
for im in TQDM(sorted((dir / "source" / split).rglob("*.png")), desc=f"Converting {split}"):
name = "_".join(im.relative_to(dir / "source").parts) # train/indoors/scene/scan/x.png -> train_indoors_scene_scan_x.png
depth = np.load(im.with_name(f"{im.stem}_depth.npy")).squeeze().astype(np.float32)
depth[np.load(im.with_name(f"{im.stem}_depth_mask.npy")) == 0] = 0.0 # zero out invalid pixels
np.save(dir / "depth" / split / f"{name[:-4]}.npy", depth.clip(max=80))
im.replace(dir / "images" / split / name)
shutil.rmtree(dir / "source")Link to this sectionUso#
Para treinar um modelo YOLO26n-depth no conjunto de dados DIODE com um tamanho de imagem de 640, você pode usar os seguintes trechos de código. Para uma lista abrangente de argumentos disponíveis, consulte a página de Treinamento do modelo.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-depth.pt") # load a pretrained depth model (recommended for training)
# Train the model
results = model.train(data="depth-diode.yaml", epochs=100, imgsz=640)Link to this sectionModelos pré-treinados#
A família de profundidade YOLO26 é treinada na ampla mistura de pré-treinamento de profundidade de múltiplos conjuntos de dados da qual o DIODE faz parte. Esses modelos baixam automaticamente da versão mais recente do Ultralytics, por exemplo, o YOLO26x-depth da v8.4.0, e abrangem uma variedade de tamanhos para diferentes requisitos de precisão e recursos.
Link to this sectionCitações e Agradecimentos#
Se você usar o conjunto de dados DIODE em seu trabalho de pesquisa ou desenvolvimento, cite o seguinte artigo:
@article{vasiljevic2019diode,
title={DIODE: A Dense Indoor and Outdoor DEpth Dataset},
author={Vasiljevic, Igor and Kolkin, Nick and Zhang, Shanyi and Luo, Ruotian and Wang, Haochen and Dai, Falcon Z. and Daniele, Andrea F. and Mostajabi, Mohammadreza and Basart, Steven and Walter, Matthew R. and Shakhnarovich, Gregory},
journal={arXiv preprint arXiv:1908.00463},
year={2019}
}Gostaríamos de agradecer aos autores por criar e manter este recurso valioso para a comunidade de visão computacional.