Ultralytics YOLO27:
Get Started

Übersicht über Datensätze zur Tiefenschätzung#

Bei der monokularen Tiefenschätzung wird jedem Pixel eines Bildes ein Tiefenwert in Metern zugewiesen. Tiefenzielwerte werden entweder als skalierte 16-Bit-Graustufen-PNGs oder als NPY-Arrays mit Gleitkommazahlen in Metern gespeichert.

Dieser Leitfaden erläutert das Datensatzformat für Ultralytics-YOLO-Modelle zur Tiefenschätzung und führt die integrierten Datensatzkonfigurationen für Training und Validierung auf.

Unterstütztes Datensatzformat#

Format der Tiefenkarten#

Jede Trainingsstichprobe besteht aus einem RGB-Bild und einer zugehörigen Tiefendatei. PNG-Werte werden durch den optionalen Datensatzparameter depth_scale geteilt, um Meterwerte zu erhalten. Standardmäßig ist dieser Parameter auf 1000 gesetzt, sodass der Wert 1500 1.5 Metern entspricht. Der Code 0 kennzeichnet ungültige Werte. PNGs benötigen keine eingebetteten Metadaten.

  • Tiefendateien verwenden .png (bevorzugt) oder .npy. PNG-Tiefenkarten müssen zweidimensionale uint16-Graustufenbilder sein. NPY-Arrays müssen zweidimensional sein und Gleitkommawerte in Metern enthalten.
  • Setze depth_scale nur, wenn die PNGs nicht die standardmäßige Konvention in Millimetern verwenden. KITTI verwendet beispielsweise 256, Virtual KITTI 2 hingegen 100.
  • Jede Tiefendatei sollte denselben Dateinamenstamm wie die zugehörige Bilddatei haben (z. B. gehört scene_001.png zu scene_001.jpg).
  • Tiefenkarten dürfen kleiner als ihre RGB-Bilder sein, sofern das Seitenverhältnis übereinstimmt. Beim Training werden sie im Arbeitsspeicher skaliert.
  • Der Datensatzlader sucht nach Tiefendateien, indem er den Verzeichnispfad images durch depth ersetzt. Dabei wird .png bevorzugt und andernfalls .npy verwendet.
  • Pixel mit dem Tiefenwert ≤ 0 gelten als ungültig und werden von der Berechnung des Verlusts und der Metriken ausgeschlossen.

Da der Code 0 für ungültige Pixel reserviert ist, bietet eine uint16-PNG 65,535 positive Tiefenwerte. Die Skalierung bestimmt sowohl die Präzision als auch den Wertebereich:

Konventiondepth_scaleAuflösungMaximale Tiefe
Standard / ARKitScenes10001 mm65.535 m
KITTI2563.90625 mm255.99609375 m
Virtual KITTI 21001 cm655.35 m

Dies sind Speichergrenzen, keine empfohlenen Obergrenzen für das Training. Für die Verlustkalibrierung oder Auswertung kann ein Datensatz unabhängig davon einen kleineren Wert für max_depth festlegen.

Bei der Standardverzeichnisstruktur liegen Bilder und Tiefenkarten in parallelen Ordnern:

dataset/
├── images/
│   ├── train/
│   └── val/
└── depth/
    ├── train/
    └── val/

Ein Bild unter images/train/scene_001.jpg wird beispielsweise mit einer Tiefenkarte unter depth/train/scene_001.png verknüpft.

YAML-Format für Datensätze#

Datensätze zur Tiefenschätzung werden mit YAML-Dateien konfiguriert. Die wichtigsten Felder sind:

SchlüsselBeschreibung
pathStammverzeichnis des Datensatzes.
trainPfad zu den Trainingsbildern relativ zu path oder ein absoluter Pfad.
valPfad zu den Validierungsbildern relativ zu path oder ein absoluter Pfad.
testOptionaler Pfad zu den Testbildern.
ncAnzahl der Klassen – bei der Tiefenschätzung immer 1.
namesZuordnung der Klassennamen – immer {0: depth}.
depth_scaleOptionale PNG-Einheiten pro Meter; standardmäßig 1000.
ultralytics/cfg/datasets/nyu-depth.yaml
# 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.zip

Verwendung#

Trainiere ein YOLO26-Modell zur Tiefenschätzung mit Python oder der CLI:

Beispiel
from ultralytics import YOLO

# Vortrainiertes Tiefenmodell laden
model = YOLO("yolo26n-depth.pt")

# Mit dem Datensatz NYU Depth V2 trainieren
results = model.train(data="nyu-depth.yaml", epochs=100, imgsz=640)

Unterstützte Datensätze#

Die YOLO26-Tiefenmodelle werden mit einer breit gefächerten Mischung aus mehreren Datensätzen vortrainiert (~2.19M Bilder), die Innenbereiche (≤10 m) bis hin zu Außenbereichen (~80 m) abdeckt. Anschließend werden sie anhand von fünf Benchmarks ausgewertet, bei allen außer KITTI Eigen im Zero-Shot-Verfahren. Für jeden Datensatz gibt es eine eigene Seite. Einige Datensätze sind auf der Ultralytics Platform zum Durchsuchen und für das Cloud-Training verfügbar.

Fehlersuche

  • Depth8 — 8 SUN-RGB-D-Bilder in einem 1.3 MB großen Archiv mit automatischem Download, zum schnellen Testen der Verarbeitungskette

Quellen für das Vortraining

  • ARKitScenes — reale Innenräume, Apple-ARKit-LiDAR (größte Quelle mit realen Daten)
  • SUN RGB-D — reale Innenräume, RGB-D-Daten von mehreren Sensoren
  • DIODE — reale Innen- und Außenbereiche, dichte Referenzdaten von Laserscannern
  • Hypersim — fotorealistische synthetische Innenräume
  • TartanAir — synthetische Daten aus vielfältigen Umgebungen
  • Virtual KITTI 2 — synthetische Daten für das Fahren im Außenbereich
  • KITTI — reale Fahrdaten aus Außenbereichen, Velodyne-LiDAR (auch ein Benchmark für die Auswertung)
  • ImageNet (mit Pseudolabels) — Destillationsdatensatz mit Pseudolabels, die größte einzelne Quelle

Benchmarks für die Auswertung

  • NYU Depth V2 — primärer Benchmark für Innenräume
  • KITTI Eigen — Benchmark für das Fahren im Außenbereich
  • ETH3D — hohe Präzision in Innen- und Außenbereichen
  • Make3D — Außenbereiche, Verteilung außerhalb der Trainingsdaten
  • iBims-1 — hochwertige Daten aus Innenräumen (Kanten und ebene Flächen)

Die Genauigkeit der einzelnen Modelle auf diesen Benchmarks und die herunterladbaren vortrainierten Gewichte sind auf der Seite zur Aufgabe Tiefenschätzung aufgeführt. Eine YAML-Datei für einen Datensatz, deren Feld train mehrere Bildverzeichnisse aufführt, kombiniert diese Quellen für ein groß angelegtes Training mit gemischten Daten.

Eigenen Datensatz hinzufügen#

  1. Speichere RGB-Bilder in Unterordnern für die einzelnen Datensatzaufteilungen, zum Beispiel images/train und images/val.
  2. Speichere für jedes Bild eine Tiefen-PNG- oder NPY-Datei in den entsprechenden Ordnern depth/train und depth/val. Verwende dabei denselben Dateinamenstamm wie für das Bild. Mit save_depth_png() kannst du Meter-Arrays in kompakte Millimeter-PNGs umwandeln.
  3. Stelle sicher, dass die dekodierten Tiefenwerte in Metern angegeben sind und ungültige oder fehlende Pixel den Wert 0 oder negative Werte haben.
  4. Erstelle eine YAML-Datei für den Datensatz mit path, train, val, nc: 1 und names: {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: 1000

Häufig gestellte Fragen#

  • Verwende für kompakte Datensätze skalierte 16-Bit-Graustufen-PNGs. Standardmäßig entspricht jeder ganzzahlige Schritt einem Millimeter. Lege in der YAML-Datei des Datensatzes depth_scale fest, wenn du eine andere Skalierung verwenden möchtest. Mit ultralytics.data.utils.save_depth_png() wandelst du Meter-Arrays in das Standardformat um. Tiefenkarten im NPY-Format mit Gleitkommawerten in Metern funktionieren ebenfalls direkt.

  • Pixel mit dem Tiefenwert ≤ 0 gelten als ungültig und werden sowohl bei der Verlustberechnung als auch bei der Auswertung der Metriken maskiert. Dies betrifft Bildrauschen von Sensoren, Himmelsbereiche und reflektierende Oberflächen, bei denen sich die Tiefe nicht zuverlässig messen lässt.

  • Bei der Validierung der Tiefenschätzung wird der standardmäßige Metriksatz von Depth Anything ausgegeben:

    • delta1 / delta2 / delta3 — Anteil der Pixel innerhalb der Schwellenwerte 1.25×, 1.25²× und 1.25³×. Höhere Werte sind besser.
    • abs_rel — mittlerer absoluter relativer Fehler. Niedriger ist besser.
    • rmse — Wurzel des mittleren quadratischen Fehlers in Metern. Niedriger ist besser.
    • silog — skaleninvarianter logarithmischer Fehler. Niedriger ist besser.
  • Ja. Jede Tiefendatei .png oder .npy muss denselben Dateinamenstamm wie das zugehörige Bild haben. Der Lader leitet den Tiefenpfad ab, indem er den Verzeichnispfad images durch depth ersetzt. Dabei wird PNG bevorzugt und andernfalls NPY verwendet. Bilder, deren Tiefendatei fehlt oder nicht lesbar ist, werden beim Zwischenspeichern des Datensatzes nach einer Warnung aussortiert.

Kommentare