DIODE Tiefendatensatz#
DIODE (Dense Indoor/Outdoor DEpth) ist ein realer Datensatz mit sehr hochwertigen, dichten Tiefen-Ground-Truth-Daten, die von einem professionellen FARO Focus Laserscanner erfasst wurden. Das Besondere daran ist, dass er sowohl Innen- als auch Außenszenen mit demselben Sensor abdeckt, was ihn zu einer hochpräzisen Brücke zwischen nahreichender Innentiefe und weitreichender Außentiefe für die monokulare Tiefenschätzung macht.
Hauptfunktionen#
- Sehr hochwertige dichte Tiefen-Ground-Truth-Daten von einem FARO Focus Laserscanner in Vermessungsqualität.
- Deckt sowohl Innen- als auch Außenaufnahmen ab, die mit demselben Sensor erfasst wurden.
- Der Tiefenbereich erstreckt sich von kurzen Innenraumdistanzen bis zu langen Außenraumdistanzen von bis zu etwa 80 m im Ultralytics Mix.
- Dichte, präzise Pixel-Ground-Truth, die an den RGB-Frames ausgerichtet ist.
- Bietet hochpräzise, dichte Ground-Truth-Daten, die Innen- und Außenbereiche miteinander verbinden.
Datensatzstruktur#
Der DIODE Tiefendatensatz ist in zwei Teilmengen unterteilt:
- Train: 25.458 Bilder mit zugehörigen Tiefenkarten für das Training.
- Val: 771 Bilder mit zugehörigen Tiefenkarten zur Validierung während des Modelltrainings.
Jedes Sample besteht aus einem RGB-Bild und einer gekoppelten .npy float32-Tiefenkarte, die die Abstände pro Pixel in Metern speichert, gemäß dem Ultralytics depth dataset format.
Rolle bei YOLO26-Depth#
DIODE ist eine Trainingsquelle im Ultralytics YOLO26-Depth Multi-Datensatz-Pretraining-Mix aus etwa 2,19 Millionen Bild-Tiefen-Paaren. Er liefert hochpräzise, dichte Ground-Truth-Daten, die Innen- und Außenbereiche mit einem einzigen Sensor verbinden und dem Modell helfen, sowohl bei Nahbereichs- als auch bei Fernbereichsszenen zu generalisieren. Die resultierenden Modelle werden auf den Standard-Benchmarks NYU, KITTI, Make3D, ETH3D und iBims-1 evaluiert.
Datensatz-YAML#
Eine YAML-Datei (Yet Another Markup Language) wird verwendet, um die Datensatzkonfiguration zu definieren. Sie enthält Informationen über die Pfade des Datensatzes, Klassen und andere relevante Informationen.
# 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")Verwendung#
Um ein YOLO26n-depth-Modell auf dem DIODE-Datensatz mit einer Bildgröße von 640 zu trainieren, kannst du die folgenden Codeausschnitte verwenden. Eine umfassende Liste der verfügbaren Argumente findest du auf der Modellseite Training.
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)Vortrainierte Modelle#
Die YOLO26 depth-Familie wird auf der breiten Multi-Dataset-Tiefen-Pretraining-Mischung trainiert, zu der auch DIODE gehört. Diese Modelle werden automatisch aus dem neuesten Ultralytics-Release heruntergeladen – zum Beispiel YOLO26x-depth ab v8.4.0 – und decken eine Reihe von Größen für unterschiedliche Genauigkeits- und Ressourcenanforderungen ab.
Zitate und Danksagungen#
Wenn du den DIODE Datensatz in deiner Forschungs- oder Entwicklungsarbeit verwendest, zitiere bitte das folgende Paper:
@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}
}Wir möchten den Autoren für die Erstellung und Pflege dieser wertvollen Ressource für die Computer-Vision-Community danken.