YOLO Vision 2026:

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

Die monokulare Tiefenschätzung weist jedem Pixel in einem Bild einen Tiefenwert in Metern zu. Tiefenziele verwenden entweder skalierte 16-Bit-Graustufen-PNGs oder Gleitkomma-NPY-Arrays in Metern.

Dieser Leitfaden erläutert das von Ultralytics YOLO Tiefenschätzungsmodellen verwendete Datensatzformat und listet die integrierten Datensatzkonfigurationen auf, die für Training und Validierung verfügbar sind.

Unterstütztes Datensatzformat#

Tiefenkartenformat#

Jedes Trainingsbeispiel besteht aus einem RGB-Bild und einer zugehörigen Tiefendatei. PNG-Werte werden durch den optionalen depth_scale der Datensatzebene geteilt, um Meter zu erzeugen. Der Standardwert ist 1000, sodass ein Wert von 1500 1.5 Metern entspricht. Der Code 0 bedeutet ungültig; PNGs benötigen keine eingebetteten Metadaten.

  • Tiefendateien verwenden .png (bevorzugt) oder .npy. PNG-Karten müssen zweidimensionale uint16-Graustufenbilder sein. NPY-Arrays müssen zweidimensional und Gleitkommawerte sein, mit Werten in Metern.
  • Setze depth_scale nur dann, wenn PNGs nicht die Standard-Millimeterkonvention verwenden. Zum Beispiel verwendet KITTI 256 und Virtual KITTI 2 verwendet 100.
  • Jede Tiefendatei sollte denselben Dateinamenstamm wie ihre zugehörige Bilddatei haben (z. B. paart sich scene_001.png mit scene_001.jpg).
  • Tiefenkarten können kleiner als ihre RGB-Bilder sein, solange das Seitenverhältnis übereinstimmt; das Training skaliert sie im Speicher.
  • Der Datensatzlader findet Tiefendateien, indem er die images-Verzeichniskomponente durch depth ersetzt, wobei .png bevorzugt und auf .npy zurückgegriffen wird.
  • Pixel mit der Tiefe ≤ 0 werden als ungültig behandelt und von der Verlust- und Metrikberechnung ausgeschlossen.

Da der Code 0 für ungültige Pixel reserviert ist, bietet ein uint16-PNG 65.535 positive Tiefenwerte. Die Skala steuert sowohl die Präzision als auch den Bereich:

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 Trainingslimits. Ein Datensatz kann einen kleineren max_depth unabhängig für die Verlustkalibrierung oder Evaluierung festlegen.

Das Standardlayout bewahrt Bilder und Tiefenkarten in parallelen Ordnern 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 gepaart.

Datensatz-YAML-Format#

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

SchlüsselBeschreibung
pathStammverzeichnis des Datensatzes.
trainPfad des Trainingsbildes relativ zu path oder ein absoluter Pfad.
valPfad des Validierungsbildes relativ zu path oder ein absoluter Pfad.
testOptionaler Pfad zu Testbildern.
ncAnzahl der Klassen — für die Tiefenschätzung immer 1.
namesKlassennamen-Zuordnung — immer {0: depth}.
depth_scaleOptionale PNG-Einheiten pro Meter; Standard 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 Tiefenschätzungsmodell mit Python oder 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 Tiefenmodelle sind auf einem breiten Mix aus mehreren Datensätzen (~2,19 Mio. Bilder) vortrainiert, die von Innenräumen (≤10 m) bis zu Außenbereichen (~80 m) reichen, und wurden dann Zero-Shot auf fünf Benchmarks evaluiert. Jeder Datensatz hat eine eigene Seite:

Debugging

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

Vortrainingsquellen

  • ARKitScenes — reale Innenaufnahmen, Apple ARKit LiDAR (größte reale Quelle)
  • SUN RGB-D — reale Innenaufnahmen, Multi-Sensor-RGB-D
  • DIODE — reale Innen- und Außenaufnahmen, Ground Truth durch dichten Laserscanner
  • Hypersim — synthetische, fotorealistische Innenaufnahmen
  • TartanAir — synthetisch, diverse Umgebungen
  • Virtual KITTI 2 — synthetisches Fahren im Freien
  • KITTI — reales Fahren im Freien, Velodyne LiDAR (auch ein Evaluierungs-Benchmark)
  • ImageNet (pseudo-labeled) — pseudo-label-Distillationsset, die größte einzelne Quelle

Evaluations-Benchmarks

  • NYU Depth V2 — wichtigster Indoor-Benchmark
  • KITTI Eigen — Outdoor-Fahr-Benchmark
  • ETH3D — hochpräzise Innen- und Außenbereiche
  • Make3D — Outdoor, Out-of-Distribution
  • iBims-1 — hochwertiger Indoor-Bereich (Kanten und ebene Flächen)

Modellspezifische Genauigkeiten auf diesen Benchmarks sowie die herunterladbaren vortrainierten Gewichte sind auf der Depth Estimation task page aufgeführt. Eine Dataset-YAML, deren train-Feld mehrere Bildverzeichnisse auflistet, kombiniert diese Quellen für ein großflächiges, gemischtes Training.

Hinzufügen deines eigenen Datensatzes#

  1. Speichere RGB-Bilder in Unterteilungsordnern wie images/train und images/val.
  2. Speichere ein Tiefen-PNG oder NPY pro Bild unter den passenden depth/train- und depth/val-Ordnern unter Verwendung desselben Dateinamensstamms wie das Bild. Verwende save_depth_png(), um Meter-Arrays in kompakte Millimeter-PNGs zu konvertieren.
  3. Stelle sicher, dass die dekodierten Tiefenwerte in Metern vorliegen und dass ungültige oder fehlende Pixel 0 oder negative Werte verwenden.
  4. Erstelle ein 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 ganzzahlige Schritt einem Millimeter; setze depth_scale im Datensatz-YAML für eine andere Skala. ultralytics.data.utils.save_depth_png() konvertiert Meter-Arrays in das Standardformat. Gleitkomma-NPY-Karten in Metern funktionieren ebenfalls direkt.

  • Pixel mit Tiefenwerten ≤ 0 werden als ungültig behandelt und sowohl bei der Verlustberechnung als auch bei der Metrikauswertung maskiert. Dies deckt Sensormuscheln bzw. -rauschen, Himmelsregionen und reflektierende Oberflächen ab, bei denen die Tiefe nicht zuverlässig gemessen werden kann.

  • Die Validierung der Tiefenschätzung berichtet das Standard-Metrik-Set von Depth Anything:

    • delta1 / delta2 / delta3 – Prozentsatz der Pixel innerhalb der Schwellenwerte 1,25×, 1,25²×, 1,25³×. Höher ist besser.
    • abs_rel — mittlerer absoluter relativer Fehler. Niedriger ist besser.
    • rmse — Wurzel aus dem mittleren quadratischen Fehler in Metern. Niedriger ist besser.
    • silog — skaleninvarianter logarithmischer Fehler. Niedriger ist besser.
  • Ja. Jede Tiefendatei .png oder .npy muss denselben Stamm wie das entsprechende Bild haben. Der Lader leitet den Tiefenpfad ab, indem er die images-Verzeichniskomponente durch depth ersetzt, wobei PNG bevorzugt und auf NPY zurückgegriffen wird. Bilder, deren Tiefendatei fehlt oder nicht lesbar ist, werden während des Scans des zwischengespeicherten Datensatzes unter Ausgabe einer Warnung verworfen.

Kommentare