Ultralytics YOLO27:

DIODE-Tiefendatensatz#

DIODE (dichte Tiefendaten für Innen- und Außenbereiche) ist ein praxisnaher Datensatz mit hochpräzisen, dichten Tiefengrundwahrheiten, die mit einem Laserscanner FARO Focus in Vermessungsqualität erfasst wurden. Einzigartig ist, dass er sowohl Innen- als auch Außenszenen mit demselben Sensor abdeckt und dadurch eine hochpräzise Verbindung zwischen der Tiefenschätzung im Nahbereich in Innenräumen und im Fernbereich im Außenbereich für die monokulare Tiefenschätzung bildet.

Wichtige Funktionen#

  • Hochpräzise dichte Tiefengrundwahrheiten von einem Laserscanner FARO Focus in Vermessungsqualität.
  • Deckt sowohl Innen- als auch Außenszenen ab, die mit demselben Sensor erfasst wurden.
  • Der Tiefenbereich reicht von kurzen Entfernungen in Innenräumen bis zu großen Entfernungen im Außenbereich und umfasst im Ultralytics-Mix bis zu etwa 80 m.
  • Dichte, präzise Grundwahrheiten für jedes Pixel, ausgerichtet an den RGB-Bildern.
  • Liefert hochpräzise, dichte Grundwahrheiten, die Innen- und Außenbereiche miteinander verbinden.

Datensatzstruktur#

Der DIODE-Tiefendatensatz ist in zwei Teilmengen aufgeteilt:

  1. Train: 25.458 Bilder mit zugehörigen Tiefenkarten zum Training.
  2. Val: 771 Bilder mit zugehörigen Tiefenkarten zur Validierung während des Modelltrainings.

Jedes Beispiel besteht aus einem RGB-Bild und einer zugehörigen uint16-Tiefen-PNG-Datei mit 256 Einheiten pro Meter (depth_scale: 256), entsprechend dem Ultralytics-Format für Tiefendatensätze. Dies ermöglicht eine Auflösung von 3,90625 mm und stellt gleichzeitig den gesamten Außenbereich bis 80 m dar.

Rolle in YOLO26-Depth#

DIODE ist eine Trainingsquelle im Ultralytics-Vortraining mit mehreren Datensätzen für YOLO26-Depth, das etwa 2,19 Millionen Bild-Tiefen-Paare umfasst. Der Datensatz liefert hochpräzise, dichte Grundwahrheiten, die Innen- und Außenbereiche mit einem einzigen Sensor verbinden, und unterstützt das Modell dabei, sowohl auf Szenen im Nahbereich als auch im Fernbereich zu generalisieren. Die resultierenden Modelle werden anhand der Standard-Benchmarks NYU, KITTI, Make3D, ETH3D und iBims-1 evaluiert.

Dataset-YAML#

Eine YAML-Datei wird verwendet, um die Dataset-Konfiguration zu definieren. Sie enthält Informationen über die Pfade des Datasets, die Klassen und andere relevante Informationen.

ultralytics/cfg/datasets/depth-diode.yaml
# 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 16-bit *.png depth maps (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
depth_scale: 256 # PNG value 256 = 1 meter; represents the 80 m outdoor range

# Download script/URL (optional)
download: |
  import shutil
  from pathlib import Path

  import numpy as np

  from ultralytics.data.utils import save_depth_png
  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>/*.png
  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
          save_depth_png(dir / "depth" / split / f"{name[:-4]}.png", depth.clip(max=80), scale=256)
          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 vollständige Liste der verfügbaren Argumente findest du auf der Seite Training des Modells.

Trainingsbeispiel
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 dem umfangreichen Vortrainingsmix für Tiefenmodelle mit mehreren Datensätzen trainiert, zu dem auch DIODE gehört. Diese Modelle werden automatisch aus der neuesten Ultralytics-Version heruntergeladen, beispielsweise YOLO26x-depth aus v8.4.0, und decken verschiedene Größen für unterschiedliche Anforderungen an Genauigkeit und Ressourcen ab.

Zitate und Danksagungen#

Wenn du den DIODE-Datensatz in deiner Forschung oder Entwicklungsarbeit verwendest, zitiere bitte die folgende Veröffentlichung:

Zitat
@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.

FAQ#

  • DIODE erfasst sowohl Innen- als auch Außenszenen mit demselben Laserscanner der Vermessungsklasse FARO Focus und liefert so sehr dichte und präzise Tiefen-Ground-Truth über kurze Innen- und große Außenbereiche hinweg. Diese Erfassung mit nur einem Sensor bildet eine hochpräzise Brücke zwischen Innen- und Außenbereich im Trainings-Mix von YOLO26-Depth.

  • Die Ultralytics-Konfiguration stellt 25.458 Trainings- und 771 Validierungs-Bild-Tiefen-Paare zur Verfügung. Die Tiefe wird als uint16-PNGs mit 256 Einheiten pro Meter (depth_scale: 256) gespeichert, wodurch eine Auflösung von 3,9 mm beibehalten wird, während der gesamte im Ultralytics depth dataset format beschriebene Außenbereich von 80 m abgedeckt wird.

  • Lade einen vortrainierten Tiefen-Checkpoint und verweise data auf das mitgelieferte YAML, zum Beispiel yolo depth train data=depth-diode.yaml model=yolo26n-depth.pt epochs=100 imgsz=640. Siehe den Abschnitt Usage für das Python-Äquivalent und die Seite Training für alle Argumente.

Kommentare