YOLO Vision 2026:

Monokulare Tiefenschätzung#

Monocular depth estimation examples

Die monokulare Tiefenschätzung sagt eine pro Pixel berechnete Tiefenkarte aus einem einzelnen RGB-Bild voraus. Jeder Ausgabepixel enthält einen Tiefenwert in Metern, der die geschätzte Entfernung von der Kamera zu diesem Oberflächenpunkt darstellt.

Die Ausgabe eines Tiefenmodells ist eine dichte Gleitkommakarte der Form (H, W), die an das Eingabebild angepasst ist. Diese pixelweise Darstellung prädestiniert die monokulare Tiefenschätzung für die 3D-Szenenrekonstruktion, Roboter-Navigation, AR/VR-Inhaltserstellung und jede Anwendung, die ein räumliches Layout von einer einzelnen Kamera erfordert.

Tipp

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



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

Models#

YOLO26-Tiefenmodelle, die auf einem breiten Multi-Dataset-Mix (innen + außen, ~2,19 Mio. Bilder) vortrainiert wurden, sind unten aufgeführt. Die Metrikspalten werden auf dem NYU Depth V2 Eigen-Testsplit angegeben.

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.446.9
YOLO26s-depth7680.8960.1040.399393.7 ± 13.13.8 ± 0.013.267.9
YOLO26m-depth7680.9210.0890.364621.5 ± 49.76.0 ± 0.123.3130.7
YOLO26l-depth7680.9300.0830.351821.9 ± 50.77.7 ± 0.127.7157.2
YOLO26x-depth7680.9330.0800.3441240.9 ± 73.313.6 ± 0.257.0302.0
  • delta1NYU ist der Prozentsatz der Pixel, bei denen die vorhergesagte Tiefe innerhalb eines Faktors von 1,25 der Ground Truth liegt, auf dem NYU Depth V2 Eigen-Test-Split (654 Bilder) mit Multi-Scale + horizontal-flip TTA und Log-Least-Squares-Ausrichtung.
  • Die Genauigkeit auf einer Skala ohne TTA ist mit yolo depth val model=yolo26n-depth.pt data=nyu-depth.yaml imgsz=768 device=0 reproduzierbar (ersetze model= für jede Größe), was eine medianbasierte (nur skalenbezogene) Ausrichtung verwendet und niedriger abschneidet: 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 und den Ground-Truth-Tiefenwerten.
  • rmse ist der quadratische Mittelwert des Fehlers in Metern.
  • Geschwindigkeit ist die reine Inferenzlatenz (ohne Vor-/Nachbearbeitung) bei imgsz=768, batch=1, angegeben als Mittelwert ± Standardabweichung über zeitgesteuerte Durchläufe nach dem Aufwärmen. CPU ONNX ist ONNX Runtime fp32 auf einem Intel Xeon mit 32 Kernen (Skylake); T4 TensorRT10 ist TensorRT fp16 auf einer Tesla T4.
  • params und FLOPs werden bei 768×768 gemessen, der Trainingsauflösung der veröffentlichten Gewichte.

Geschwindigkeit im Vergleich zu Depth Anything V2#

Depth Anything V2 ist eine weit verbreitete offene Baseline für monokulare Tiefe. Dessen DINOv2-Vision-Transformer-Backbone und DPT-Decoder sind rechenintensiv, sodass auf derselben Tesla T4 unter TensorRT fp16 das kleinste veröffentlichte Depth Anything V2-Modell langsamer ist als jedes YOLO26-Tiefenmodell – einschließlich YOLO26x-depth, das mehr als doppelt so viele Parameter aufweist.

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

ModellParameter (M)FLOPs (B)T4 TensorRT10 (ms)FPSGeschwindigkeitssteigerung vs. V2 SmallGeschwindigkeitssteigerung vs. V2 Base
Depth Anything V2 Base97.51025.555.4018.1
Depth Anything V2 Small24.8346.920.9947.6
YOLO26x-depth57.0302.013.5773.71.5×4.1×
YOLO26l-depth27.7157.27.68130.22.7×7.2×
YOLO26m-depth23.3130.76.00166.73.5×9.2×
YOLO26s-depth13.267.93.82261.65.5×14.5×
YOLO26n-depth6.446.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 ist reine Inferenz, batch=1, TensorRT fp16 auf einer Tesla T4 – derselbe Versuchsaufbau wie in der Modelltabelle oben, hier auf zwei Dezimalstellen angezeigt; FPS ist der Kehrwert der ungerundeten Latenz. Die Speedup-Spalten teilen die Latenz von Depth Anything V2 Small (20,99 ms) und 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 deckt nur die Latenz ab – die beiden Modellfamilien werden hier nicht nach einem gemeinsamen Genauigkeitsprotokoll evaluiert.

Tiefenbereich und der Log-Tiefen-Head#

Der Tiefenkopf sagt exp(logit) voraus – ungebunden (~0,02–150 m) – und entkoppelt die Szenenform von der absoluten Skala: Das Netzwerk sagt ein relatives Protokoll-Tiefenfeld voraus, und absolute Meter werden durch eine separate Zwei-Parameter-Transformation (exp(a·log d + b)) festgelegt, die bei der Auswertung, durch leichte Kalibrierung oder durch Fine-Tuning ermittelt wird. Die gängige Alternative, ein gebundener sigmoid × max_depth-Kopf, baut stattdessen eine feste Obergrenze in die Architektur ein, sodass jede Tiefe jenseits von max_depth abgeschnitten wird – was das Training auf und die Vorhersage von Szenen mit größerer Reichweite verhindert.

Warum der Head unbegrenzt ist: Nachweise über Tiefenbereiche hinweg#

Kontrolliertes A/B — gleiche Daten, gleicher Zeitplan, nur der Head unterscheidet sich. Training beider Heads von Grund auf mit einer identischen Mischung aus Innen- (≤10 m) und Außendaten (≤80 m):

KopfAusgabebereichGemischter Bereich val δ1Trainingsverhalten
sigmoid × max_depth (10 m)begrenzt 0–10 m0.221plateaut bei Epoche 1
log (ungebunden)0–~150 m0.367 (+66%)verbessert sich durchgehend

Der gebundene Kopf kann die Mehrheit der Außenpixel (>10 m) nicht darstellen, sodass er fast sofort aufhört sich zu verbessern; der log-Kopf lernt aus dem gesamten Bereich.

Der Fehlerfall, den er behebt — Einzeldatensatz-Feinabstimmung, stratifiziert nach Bereich. Das Feinabstimmen eines begrenzten (10 m) Heads auf einzelnen Datensätzen funktioniert, wenn die Daten in das Limit passen, und bricht zusammen, wenn sie es überschreiten:

DatensatzTiefenbereichBegrenzter-Head δ1
SUN RGB-D≤10 m0.78 ✅
Hypersimmeist ≤10 m0.74 ✅
KITTI~80 m0,08 ❌ (abs_rel ≈ 7,0 — das 80/10 Skalen-Mismatch)
vKITTI280 m0.04 ❌

Der Zusammenbruch landet exakt an der Obergrenze. Der log-Kopf hat keine solche Grenze.

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

BenchmarkBereichYOLO26x-depth (log)frühere begrenzte Veröffentlichung
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öffentlichungen. Die anderen Zeilen werden mit dem TTA- und Log-Least-Squares-Protokoll bewertet, das auf ihren Datensatzseiten beschrieben ist und vom Validator in diesem Repo nicht implementiert wird, sodass die KITTI-Zeile nicht auf derselben Basis nachgemessen werden kann; die KITTI page enthält Werte, die auf dem kanonischen 652-Frame-Eigen-Split gemessen wurden.

Die größten Gewinne liegen bei den länger reichenden Außen-Benchmarks (KITTI, ETH3D) — genau dort, wo ein festes 10-m-Limit am meisten schadet —, während die Innenraum-Leistung beibehalten wird.

Trainieren#

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

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)

Weitere Details zum train-Modus findest du auf der Train-Seite.

Feinabstimmung auf eigenen Daten#

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

Empfohlenes Feinabstimmungs-Rezept
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 Tipps:

  • Die Augmentierung wird über die Standardargumente (degrees, translate, scale, shear, perspective, flipud, fliplr, hsv_h, hsv_s, hsv_v) gesteuert; die geometrische Verzerrung und die Spiegelungen werden identisch auf die gepaarte Tiefenkarte angewendet. Um das genaue Rezept einzusehen, das für die veröffentlichten YOLO26-Depth-Gewichte verwendet wurde, inspiziere die im Checkpoint gespeicherte train_args – siehe Inspecting YOLO26 Checkpoint Training Args.
  • mosaic, mixup, cutmix und copy_paste sind für die Tiefe nicht implementiert. Der Tiefen-Datensatzlader setzt diese Wahrscheinlichkeiten automatisch auf 0, sodass deren Übergabe keine Wirkung hat. Diese Augmentierungen werden nicht unterstützt, da sie mehrere Bilder kombinieren, was ungültige gepaarte Tiefenkarten erzeugen würde.
  • Jeder Tiefenbereich funktioniert sofort. Die Modelle mit log-Kopf sagen eine ungebundene Tiefe voraus, sodass sie sich ohne Änderungen an Nahbereichsdaten (Makro) oder Fernbereichsdaten (Außenbereich/Fahren) anpassen. Das Festlegen von max_depth: in deiner Datensatz-YAML (in Metern) begrenzt, welche GT-Pixel zu den Validierungsmetriken zählen.
  • Allgemeine Leistung beibehalten. Wenn das Modell bei Szenen, die über deinen Trainingsdatensatz hinausgehen, genau bleiben soll, mische einen kleinen Teil (~5–10 %) vielfältiger Allzweckbilder in deine Trainingsdaten; dies reduziert das Vergessen während der Feinabstimmung erheblich.
  • Trainiere von Grund auf (model=yolo26s-depth.yaml) nur dann, wenn sich deine Domäne stark unterscheidet und du über einen großen Datensatz verfügst – dort ist der Standard-SGD lr0=0.01 angemessen, da keine vortrainierten Gewichte zu erhalten sind.

Kalibrierung der Tiefenskala#

Der Tiefenkopf trennt Form (relative Szenenstruktur) von Skala (absolute Meter). Wenn ein Modell in deinen Szenen bereits eine gute relative Tiefe erzeugt, aber die absoluten Werte für deine Kamera nicht stimmen, kannst du die Skala in Sekundenschnelle mit model.calibrate() korrigieren – einer geschlossenen Anpassung einer log-affinen Zwei-Parameter-Funktion an einen kleinen markierten Satz, ohne Gradiententraining und ohne Änderung der Netzwerkgewichte, sodass die relative Struktur nicht verschlechtert werden kann.

Skalenkalibrierung
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")

Die Kalibrierung benötigt Ground-Truth-Tiefe zum Anpassen, läuft also auf einem markierten Split ab – sie kann nicht bei einer blinden Inferenz stattfinden. Sie passt sich an dieselben Pixel an und bewertet diese, die auch die Val-Metriken auswerten: GT auf oder jenseits von max_depth der Datensatz-YAML (Standard 100 m) wird ausgeschlossen. Verwende sie, wenn die relative Tiefe bereits gut ist und nur die Skala/der Bereich falsch ist; wenn sich die relative Struktur für deine Domäne selbst ändern muss, nimm stattdessen Fine-Tuning vor.

Das Training erledigt dies automatisch für dich: Nach Abschluss von model.train(...) werden die besten und letzten Checkpoints auf dem Validierungssatz kalibriert, sodass sie standardmäßig metrisch skalierte Tiefe ausgeben.

Die veröffentlichten yolo26*-depth.pt-Checkpoints werden bereits mit dieser eingebauten Kalibrierung ausgeliefert, angepasst an den Validierungs-Mix des Vortrainings. Es handelt sich um eine einzige globale Skala über alle Domänen hinweg. Für die genaueste absolute Tiefe auf einer bestimmten Kamera oder einem bestimmten Szenentyp solltest du daher model.calibrate() auf einem kleinen markierten Split aus deinen eigenen Daten ausführen – dies ersetzt die integrierte Anpassung.

Datensatzformat#

Tiefenschätzungs-Datensätze paaren jedes RGB-Bild mit einer entsprechenden Tiefendatei. Tiefenziele werden als .npy-Arrays gespeichert, die float32-Werte in Metern enthalten. Die Datensatz-YAML verweist auf ein images/-Verzeichnis; der Lader leitet den Tiefendateipfad ab, indem er die Komponente images durch depth ersetzt und die Bilddateiendung durch .npy austauscht.

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

Beispielsweise ist ein Bild unter images/train/scene_001.jpg mit einer Tiefenkarte unter depth/train/scene_001.npy gepaart. Die vollständige Spezifikation des Formats findest du im Depth Estimation Dataset Guide.

Validieren#

Validiere die Genauigkeit eines trainierten YOLO26n-depth-Modells anhand eines Tiefenschätzungs-Datensatzes. Übergebe data explizit, damit die Validierung die beabsichtigte Datensatz-YAML verwendet. Die veröffentlichten Gewichte werden bei imgsz=768 trainiert, validiere und prognostiziere daher in dieser Größe für beste Genauigkeit.

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

Vorhersagen#

Verwende ein trainiertes YOLO26n-depth-Modell, um Vorhersagen auf Bildern auszuführen.

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

Weitere Details zum predict-Modus findest du auf der Predict-Seite.

Ergebnisausgabe#

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

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

Aufgabenspezifische Results-Felder für alle Aufgaben findest du im Abschnitt Predict Results by Task.

Einfärben der Tiefenkarte#

Die rohe Tiefenkarte ist ein einkanaliges Gleitkomma-Array in Metern – nützlich für Berechnungen, aber schwer direkt zu lesen. Um sie in ein Farbbild umzuwandeln, verwende den colorize_depth-Helfer in ultralytics.utils.plotting, der das Tiefenarray (H, W) auf ein BGR-uint8-Bild (H, W, 3) abbildet (ungültige Pixel <= 0 werden schwarz dargestellt).

result.plot() überblendet diese Kolorierung bereits über das Eingabebild unter Verwendung der Standardwerte (cmap="jet", mode="disparity"); rufe colorize_depth direkt auf, wenn du ein eigenständiges farbiges Tiefenbild oder eine andere Farbkarte beziehungsweise Normalisierung wünschst.

Eine 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 → warm/hell. mode entscheidet, welches Ende nah ist, und vmin/vmax sperren den Bereich über Frames hinweg, sodass eine Farbe immer denselben Abstand bedeutet.

ArgumentWertBeschreibung
cmapjet (Standard)Kontrastreiches Blau → Grün → Rot, die Palette, die result.plot() verwendet.
cmapinfernoSchwarz → Lila → Orange → Gelb. Wahrnehmungsmäßig einheitlich, farbenblindfreundlich, in Graustufen lesbar.
cmapspectralRot → Gelb → Grün → Blau (Matplotlib Spectral_r).
modedisparity (Standard)Normalisiert die inverse Tiefe (1/d) zwischen dem 2. und 98. Perzentil; warme Ausreißer für Nah- und Fernbereich werden absorbiert.
modemetricNormalisiert die Tiefe in Metern linear zwischen vmin und vmax; warm markiert den Fernbereich, sodass Farben der echten Entfernung folgen.

Exportieren#

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

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")

Verfügbare Exportformate für die YOLO26-Tiefenschätzung sind in der folgenden Tabelle aufgeführt. Du kannst mit dem Argument format in jedes Format exportieren, d. h. format='onnx' oder format='engine'. Du kannst direkt auf exportierten Modellen prognostizieren oder validieren, d. h. yolo predict model=yolo26n-depth.onnx. Anwendungsbeispiele werden für dein Modell nach Abschluss des Exports angezeigt.

Formatformat-ArgumentModellMetadatenArgumente
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

Weitere Details zum export-Modus findest du auf der Export-Seite.

FAQ#

  • Bereite gepaarte RGB-Bilder und .npy-Tiefendateien vor und erstelle dann eine Datensatz-YAML, die auf dein images/-Verzeichnis verweist. Der Lader findet Tiefendateien automatisch, indem er images im Pfad durch depth ersetzt und die Bilddateiendung gegen .npy austauscht.

    Beginne mit vortrainierten Gewichten und verwende eine niedrige Lernrate mit AdamW, damit das Fine-Tuning das behält, was das Modell bereits weiß (warum das so ist, erfährst du unter Fine-tuning on your own data):

    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,
    )

    Besuche die Konfigurationsseite, um weitere verfügbare Argumente zu finden.

  • Die Validierung der Tiefenschätzung liefert den Metriksatz, der von Depth Anything und verwandten monokularen Tiefenarbeiten verwendet wird:

    • delta1 / delta2 / delta3 — Prozentsatz der Pixel, bei denen das Verhältnis der vorhergesagten zur Ground-Truth-Tiefe (oder deren Kehrwert) unter 1.25, 1.25² bzw. 1.25³ liegt. 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.

    Jede Vorhersage wird pro Bild median-ausgerichtet an ihren Ground-Truth-Daten, jede Metrik wird für dieses Bild finalisiert und diese Ergebnisse pro Bild werden über den Validierungssatz gemittelt, sodass jedes Bild unabhängig von der Anzahl seiner gültigen Tiefenpixel gleich gewichtet wird. Bilder mit weniger als 10 gültigen Ground-Truth-Pixeln werden übersprungen und fließen nicht in diesen Durchschnitt ein, da das Ausrichten des Medians einer Handvoll Pixel bedeutungslos ist; nicht-endliche Vorhersagen werden stattdessen an den Tiefengrenzen bewertet. Dies entspricht der Stichprobenmittelung und dem 10-Pixel-Schwellenwert, die von Depth Anything V2 verwendet werden.

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

  • Ultralytics YOLO26 bietet integrierte Datensatz-YAML-Konfigurationen für mehrere Tiefenschätzungs-Datensätze, einschließlich NYU Depth V2, KITTI, Hypersim, SUN RGB-D und ARKitScenes. Die vollständige Liste und Formatdetails findest du im Depth Estimation Dataset Guide.

  • Validiere ein vortrainiertes YOLO26 Tiefenmodell, indem du das für die Evaluierung verwendete Datensatz-YAML bereitstellst:

    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 CLI nach ONNX:

    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 Details zum Export in verschiedene Formate findest du auf der Export-Seite.

Kommentare