Übersicht über Datensätze zur Tiefenschätzung#
Die monokulare Tiefenschätzung weist jedem Pixel in einem Bild einen Gleitkomma-Tiefenwert in Metern zu. Das Trainingsziel ist eine dichte Pixel-Tiefenkarte, die als .npy float32-Array gespeichert ist. Jeder Wert repräsentiert die Entfernung von der Kamera zum entsprechenden Szenenpunkt.
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#
NPY Tiefenkartenformat#
Jedes Trainingsbeispiel besteht aus einem RGB-Bild und einer zugehörigen .npy Tiefendatei. Die Tiefendatei speichert ein 2D-float32-NumPy-Array mit der Form (H, W), wobei die Werte Tiefen in Metern sind.
- Tiefendateien müssen die Endung
.npyverwenden und ein float32-Array enthalten. - Jede Tiefendatei sollte denselben Dateinamenstamm wie ihre zugehörige Bilddatei haben (z. B. paart sich
scene_001.npymitscene_001.jpg). - Der Datensatz-Loader findet Tiefendateien, indem er die Verzeichniskomponente
imagesim Dateipfad durchdepthersetzt und die Bilddateiendung gegen.npyaustauscht. - Pixel mit der Tiefe
≤ 0werden als ungültig behandelt und von der Verlust- und Metrikberechnung ausgeschlossen.
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.npy gepaart.
Datensatz-YAML-Format#
Datensätze zur Tiefenschätzung werden mit YAML-Dateien konfiguriert. Die wichtigsten Felder sind:
| Schlüssel | Beschreibung |
|---|---|
path | Stammverzeichnis des Datensatzes. |
train | Pfad des Trainingsbildes relativ zu path oder ein absoluter Pfad. |
val | Pfad des Validierungsbildes relativ zu path oder ein absoluter Pfad. |
test | Optionaler Pfad zu Testbildern. |
nc | Anzahl der Klassen — für die Tiefenschätzung immer 1. |
names | Klassennamen-Zuordnung — immer {0: depth}. |
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# NYU Depth V2 dataset for monocular depth estimation
# Documentation: https://cs.nyu.edu/~silberman/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 ← 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 # 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 .npy files (float32, meters) under depth/<split>/, resolved by
# swapping '/images/' -> '/depth/' on each image path.
# Classes
nc: 1
names:
0: depth
channels: 3
# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/nyu-depth.zipVerwendung#
Trainiere ein YOLO26 Tiefenschätzungsmodell mit Python oder CLI:
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#
- Speichere RGB-Bilder in Unterteilungsordnern wie
images/trainundimages/val. - Speichere pro Bild ein
.npyfloat32-Tiefenarray unter den passenden Ordnerndepth/trainunddepth/valab und verwende dabei denselben Dateinamenstamm wie beim Bild. - Stelle sicher, dass Tiefenwerte in Metern vorliegen und dass für ungültige oder fehlende Pixel
0oder negative Werte verwendet werden. - Erstelle ein Dataset-YAML mit
path,train,val,nc: 1undnames: {0: depth}.
path: path/to/my-depth-dataset
train: images/train
val: images/val
nc: 1
names:
0: depthFAQ#
Tiefenkarten müssen als NumPy
.npy-Dateien gespeichert werden, die float32-Arrays der Form(H, W)enthalten. Jedes Element speichert die Tiefe in Metern für das entsprechende Bildpixel. Verwende keine PNG- oder 16-Bit-Integer-Formate – der Loader erwartet rohe Gleitkomma-Arrays.Pixel mit Tiefenwerten
≤ 0werden 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 Tiefen-
.npy-Datei muss denselben Stamm wie das entsprechende Bild haben. Der Loader leitet den Tiefenpfad ab, indem er die Verzeichniskomponenteimagesdurchdepthersetzt und die Bilddateiendung gegen.npyaustauscht. Bilder, deren Tiefendatei fehlt oder nicht lesbar ist, werden während des (zwischengespeicherten) Datensatz-Scans unter Ausgabe einer Warnung verworfen, genau wie korrupte Bilder; wenn überhaupt keine gültigen Bild-Tiefen-Paare gefunden werden, wird ein Fehler ausgelöst.