Ü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_scalenur dann, wenn PNGs nicht die Standard-Millimeterkonvention verwenden. Zum Beispiel verwendet KITTI256und Virtual KITTI 2 verwendet100. - Jede Tiefendatei sollte denselben Dateinamenstamm wie ihre zugehörige Bilddatei haben (z. B. paart sich
scene_001.pngmitscene_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 durchdepthersetzt, wobei.pngbevorzugt und auf.npyzurückgegriffen wird. - Pixel mit der Tiefe
≤ 0werden 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:
| Konvention | depth_scale | Auflösung | Maximale Tiefe |
|---|---|---|---|
| Standard / ARKitScenes | 1000 | 1 mm | 65.535 m |
| KITTI | 256 | 3.90625 mm | 255.99609375 m |
| Virtual KITTI 2 | 100 | 1 cm | 655.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ü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}. |
depth_scale | Optionale PNG-Einheiten pro Meter; Standard ist 1000. |
# 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.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 ein Tiefen-PNG oder NPY pro Bild unter den passenden
depth/train- unddepth/val-Ordnern unter Verwendung desselben Dateinamensstamms wie das Bild. Verwendesave_depth_png(), um Meter-Arrays in kompakte Millimeter-PNGs zu konvertieren. - Stelle sicher, dass die dekodierten Tiefenwerte in Metern vorliegen und dass ungültige oder fehlende Pixel
0oder negative Werte verwenden. - 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: depth
# Optional: PNG integer units per meter (default 1000)
depth_scale: 1000FAQ#
Verwende skalierte 16-Bit-Graustufen-PNGs für kompakte Datensätze. Standardmäßig entspricht jeder ganzzahlige Schritt einem Millimeter; setze
depth_scaleim 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
≤ 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 Tiefendatei
.pngoder.npymuss denselben Stamm wie das entsprechende Bild haben. Der Lader leitet den Tiefenpfad ab, indem er dieimages-Verzeichniskomponente durchdepthersetzt, 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.