Ultralytics YOLO27:

Monokulare Tiefenschätzung mit Ultralytics YOLO#

Monocular depth estimation examples

Die monokulare Tiefenschätzung sagt aus einem einzelnen RGB-Bild eine Tiefenkarte für jedes Pixel voraus. Jedes Ausgabepixel enthält einen Tiefenwert in Metern, der die geschätzte Entfernung von der Kamera zu diesem Oberflächenpunkt angibt.

Die Ausgabe eines Tiefenmodells ist eine dichte Float-Karte der Form (H, W), die am Eingabebild ausgerichtet ist. Diese Darstellung für jedes Pixel eignet sich besonders für die 3D-Szenenrekonstruktion, die Navigation von Robotern, die Erstellung von AR/VR-Inhalten und alle Anwendungen, die aus einer einzelnen Kamera die räumliche Struktur benötigen.

Tipp

Verwende task=depth oder die yolo depth-CLI-Aufgabe für die monokulare Tiefenschätzung. YOLO26-Tiefenmodelldateien verwenden das Suffix -depth, beispielsweise yolo26n-depth.pt.



Watch: Monocular Depth Estimation with Ultralytics YOLO26 | Python Tutorial | Vision AI 🚀

Modelle#

Die folgenden YOLO26-Tiefenmodelle wurden auf einer breit gefächerten Mischung mehrerer Datensätze vortrainiert (Innen- und Außenbereiche, ~2,19 Mio. Bilder). Die Metrikspalten beziehen sich auf den Eigen-Testsplit von NYU Depth V2.

Modelle werden bei der ersten Verwendung automatisch aus dem neuesten Ultralytics-Release heruntergeladen.

ModellGröße
(Pixel)
delta1NYUabs_relNYUrmseNYUGeschwindigkeit
CPU ONNX
(ms)
Geschwindigkeit
T4 TensorRT10
(ms)
Parameter
(M)
FLOPs
(B)
YOLO26n-depth7680.8820.1090.414272.0 ± 27.22.7 ± 0.16.346.9
YOLO26s-depth7680.8960.1040.399393.7 ± 13.13.8 ± 0.013.268.0
YOLO26m-depth7680.9210.0890.364621.5 ± 49.76.0 ± 0.123.3130.4
YOLO26l-depth7680.9300.0830.351821.9 ± 50.77.7 ± 0.127.7157.0
YOLO26x-depth7680.9330.0800.3441240.9 ± 73.313.6 ± 0.257.0301.7
  • delta1NYU ist der Prozentsatz der Pixel, bei denen die vorhergesagte Tiefe höchstens um den Faktor 1,25 von der Ground Truth abweicht, auf dem Eigen-Testsplit von NYU Depth V2 (654 Bilder) mit Multi-Scale- und horizontaler Spiegelungs-TTA sowie Log-Least-Squares-Ausrichtung.
  • Die Genauigkeit bei einer einzigen Skalierung ohne TTA lässt sich mit yolo depth val model=yolo26n-depth.pt data=nyu-depth.yaml imgsz=768 device=0 reproduzieren (ersetze model= durch die jeweilige Größe). Dabei wird eine Median-Ausrichtung (nur Skalierung) verwendet, und die Ergebnisse fallen niedriger aus: delta1 0,783 (n), 0,793 (s), 0,840 (m), 0,853 (l), 0,860 (x).
  • abs_rel ist der mittlere absolute relative Fehler zwischen den vorhergesagten Tiefenwerten und der Ground Truth.
  • rmse ist der quadratische Mittelwert des Fehlers in Metern.
  • Geschwindigkeit ist die reine Inferenzlatenz (Vor- und Nachverarbeitung ausgeschlossen) bei imgsz=768, batch=1, angegeben als Mittelwert ± Standardabweichung über Messläufe nach der Aufwärmphase. CPU ONNX bezeichnet ONNX Runtime fp32 auf einem Intel Xeon mit 32 Kernen (Skylake); T4 TensorRT10 bezeichnet TensorRT fp16 auf einer Tesla T4.
  • params und FLOPs werden bei 768×768 gemessen, der Trainingsauflösung der veröffentlichten Gewichte.

Sieh dir die unreleased YOLO27 preview für vorläufige Ergebnisse zu NYU Depth V2 an.

Geschwindigkeit im Vergleich zu Depth Anything V2#

Depth Anything V2 ist eine häufig verwendete offene Baseline für monokulare Tiefe. Sein DINOv2-Vision-Transformer-Backbone und der DPT-Decoder benötigen viele Rechenressourcen. Daher ist das kleinste veröffentlichte Depth Anything V2-Modell auf derselben Tesla T4 mit TensorRT fp16 langsamer als jedes YOLO26-Tiefenmodell – einschließlich YOLO26x-depth, das mehr als doppelt so viele Parameter besitzt.

Bei ~768 px – imgsz=768 für YOLO26, der Auflösung, mit der seine veröffentlichten Gewichte trainiert wurden, und 770 px für Depth Anything V2, dessen DINOv2-Backbone ein Vielfaches seiner Patchgröße von 14 erfordert:

ModellParameter (M)FLOPs (B)T4 TensorRT10 (ms)FPSBeschleunigung gegenüber V2 SmallBeschleunigung gegenüber V2 Base
Depth Anything V2 Base97.51025.555.4018.1
Depth Anything V2 Small24.8346.920.9947.6
YOLO26x-depth57.0301.713.5773.71.5×4.1×
YOLO26l-depth27.7157.07.68130.22.7×7.2×
YOLO26m-depth23.3130.46.00166.73.5×9.2×
YOLO26s-depth13.268.03.82261.65.5×14.5×
YOLO26n-depth6.346.92.73365.87.7×20.3×

Bei ~640 px – imgsz=640 beziehungsweise 644 px – bleibt die Reihenfolge unverändert, und YOLO26n-depth ist 5,9× schneller als Depth Anything V2 Small:

ModellT4 TensorRT10 (ms)FPS
Depth Anything V2 Base35.1028.5
Depth Anything V2 Small13.6273.4
YOLO26x-depth10.2697.5
YOLO26l-depth6.14162.8
YOLO26m-depth4.71212.1
YOLO26s-depth3.08324.4
YOLO26n-depth2.29436.9
  • Die Latenz bezieht sich ausschließlich auf die Inferenz, batch=1, TensorRT fp16 auf einer Tesla T4 – derselbe Messaufbau wie in der obigen Modelltabelle, hier auf zwei Dezimalstellen gerundet; FPS ist der Kehrwert der nicht gerundeten Latenz. Die Spalten Beschleunigung teilen die Latenz von Depth Anything V2 Small (20,99 ms) beziehungsweise Base (55,40 ms) durch die YOLO26-Latenz.
  • Depth Anything V2 Small und Base sind die veröffentlichten ViT-S- und ViT-B-Checkpoints.
  • Der Vergleich betrachtet ausschließlich die Latenz – die beiden Modellfamilien werden hier nicht anhand eines gemeinsamen Genauigkeitsprotokolls bewertet.

Tiefenbereich und der Log-Tiefenkopf#

Der Tiefenkopf sagt exp(logit) voraus – unbegrenzt (~0,02–150 m) – und trennt die Szenenform von der absoluten Skalierung: Das Netzwerk sagt ein relatives Log-Tiefenfeld voraus, und die absoluten Meter werden durch eine separate Transformation mit zwei Parametern (exp(a·log d + b)) festgelegt, die bei der Evaluierung, durch eine einfache Kalibrierung oder durch Feinabstimmung ermittelt wird. Die gängige Alternative, ein begrenzter sigmoid × max_depth-Kopf, verankert stattdessen eine feste Obergrenze in der Architektur, sodass jede Tiefe jenseits von max_depth abgeschnitten wird – dadurch können Szenen mit größerer Reichweite weder trainiert noch vorhergesagt werden.

Warum der Kopf unbegrenzt ist: Evidenz über verschiedene Tiefenbereiche hinweg#

Kontrollierter A/B-Vergleich – dieselben Daten, derselbe Zeitplan, nur der Kopf unterscheidet sich. Beide Köpfe wurden von Grund auf mit einer identischen Mischung aus Innenbereichsdaten (≤10 m) und Außenbereichsdaten (≤80 m) trainiert:

KopfAusgabebereichδ1 der Validierung über gemischte BereicheTrainingsverhalten
sigmoid × max_depth (10 m)begrenzt 0–10 m0.221stagniert ab Epoche 1
log (unbegrenzt)0–~150 m0.367 (+66%)verbessert sich durchgehend

Der begrenzte Kopf kann den Großteil der Außenbereichspixel jenseits von 10 m nicht darstellen und verbessert sich daher fast sofort nicht mehr; der log-Kopf lernt aus dem gesamten Bereich.

Der behobene Fehlerfall – Feinabstimmung auf einem einzelnen Datensatz, nach Bereich aufgeschlüsselt. Die Feinabstimmung eines begrenzten (10 m) Kopfes auf einzelnen Datensätzen funktioniert, wenn die Daten innerhalb der Obergrenze liegen, und bricht zusammen, wenn sie diese überschreiten:

DatensatzTiefenbereichδ1 des begrenzten Kopfes
SUN RGB-D≤10 m0.78 ✅
Hypersimgrößtenteils ≤10 m0.74 ✅
KITTI~80 m0,08 ❌ (abs_rel ≈ 7,0 – die 80/10-Skalierungsabweichung)
vKITTI280 m0.04 ❌

Der Einbruch tritt genau an der Grenze der Obergrenze auf. Der log-Kopf hat keine solche Grenze.

Veröffentlichte Modelle – bereichsübergreifende Leistung. Die ausgelieferte Familie mit log-Kopf wurde über Benchmarks hinweg evaluiert, die von 10 m (NYU, iBims-1) bis 80 m (KITTI) reichen, mit skalenausgerichtetem δ1:

BenchmarkBereichYOLO26x-depth (log)frühere Veröffentlichung mit begrenztem Kopf
NYU Eigen10 m0.9330.934
iBims-110 m0.9610.945
ETH3D~60 m0.9590.931
Make3D~70 m0.3020.296
KITTI Eigen80 m0.9420.891
Mittelwert0.8190.799

Beide Spalten entsprechen den veröffentlichten Angaben. Die übrigen Zeilen werden mit dem auf den jeweiligen Datensatzseiten beschriebenen TTA- und Log-Least-Squares-Protokoll ausgewertet, das der Validator in diesem Repository nicht implementiert. Daher kann die KITTI-Zeile nicht unter denselben Bedingungen erneut gemessen werden; die KITTI-Seite enthält stattdessen Werte, die auf dem kanonischen Eigen-Split mit 652 Bildern gemessen wurden.

Die größten Verbesserungen zeigen sich bei den Außenbereichs-Benchmarks mit größerer Reichweite (KITTI, ETH3D) – genau dort, wo eine feste Obergrenze von 10 m am schädlichsten ist –, während die Leistung im Innenbereich erhalten bleibt.

Trainieren#

Trainiere YOLO26n-depth 100 Epochen lang bei einer Bildgröße von 640 auf dem Datensatz Depth8. Eine vollständige Liste der verfügbaren Argumente findest du auf der Seite Konfiguration.

Beispiel
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-depth.yaml")  # build a new model from YAML
model = YOLO("yolo26n-depth.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolo26n-depth.yaml").load("yolo26n-depth.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="depth8.yaml", epochs=100, imgsz=640)

Ausführliche Informationen zum Modus train findest du auf der Seite Trainieren.

Feinabstimmung mit deinen eigenen Daten#

Wenn du ein vortrainiertes Tiefenmodell an einen benutzerdefinierten Datensatz anpasst, senke die Lernrate und verwende den AdamW-Optimizer. Die Standardeinstellungen des Optimizers sind auf das Training von Grund auf ausgelegt (SGD mit lr0=0.01); bei einem bereits konvergierten Tiefenmodell können sie das vortrainierte Wissen überschreiben und die Ergebnisse verschlechtern – insbesondere bei der Feinabstimmung auf einer einzelnen Domäne.

Empfohlene Vorgehensweise für die Feinabstimmung
from ultralytics import YOLO

model = YOLO("yolo26s-depth.pt")  # start from pretrained weights

model.train(
    data="path/to/your_dataset.yaml",
    epochs=20,
    imgsz=640,
    optimizer="AdamW",
    lr0=1e-4,  # ~100x below the from-scratch default
    warmup_bias_lr=1e-4,  # keep warmup gentle too
)

Zusätzliche Hinweise:

  • Die Augmentierung wird über die Standardargumente gesteuert (degrees, translate, scale, shear, perspective, flipud, fliplr, hsv_h, hsv_s, hsv_v); die geometrische Verzerrung und die Spiegelungen werden identisch auf die zugehörige Tiefenkarte angewendet. Um die exakte Vorgehensweise für die veröffentlichten YOLO26-Depth-Gewichte zu sehen, untersuche train_args, das im Checkpoint gespeichert ist – siehe Trainingsargumente eines YOLO26-Checkpoints untersuchen.
  • mosaic, mixup, cutmix und copy_paste sind für die Tiefe nicht implementiert. Der Tiefendatenlader setzt diese Wahrscheinlichkeiten automatisch auf 0, daher hat ihre Übergabe keinen Effekt. Diese Augmentierungen werden nicht unterstützt, weil sie mehrere Bilder kombinieren und dadurch ungültige zusammengehörige Tiefenkarten erzeugen würden.
  • Jeder Tiefenbereich funktioniert sofort ohne zusätzliche Anpassungen. Die Modelle mit log-Kopf sagen unbegrenzte Tiefen voraus und passen sich daher ohne Änderungen an Daten mit kurzer Reichweite (Makro) oder großer Reichweite (Außenbereich/Fahren) an. Durch das Setzen von max_depth: in deiner Dataset-YAML-Datei (in Metern) legst du fest, welche GT-Pixel bei den Validierungsmetriken berücksichtigt werden.
  • Allgemeine Leistung erhalten. Wenn das Modell auch bei Szenen außerhalb deines Trainingsdatensatzes genau bleiben soll, mische einen kleinen Anteil (~5–10 %) vielfältiger, universell einsetzbarer Bilder in deine Trainingsdaten; dadurch wird das Vergessen während der Feinabstimmung deutlich reduziert.
  • Nur von Grund auf trainieren (model=yolo26s-depth.yaml), wenn sich deine Domäne stark unterscheidet und du über einen großen Datensatz verfügst – in diesem Fall ist das standardmäßige SGD lr0=0.01 geeignet, da keine vortrainierten Gewichte erhalten werden müssen.

Tiefenskalierung kalibrieren#

Der Tiefenkopf trennt Form (relative Szenenstruktur) von der Skalierung (absolute Meter). Wenn ein Modell bereits eine gute relative Tiefe für deine Szenen erzeugt, die absoluten Werte für deine Kamera jedoch abweichen, kannst du die Skalierung mit model.calibrate() in wenigen Sekunden korrigieren – durch eine geschlossene Anpassung einer Log-Affinität mit zwei Parametern an einen kleinen beschrifteten Datensatz, ohne Gradienten-Training und ohne Änderung der Netzwerkgewichte. Dadurch kann die relative Struktur nicht beeinträchtigt werden.

Skalierung kalibrieren
from ultralytics import YOLO

model = YOLO("yolo26s-depth.pt")

# Fit scale on a labeled split (~100+ images is enough), then persist it
model.calibrate(data="path/to/your_dataset.yaml")
model.save("yolo26s-depth-calibrated.pt")

Für die Kalibrierung wird eine Ground-Truth-Tiefenkarte benötigt, an die angepasst werden kann. Daher läuft sie auf einem beschrifteten Split und kann nicht bei einer Inferenz ohne Referenzdaten erfolgen. Die Anpassung und Bewertung erfolgt auf denselben Pixeln, die von den Validierungsmetriken ausgewertet werden: GT-Werte bei oder über max_depth der Dataset-YAML (standardmäßig 100 m) werden ausgeschlossen. Verwende sie, wenn die relative Tiefe bereits gut ist und nur Maßstab oder Reichweite nicht stimmen. Wenn sich die relative Struktur selbst für deine Domäne ändern muss, führe stattdessen ein Fein-Tuning durch.

Das Training erledigt dies automatisch: Nachdem model.train(...) abgeschlossen ist, werden der beste und der letzte Checkpoint auf dem Validierungssatz kalibriert, sodass sie direkt Tiefenwerte im metrischen Maßstab ausgeben.

Die veröffentlichten yolo26*-depth.pt-Checkpoints enthalten diese Kalibrierung bereits. Sie wurden anhand der Validierungsmischung des Vortrainings angepasst. Es handelt sich um einen einzigen globalen Maßstab über alle Domänen hinweg. Für die genaueste absolute Tiefe bei einem bestimmten Kameramodell oder Szenentyp führst du model.calibrate() auf einem kleinen beschrifteten Split deiner eigenen Daten aus – dadurch wird die integrierte Anpassung ersetzt.

Datensatzformat#

Datensätze zur Tiefenschätzung ordnen jedem RGB-Bild eine skalierte uint16-Tiefen-PNG oder eine Gleitkomma-NPY-Tiefenkarte in Metern zu. PNG-Werte verwenden standardmäßig Millimeter; Datensätze mit einer anderen Konvention setzen depth_scale in ihrer YAML. Der Loader leitet den Pfad zur Tiefenkarte ab, indem er die Komponente images durch depth ersetzt. Dabei wird .png bevorzugt und auf .npy zurückgegriffen, wenn diese nicht vorhanden ist.

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. Die vollständige Formatspezifikation findest du im Leitfaden zu Datensätzen für die Tiefenschätzung.

Validierung#

Validiere die Genauigkeit eines trainierten YOLO26n-depth-Modells auf einem Datensatz zur Tiefenschätzung. Übergib data explizit, damit die Validierung die vorgesehene Dataset-YAML verwendet. Die veröffentlichten Gewichte wurden mit imgsz=768 trainiert. Für die beste Genauigkeit solltest du daher in dieser Größe validieren und Vorhersagen erstellen.

Beispiel
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-depth.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val(data="nyu-depth.yaml")
metrics.delta1  # percentage of pixels within threshold δ=1.25
metrics.abs_rel  # mean absolute relative error
metrics.rmse  # root mean squared error (meters)
metrics.silog  # scale-invariant logarithmic error

Vorhersage#

Verwende ein trainiertes YOLO26n-depth-Modell, um Vorhersagen für Bilder zu erstellen.

Beispiel
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-depth.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg")  # predict on an image

# Access the results
for result in results:
    depth_map = result.depth.data.cpu().numpy()  # torch.Tensor -> NumPy float32, shape (H, W), meters

Ausführliche Informationen zum Modus predict findest du auf der Seite Predict.

Ausgabe der Ergebnisse#

Die YOLO-Tiefenschätzung gibt pro Bild ein Results-Objekt zurück. Jedes Ergebnis enthält eine dichte Gleitkomma-Tiefenkarte für das gesamte Bild.

AttributTypFormBeschreibung
result.depthDepthMap(H,W)Dichte Tiefenkarte für jedes Pixel.
result.depth.datatorch.Tensor(H,W)Tiefenwerte in Metern; rufe .cpu().numpy() für NumPy auf.
result.boxes--Keine Instanz-Bounding-Boxen.
result.masks--Keine Instanzmasken.

Task-spezifische Felder Results für alle Tasks findest du im Abschnitt Vorhersageergebnisse nach Task.

Tiefenkarte einfärben#

Die Roh-Tiefenkarte ist ein einkanaliges Gleitkomma-Array in Metern – nützlich für Berechnungen, aber direkt schwer zu lesen. Um daraus ein Farbbild zu erstellen, verwendest du den Helfer colorize_depth in ultralytics.utils.plotting. Dieser ordnet das Tiefen-Array (H, W) einem (H, W, 3)-BGR-uint8-Bild zu; ungültige Pixel <= 0 werden schwarz dargestellt.

result.plot() legt diese Einfärbung bereits mit den Standardwerten (cmap="jet", mode="disparity") über das Eingabebild. Rufe colorize_depth direkt auf, wenn du ein eigenständiges eingefärbtes Tiefenbild oder eine andere Farbkarte beziehungsweise Normalisierung möchtest.

Vorhergesagte Tiefenkarte einfärben
import cv2

from ultralytics import YOLO
from ultralytics.utils.plotting import colorize_depth

model = YOLO("yolo26n-depth.pt")
result = model("https://ultralytics.com/images/bus.jpg")[0]

depth = result.depth.data.cpu().numpy()  # (H, W) float32, meters

# Colorize with near = warm and save
cv2.imwrite("depth_colored.png", colorize_depth(depth, cmap="spectral"))  # (H, W, 3) BGR uint8

# Fix the range to 0-20 m so the same color means the same distance across frames
cv2.imwrite("depth_metric.png", colorize_depth(depth, vmin=0.0, vmax=20.0, cmap="inferno", mode="metric"))

# Blended overlay straight from the Results object (uses cmap="jet", mode="disparity")
result.save("depth_overlay.png")

Jede Farbkarte verläuft von kühl/dunkel zu warm/hell. mode legt fest, welches Ende der Farbskala die Nähe darstellt, während vmin/vmax den Wertebereich über mehrere Bilder hinweg festlegen, sodass eine Farbe immer dieselbe Entfernung bedeutet.

ArgumentWertBeschreibung
cmapjet (Standard)Kontrastreiches Blau → Grün → Rot – die von result.plot() verwendete Farbpalette.
cmapinfernoSchwarz → Lila → Orange → Gelb. Wahrnehmungsmäßig gleichmäßig, farbenblindfreundlich und in Graustufen gut lesbar.
cmapspectralRot → Gelb → Grün → Blau (matplotlib Spectral_r).
modedisparity (Standard)Normalisiert die inverse Tiefe (1/d) zwischen dem 2. und 98. Perzentil; warme Markierungen für nahe und weit entfernte Ausreißer werden dabei absorbiert.
modemetricNormalisiert die Tiefe in Metern linear zwischen vmin und vmax; warme Farben markieren große Entfernungen, sodass die Farben der tatsächlichen Entfernung entsprechen.

Export#

Exportiere ein YOLO26n-depth-Modell in ein anderes Format wie ONNX, CoreML usw.

Beispiel
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-depth.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Export the model
model.export(format="onnx")

Die verfügbaren Exportformate für die YOLO26-Tiefenschätzung sind in der folgenden Tabelle aufgeführt. Mit dem Argument format kannst du in jedes Format exportieren, beispielsweise mit format='onnx' oder format='engine'. Exportierte Modelle kannst du direkt für Vorhersagen oder Validierungen verwenden, beispielsweise mit yolo predict model=yolo26n-depth.onnx. Nach Abschluss des Exports werden Nutzungsbeispiele für dein Modell angezeigt.

FormatArgument formatModellMetadatenArgumente
PyTorch-yolo26n-depth.pt-
TorchScripttorchscriptyolo26n-depth.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-depth.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-depth_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-depth.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-depth.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-depth_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-depth.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-depth_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-depth_paddle_model/imgsz, batch, device
MNNmnnyolo26n-depth.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-depth_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n-depth_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-depth_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-depth_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-depth_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-depth_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-depth_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-depth.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-depth_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-depth_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n-depth.aimodelimgsz, batch, quantize

nms=None verwendet standardmäßig Rohausgaben für externes NMS. Setze nms=False, um einen verfügbaren NMS-freien Kopf auszuwählen; nicht unterstützte Formate greifen auf ihren nativen Ausgabepfad zurück. Die Einträge nms oben identifizieren Formate, die NMS mit nms=True einbetten können.

Ausführliche Informationen zu export findest du auf der Seite Export.

FAQ#

  • Bereite zusammengehörige RGB-Bilder und entweder 16-Bit-Tiefen-PNGs oder Gleitkomma-NPY-Tiefenkarten in Metern vor. Erstelle anschließend eine Dataset-YAML, die auf dein Verzeichnis images/ verweist. Der Loader findet Tiefendateien automatisch, indem er im Pfad images durch depth ersetzt. Dabei wird .png bevorzugt und auf .npy zurückgegriffen, wenn diese nicht vorhanden ist.

    Beginne mit vortrainierten Gewichten und verwende mit AdamW eine niedrige Lernrate, damit das Fein-Tuning das bereits erworbene Wissen des Modells bewahrt (siehe Fein-Tuning mit deinen eigenen Daten für eine Begründung):

    Beispiel
    from ultralytics import YOLO
    
    # Load a pretrained YOLO26 depth model
    model = YOLO("yolo26s-depth.pt")
    
    # Fine-tune on a custom depth dataset
    results = model.train(
        data="path/to/your_dataset.yaml",
        epochs=20,
        imgsz=640,
        optimizer="AdamW",
        lr0=1e-4,
        warmup_bias_lr=1e-4,
    )

    Weitere verfügbare Argumente findest du auf der Seite Konfiguration.

  • Die Validierung der Tiefenschätzung gibt den Metriksatz aus, der von Depth Anything und verwandten Arbeiten zur monokularen Tiefenschätzung verwendet wird:

    • delta1 / delta2 / delta3 – Prozentsatz der Pixel, bei denen das Verhältnis zwischen der vorhergesagten und der Ground-Truth-Tiefe (oder dessen Kehrwert) unter 1,25, 1,25² beziehungsweise 1,25³ liegt. 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.

    Jede Vorhersage wird pro Bild an die Ground Truth angeglichen, jede Metrik wird für dieses Bild abschließend berechnet, und die Ergebnisse pro Bild werden über den Validierungssatz gemittelt. Dadurch zählt jedes Bild gleich stark, unabhängig davon, wie viele gültige Tiefenpixel es enthält. Bilder mit weniger als 10 gültigen Ground-Truth-Pixeln werden übersprungen und fließen nicht in diesen Mittelwert ein, da der Medianabgleich einer Handvoll Pixel bedeutungslos ist. Nicht endliche Vorhersagen werden stattdessen an den Tiefengrenzen bewertet. Dies entspricht der Mittelwertbildung pro Stichprobe und der von Depth Anything V2 verwendeten Mindestanzahl von 10 Pixeln.

  • Die Tiefenkarte wird als torch.Tensor mit der Form (H, W) gespeichert, wobei jeder Wert die vorhergesagte Tiefe in Metern darstellt (verwende result.depth.data.cpu().numpy() für ein NumPy-Array float32). Nach der Vorhersage greifst du über result.depth.data darauf zu. Die Karte ist an die Auflösung des Eingabebilds angepasst.

  • Ultralytics YOLO26 stellt integrierte Dataset-YAML-Konfigurationen für mehrere Datensätze zur Tiefenschätzung bereit, darunter NYU Depth V2, KITTI, Hypersim, SUN RGB-D und ARKitScenes. Die vollständige Liste und Details zum Format findest du im Leitfaden zu Datensätzen für die Tiefenschätzung.

  • Validiere ein vortrainiertes YOLO26-Tiefenmodell, indem du die für die Auswertung verwendete Dataset-YAML angibst:

    Beispiel
    from ultralytics import YOLO
    
    # Load a pretrained model
    model = YOLO("yolo26n-depth.pt")
    
    # Validate the model
    metrics = model.val(data="nyu-depth.yaml")
    print("delta1:", metrics.delta1)
    print("abs_rel:", metrics.abs_rel)
    print("rmse:", metrics.rmse)
  • Exportiere ein YOLO26-Tiefenmodell mit Python oder der CLI in das ONNX-Format:

    Beispiel
    from ultralytics import YOLO
    
    # Load a pretrained model
    model = YOLO("yolo26n-depth.pt")
    
    # Export the model to ONNX format
    model.export(format="onnx")

    Weitere Informationen zum Export in verschiedene Formate findest du auf der Seite Export.

Kommentare