YOLO Vision 2026:

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

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

Dieser Leitfaden erklärt das von den Ultralytics YOLO-Modellen zur Tiefenschätzung verwendete Datensatzformat und führt die integrierten Datensatzkonfigurationen auf, die für Training und Validierung verfügbar sind.

Unterstütztes Datensatzformat#

Format der Tiefenkarte#

Jedes Trainingsbeispiel besteht aus einem RGB-Bild und einer zugehörigen Tiefendatei. PNG-Werte werden durch die optionale Datensatzskalierung auf Ebene depth_scale geteilt, um Meter zu erhalten. Der Standardwert ist 1000, daher entspricht ein Wert von 1500 1.5 Metern. Der Code 0 bedeutet ungültig; PNGs benötigen keine eingebetteten Metadaten.

  • Tiefendateien verwenden .png (bevorzugt) oder .npy. PNG-Karten müssen 2D-Graustufenbilder vom Typ uint16 sein. NPY-Arrays müssen 2D und Gleitkommawerte enthalten, die in Metern angegeben sind.
  • Setze depth_scale nur, wenn PNGs nicht die standardmäßige Millimeterkonvention verwenden. KITTI verwendet beispielsweise 256, während Virtual KITTI 2 100 verwendet.
  • Jede Tiefendatei sollte denselben Stammnamen 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, solange das Seitenverhältnis übereinstimmt; beim Training werden sie im Arbeitsspeicher skaliert.
  • Der Datensatzlader findet Tiefendateien, indem er die Verzeichniskomponente images durch depth ersetzt, .png bevorzugt und auf .npy zurückgreift.
  • Pixel mit der Tiefe ≤ 0 werden als ungültig behandelt und von der Berechnung des Verlusts und der Metriken ausgeschlossen.

Da der Code 0 für ungültige Pixel reserviert ist, stellt ein uint16-PNG 65.535 positive Tiefenwerte bereit. Die Skalierung steuert sowohl die Genauigkeit 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 und keine empfohlenen Obergrenzen für das Training. Ein Datensatz kann unabhängig davon einen kleineren Wert für max_depth zur Kalibrierung des Verlusts oder zur Auswertung festlegen.

Das Standardlayout bewahrt Bilder und Tiefenkarten in parallelen Verzeichnissen auf:

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

Beispielsweise wird ein Bild unter images/train/scene_001.jpg 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 Anzahl von PNG-Einheiten pro Meter; Standardwert ist 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

# Load a pretrained depth model
model = YOLO("yolo26n-depth.pt")

# Train on the NYU Depth V2 dataset
results = model.train(data="nyu-depth.yaml", epochs=100, imgsz=640)

Unterstützte Datensätze#

Die YOLO26-Modelle zur Tiefenschätzung werden auf einer umfangreichen Mischung mehrerer Datensätze (~2,19 Mio. Bilder) vortrainiert, die Innenbereiche (≤10 m) bis hin zu Außenbereichen (~80 m) abdeckt, und anschließend ohne zusätzliches Training über fünf Benchmarks hinweg evaluiert. Jeder Datensatz hat eine eigene Seite:

Fehlerbehebung

  • Depth8 — 8 SUN RGB-D-Bilder in einem 1,3 MB großen, automatisch heruntergeladenen Archiv für schnelle Tests der Verarbeitungspipeline

Quellen für das Vortraining

  • ARKitScenes — reale Innenbereiche, Apple ARKit LiDAR (größte reale Quelle)
  • SUN RGB-D — reale Innenbereiche, RGB-D-Daten aus mehreren Sensoren
  • DIODE — reale Innen- und Außenbereiche, dichte Referenzdaten eines Laserscanners
  • Hypersim — synthetische fotorealistische Innenbereiche
  • TartanAir — synthetisch, vielfältige Umgebungen
  • Virtual KITTI 2 — synthetische Außenbereiche für das Fahren
  • KITTI — reale Außenbereiche für das Fahren, Velodyne LiDAR (auch ein Evaluierungsbenchmark)
  • ImageNet (pseudo-gelabelt) — durch Pseudolabels gekennzeichneter Destillationsdatensatz, größte Einzelquelle

Evaluierungsbenchmarks

  • NYU Depth V2 — primärer Benchmark für Innenbereiche
  • KITTI Eigen — Benchmark für das Fahren im Außenbereich
  • ETH3D — Innen- und Außenbereiche mit hoher Präzision
  • Make3D — Außenbereiche, außerhalb der Trainingsverteilung
  • iBims-1 — hochwertige Innenbereiche (Kanten und ebene Oberflächen)

Die Genauigkeit der einzelnen Modelle auf diesen Benchmarks und die herunterladbaren vortrainierten Gewichte sind auf der Aufgabenseite zur Tiefenschätzung aufgeführt. Eine Datensatz-YAML-Datei, deren Feld train mehrere Bildverzeichnisse auflistet, kombiniert diese Quellen für das Training mit großen gemischten Datensätzen.

Eigenen Datensatz hinzufügen#

  1. Speichere RGB-Bilder in Teilmengenverzeichnissen wie 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 und verwende dabei denselben Stammnamen wie für das Bild. Verwende save_depth_png(), um Meter-Arrays in kompakte Millimeter-PNGs umzuwandeln.
  3. Stelle sicher, dass die dekodierten Tiefenwerte in Metern angegeben sind und ungültige oder fehlende Pixel 0 oder negative Werte verwenden.
  4. Erstelle eine Dataset-YAML 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

FAQ#

  • Verwende skalierte 16-Bit-Graustufen-PNGs für kompakte Datensätze. Standardmäßig entspricht jeder Ganzzahlschritt einem Millimeter; lege depth_scale in der Datensatz-YAML-Datei für eine andere Skalierung fest. ultralytics.data.utils.save_depth_png() wandelt Meter-Arrays in das Standardformat um. Gleitkomma-NPY-Karten in Metern funktionieren ebenfalls direkt.

  • Pixel mit den Tiefenwerten ≤ 0 werden als ungültig behandelt und sowohl bei der Verlustberechnung als auch bei der Auswertung der Metriken maskiert. Dies umfasst Sensorrauschen, Himmelsbereiche und reflektierende Oberflächen, bei denen die Tiefe nicht zuverlässig gemessen werden kann.

  • Die Validierung der Tiefenschätzung gibt den standardmäßigen Metriksatz von Depth Anything aus:

    • delta1 / delta2 / delta3 — prozentualer Anteil der Pixel innerhalb der Schwellenwerte 1,25×, 1,25²× und 1,25³×. Höhere Werte sind besser.
    • abs_rel – mittlerer absoluter relativer Fehler. Niedrigere Werte sind besser.
    • rmse – Wurzel des mittleren quadratischen Fehlers in Metern. Niedrigere Werte sind besser.
    • silog – skaleninvarianter logarithmischer Fehler. Niedrigere Werte sind besser.
  • Ja. Jede Tiefendatei .png oder .npy muss denselben Stammnamen wie das entsprechende Bild haben. Der Lader leitet den Tiefenpfad ab, indem er die Verzeichniskomponente images durch depth ersetzt, PNG bevorzugt und auf NPY zurückgreift. Bilder, deren Tiefendatei fehlt oder nicht lesbar ist, werden während des Scans des zwischengespeicherten Datensatzes mit einer Warnung entfernt.

Kommentare