Ultralytics YOLO27:
Get Started

Ultralytics YOLO ile Monoküler Derinlik Tahmini#

Monocular depth estimation examples

Monoküler derinlik tahmini, tek bir RGB görüntüsünden piksel başına bir derinlik haritası tahmin eder. Çıktıdaki her piksel, kameradan ilgili yüzey noktasına olan tahmini mesafeyi metre cinsinden gösteren bir derinlik değeri taşır.

Derinlik modelinin çıktısı, giriş görüntüsüyle hizalanmış (H, W) şekline sahip yoğun bir kayan nokta haritasıdır. Bu piksel başına gösterim, monoküler derinlik tahminini 3B sahne yeniden oluşturma, robot navigasyonu, AR/VR içerik üretimi ve tek bir kameradan uzamsal düzen gerektiren tüm uygulamalar için uygun hâle getirir.



İzle: Ultralytics YOLO26 ile Monoküler Derinlik Tahmini | Python Eğitimi | Vision AI 🚀
İpucu

Monoküler derinlik tahmini için task=depth veya yolo depth CLI görevini kullan. YOLO26 derinlik modeli dosyaları, örneğin yolo26n-depth.pt gibi -depth son ekini kullanır.

Modeller#

Geniş ve çoklu veri kümesi karışımıyla (iç mekân + dış mekân, ~2.19M görüntü) önceden eğitilmiş YOLO26 derinlik modelleri aşağıda gösterilmiştir. Metrik sütunları NYU Depth V2 Eigen test bölümünde raporlanmıştır.

Modeller ilk kullanımda en güncel Ultralytics sürümünden otomatik olarak indirilir.

Modelboyut
(piksel)
delta1NYUabs_relNYUrmseNYUHız
CPU ONNX
(ms)
Hız
T4 TensorRT10
(ms)
parametre
(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, çok ölçekli + yatay çevirme TTA ve log-en küçük kareler hizalamasıyla NYU Depth V2 Eigen test bölümünde (654 görüntü), tahmin edilen derinliğin gerçek değerin 1,25 katı aralığında olduğu piksellerin oranıdır.
  • TTA olmadan tek ölçekli doğruluk, ölçeklerin her biri için model= kullanılarak yolo depth val model=yolo26n-depth.pt data=nyu-depth.yaml imgsz=768 device=0 ile tekrarlanabilir; bu yöntem medyan (yalnızca ölçek) hizalaması kullanır ve daha düşük skor verir: delta1 0.783 (n), 0.793 (s), 0.840 (m), 0.853 (l), 0.860 (x).
  • abs_rel, tahmin edilen ve gerçek derinlik değerleri arasındaki ortalama mutlak bağıl hatadır.
  • rmse, metre cinsinden kök ortalama kare hatadır.
  • Hız, imgsz=768, batch=1 çözünürlüğünde, ısınma sonrasındaki zamanlanmış çalıştırmaların ortalaması ± std olarak raporlanan yalnızca çıkarım gecikmesidir (ön/son işleme dâhil değildir). CPU ONNX, 32 çekirdekli Intel Xeon (Skylake) üzerinde ONNX Runtime fp32'dir; T4 TensorRT10, Tesla T4 üzerinde TensorRT fp16'dır.
  • parametreler ve FLOPs, yayımlanan ağırlıkların eğitim çözünürlüğü olan 768×768'de ölçülmüştür.

Ön NYU Depth V2 sonuçları için yayımlanmamış YOLO27 önizlemesine bak.

Depth Anything V2 ile hız karşılaştırması#

Depth Anything V2, monoküler derinlik için yaygın olarak kullanılan açık bir temel modeldir. DINOv2 görsel Transformer omurgası ve DPT kod çözücüsü yoğun hesaplama gerektirir. Bu nedenle aynı Tesla T4 üzerinde TensorRT fp16 kullanıldığında, yayımlanmış en küçük Depth Anything V2 modeli, iki kattan fazla parametreye sahip YOLO26x-depth dâhil tüm YOLO26 derinlik modellerinden daha yavaştır.

~768 pikselde — YOLO26 için imgsz=768 (yayımlanan ağırlıklarının eğitildiği çözünürlük) ve Depth Anything V2 için 770 piksel (DINOv2 omurgası, yama boyutu olan 14'ün katını gerektirir):

Modelparametreler (M)FLOPs (B)T4 TensorRT10 (ms)FPSV2 Small'a göre hızlanmaV2 Base'e göre hızlanma
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×

~640 pikselde — sırasıyla imgsz=640 ve 644 pikselde — sıralama değişmez ve YOLO26n-depth, Depth Anything V2 Small'dan 5.9× daha hızlıdır:

ModelT4 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
  • Gecikme yalnızca çıkarımı kapsar; batch=1, Tesla T4 üzerinde TensorRT fp16 kullanır ve yukarıdaki model tablosundakiyle aynı test düzeneğiyle iki ondalık basamakla gösterilmiştir; FPS, yuvarlanmamış gecikmenin tersidir. Hızlanma sütunları, Depth Anything V2 Small (20.99 ms) ve Base (55.40 ms) gecikmelerini YOLO26 gecikmesine böler.
  • Depth Anything V2 Small ve Base, yayımlanmış ViT-S ve ViT-B kontrol noktalarıdır.
  • Karşılaştırma yalnızca gecikmeyi kapsar; iki model ailesi burada ortak bir doğruluk protokolüyle değerlendirilmemiştir.

Derinlik aralığı ve log-derinlik başlığı#

Derinlik başlığı exp(logit) tahmin eder — sınırsız (~0.02–150 m) — ve sahne şeklini mutlak ölçekten ayırır: ağ göreli bir log-derinlik alanı tahmin eder; mutlak metre değerleri ise değerlendirme sırasında, hafif kalibrasyonla veya ince ayarla elde edilen ayrı iki parametreli bir dönüşümle (exp(a·log d + b)) belirlenir. Yaygın alternatif olan sınırlı sigmoid × max_depth başlığı, bunun yerine mimariye sabit bir üst sınır yerleştirir; dolayısıyla max_depth değerini aşan tüm derinlikler kırpılır ve bu da daha uzun menzilli sahneler üzerinde eğitim yapmayı ve bu sahneleri tahmin etmeyi engeller.

Kontrollü A/B — aynı veri, aynı zaman çizelgesi, yalnızca başlık farklı. Her iki başlığı da aynı iç mekân (≤10 m) ve dış mekân (≤80 m) veri karışımıyla sıfırdan eğitmek:

BaşlıkÇıktı aralığıKarışık aralık doğrulama δ1Eğitim davranışı
sigmoid × max_depth (10 m)sınırlı 0–10 m0.2211. epoch'ta plato yapar
log (sınırsız)0–~150 m0.367 (+66%)ilerleme boyunca iyileşir

Sınırlı başlık, dış mekân piksellerinin çoğunluğunu oluşturan >10 m aralığını temsil edemez; bu nedenle iyileşmesi neredeyse hemen durur. log başlığı ise tüm aralıktan öğrenir.

Çözdüğü başarısızlık biçimi — aralığa göre katmanlandırılmış tek veri kümesi ince ayarı. Sınırlı (10 m) bir başlıkta ayrı veri kümeleriyle yapılan ince ayar, veriler üst sınıra uyduğunda işe yarar; bu sınır aşıldığında ise performans çöker:

Veri kümesiDerinlik aralığıSınırlı başlık δ1
SUN RGB-D≤10 m0.78 ✅
Hypersimçoğunlukla ≤10 m0.74 ✅
KITTI~80 m0.08 ❌ (abs_rel ≈ 7.0 — 80/10 ölçek uyuşmazlığı)
vKITTI280 m0.04 ❌

Çöküş tam olarak üst sınır noktasında gerçekleşir. log başlığında böyle bir sınır yoktur.

Yayımlanan modeller — aralıklar arası performans. Yayımlanan log başlıklı model ailesinin, 10 m (NYU, iBims-1) ile 80 m (KITTI) aralığını kapsayan kıyaslamalardaki ölçek hizalamalı δ1 sonuçları:

KıyaslamaAralıkYOLO26x-depth (log)önceki sınırlı model sürümü
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
Ortalama—0.8190.799

Her iki sütundaki değerler yayımlandıkları hâliyle verilmiştir. Diğer satırlar, bu depodaki doğrulayıcının uygulamadığı ve veri kümesi sayfalarında açıklanan TTA ve log-en küçük kareler protokolüyle puanlanmıştır; bu nedenle KITTI satırı aynı koşullarda yeniden ölçülemez. KITTI sayfasında bunun yerine standart 652 karelik Eigen bölümünde ölçülen değerler yer alır.

En büyük kazanımlar, sabit 10 m üst sınırının en çok zarar verdiği uzun menzilli dış mekân kıyaslamalarında (KITTI, ETH3D) elde edilir; iç mekân performansı ise korunur.

Eğit#

YOLO26n-depth modelini Depth8 veri kümesinde, görüntü boyutu 640 olacak şekilde 100 epoch boyunca eğit. Kullanılabilir bağımsız değişkenlerin tam listesi için Yapılandırma sayfasına bak.

Örnek
from ultralytics import YOLO

# Bir model yükle
model = YOLO("yolo26n-depth.yaml")  # YAML'den yeni bir model oluştur
model = YOLO("yolo26n-depth.pt")  # Önceden eğitilmiş bir model yükle (eğitim için önerilir)
model = YOLO("yolo26n-depth.yaml").load("yolo26n-depth.pt")  # YAML'den oluştur ve ağırlıkları aktar

# Modeli eğit
results = model.train(data="depth8.yaml", epochs=100, imgsz=640)

train modu hakkında tüm ayrıntılar için Eğitim sayfasına bak. Derinlik modelleri Ultralytics Platform bulut eğitimi ile de eğitilebilir.

Veri kümesi biçimi#

Derinlik tahmini veri kümelerinde her RGB görüntü, metre cinsinden ölçeklenmiş bir uint16 derinlik PNG'siyle veya kayan noktalı NPY derinlik haritasıyla eşleştirilir. PNG değerleri varsayılan olarak milimetre cinsindendir; başka bir gösterim kullanan veri kümeleri YAML dosyalarında depth_scale ayarını yapar. Yükleyici, images bileşenini depth ile değiştirerek derinlik dosyasının yolunu türetir; önce .png öğesini tercih eder, bulunmazsa .npy öğesini kullanır.

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

Örneğin, images/train/scene_001.jpg yolundaki bir görüntü depth/train/scene_001.png yolundaki bir derinlik haritasıyla eşleştirilir. Biçim belirtiminin tamamı için Derinlik Tahmini Veri Kümesi Kılavuzu sayfasına bak.

Kendi verilerinle ince ayar#

Önceden eğitilmiş bir derinlik modelini özel bir veri kümesine uyarlarken öğrenme oranını düşür ve AdamW optimizer'ını kullan. Varsayılan optimizer ayarları sıfırdan eğitim için yapılandırılmıştır; zaten yakınsamış bir derinlik modeline uygulandıklarında önceden öğrenilmiş bilgiyi silebilir ve sonuçları kötüleştirebilirler. Bu etki özellikle tek bir alanda ince ayar yaparken belirgindir.

Önerilen ince ayar tarifi
from ultralytics import YOLO

model = YOLO("yolo26s-depth.pt")  # önceden eğitilmiş ağırlıklarla başla

model.train(
    data="path/to/your_dataset.yaml",
    epochs=20,
    imgsz=640,
    optimizer="AdamW",
    lr0=1e-4,  # sıfırdan eğitim varsayılanının ~100 kat altında
    warmup_bias_lr=1e-4,  # ısınmayı da yumuşak tut
)

Ek ipuçları:

  • Artırma, standart argümanlarla kontrol edilir (degrees, translate, scale, shear, perspective, flipud, fliplr, hsv_h, hsv_s, hsv_v); geometrik çarpıtma ve çevirmeler eşleştirilmiş derinlik haritasına da aynı şekilde uygulanır. Yayınlanan YOLO26-Depth ağırlıkları için kullanılan tam tarifi görmek üzere kontrol noktasında kayıtlı train_args değerini incele — YOLO26 Kontrol Noktası Eğitim Argümanlarını İnceleme sayfasına bak.
  • Derinlik için mosaic, mixup, cutmix ve copy_paste uygulanmamıştır. Derinlik veri kümesi yükleyicisi bu olasılıkları otomatik olarak 0'a ayarlar; bu nedenle bunları geçirmenin etkisi olmaz. Bu artırmalar birden fazla görüntüyü birleştirdiğinden ve bu da eşleştirilmiş derinlik haritalarını geçersiz kılacağından desteklenmez.
  • Her derinlik aralığı kutudan çıktığı gibi çalışır. log başlıklı modeller sınırsız derinlik tahmin eder; böylece kısa menzilli (makro) veya uzun menzilli (dış mekân/sürüş) verilere değişiklik yapmadan uyum sağlar. Veri kümesi YAML dosyanda max_depth: değerini ayarlamak, doğrulama metriklerine hangi GT piksellerinin dahil edileceğini (metre cinsinden) sınırlar.
  • Genel performansı koru. Modelin eğitim kümenin dışındaki sahnelerde de doğru sonuç vermesini istiyorsan eğitim verilerine çeşitli, genel amaçlı görüntülerden küçük bir oran (~5–10%) ekle; bu, ince ayar sırasında unutmayı önemli ölçüde azaltır.
  • Sıfırdan eğitimi (model=yolo26s-depth.yaml) yalnızca alanın çok farklıysa ve büyük bir veri kümen varsa kullan — bu durumda, korunacak önceden eğitilmiş ağırlıklar olmadığından varsayılan optimizer=auto uygundur.

Derinlik ölçeğini kalibre etme#

Derinlik başlığı şekli (sahnenin göreli yapısı) ölçekten (mutlak metre) ayırır. Model sahnelerinde zaten iyi göreli derinlik üretiyor ancak mutlak değerler kamerana göre hatalıysa, küçük bir etiketli kümede başlığın log-affine dönüşümüne kapalı biçimli, yalnızca ölçeğe yönelik bir uyum sağlayan model.calibrate() ile ölçeği saniyeler içinde düzeltebilirsin. Bu uyum, yalnızca çapraz doğrulamalı elde tutulan δ1 değerini iyileştirdiğinde korunur; gradyan eğitimi yapılmaz ve ağ ağırlıkları değiştirilmez, dolayısıyla göreli yapı kötüleşemez.

Ölçek kalibrasyonu
from ultralytics import YOLO

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

# Etiketli bir bölümde ölçeği uydur (yaklaşık 100+ görüntü yeterli), ardından kalibrasyonu kaydet
model.calibrate(data="path/to/your_dataset.yaml")
model.save("yolo26s-depth-calibrated.pt")

Kalibrasyon için uyum sağlanacak gerçek derinlik değerleri gerekir; bu nedenle etiketli bir bölümde çalışır — kör çıkarım sırasında yapılamaz. Uyum ve puanlama, doğrulama metriklerinin değerlendirdiği piksellerle yapılır: veri kümesi YAML dosyasındaki max_depth değerine eşit veya daha büyük GT (varsayılan 100 m) hariç tutulur. Göreli derinlik zaten iyiyse ve yalnızca ölçek/aralık hatalıysa bunu kullan; alanın için göreli yapının kendisinin değişmesi gerekiyorsa bunun yerine ince ayar yap.

Eğitim bunu senin için otomatik olarak yapar: model.train(...) tamamlandıktan sonra en iyi ve son kontrol noktaları doğrulama kümesinde kalibre edilir; böylece kutudan çıktığı gibi metrik ölçekli derinlik üretirler.

Yayınlanan yolo26*-depth.pt kontrol noktaları bu kalibrasyon uygulanmış olarak gelir; kalibrasyon, ön eğitim doğrulama karışımında uydurulmuştur. Tüm alanlarda tek bir genel ölçek kullanılır; bu nedenle belirli bir kamera veya sahne türünde en doğru mutlak derinliği elde etmek için kendi verilerinden küçük, etiketli bir bölümde model.calibrate() çalıştır — bu, önceden uygulanmış uyumun yerini alır.

Derinlik kamerası olmadan gerçek referans derinlik elde etme#

Kameranda derinlik sensörü olmasa bile kalibrasyon yapabilirsin. Kalibrasyon, tek bir global ölçek uydurur ve derinliği 0 olan pikselleri yok sayar; bu nedenle görüntü başına ölçülmüş birkaç nokta yeterlidir.

  1. Görüntüleri topla. Kameranı kullanacağın çözünürlük ve lens ayarlarında 50 ila 150 görüntü çek ve bunları dataset/images/val/ içine koy. Kalibrasyon, val bölümünü okur.

  2. Derinliği etiketle. Aşağıdaki iki yöntemden birini kullan. Her ikisi de veri kümesi biçiminde her görüntü için dataset/depth/val/ içine bir derinlik haritası yazar.

Her görüntüde birkaç noktanın mesafesini düz yüzeylerde, nesne kenarlarından uzakta bir lazer mesafe ölçer veya şerit metreyle ölç ve her noktanın piksel konumunu points.csv içine kaydet:

image,x,y,meters
img_0001.jpg,352,453,3.15
img_0001.jpg,28,300,2.672

Ardından, ölçülmemiş tüm pikselleri 0 bırakarak derinlik haritalarını yaz. Her nokta, imgsz boyutuna yeniden ölçeklendirme sırasında kaybolmaması için küçük bir nokta olarak çizilir:

import csv
from collections import defaultdict
from pathlib import Path

import cv2
import numpy as np

points = defaultdict(list)
with open("points.csv") as f:  # columns: image, x, y, meters
    for row in csv.DictReader(f):
        points[row["image"]].append((int(row["x"]), int(row["y"]), float(row["meters"])))

for name, pts in points.items():
    h, w = cv2.imread(f"dataset/images/val/{name}").shape[:2]
    depth = np.zeros((h, w), np.uint16)  # 0 means no label
    r = max(h, w) // 768 + 1  # dot radius that survives the resize to imgsz=768
    for x, y, meters in pts:
        cv2.circle(depth, (x, y), r, round(meters * 100), -1)  # centimeters, matching depth_scale: 100
    out = Path("dataset/depth/val") / f"{Path(name).stem}.png"
    out.parent.mkdir(parents=True, exist_ok=True)
    cv2.imwrite(str(out), depth)

Mesafe ölçer, bir noktaya olan düz çizgi mesafesini ölçerken derinlik haritaları kamera görüş ekseni boyunca olan mesafeyi depolar. Bu iki değer görüntünün merkezinde eşleşir ve merkezden 15° uzakta yaklaşık %3,5 farklılık gösterir; bu nedenle noktaları merkeze yakın ölç veya her ölçümü kamera iç parametrelerini kullanarak meters / sqrt(1 + ((x - cx) / fx) ** 2 + ((y - cy) / fy) ** 2) ile dönüştür.

  1. Veri kümesi YAML dosyasını calib.yaml olarak yaz. depth_scale: 100, ölçülen noktalardan elde edilen santimetre cinsinden PNG'leri okur ve NPY haritaları için yok sayılır:

    path: dataset
    train: images/val
    val: images/val
    depth_scale: 100 # PNG value 100 = 1 meter
    names:
        0: depth
  2. Kalibrasyonu yap ve kaydet, ardından tahmin veya dışa aktarma için yolo26s-depth-calibrated.pt yükle:

    from ultralytics import YOLO
    
    model = YOLO("yolo26s-depth.pt")
    model.calibrate(data="calib.yaml", imgsz=768)
    model.save("yolo26s-depth-calibrated.pt")

yolo26s-depth.pt ve kamera başına 150 görüntüyle yapılan testlerde, yayımlanan kalibrasyon NYU, KITTI ve dar lensli bir kamera için tam gerçek referans verilerine uydurulan ölçekten %4 ila %46 sapma gösterdi. Görüntü başına 5 ölçülmüş noktayla kalibrasyon, bu uyumun %1 yakınına ulaştı; DA3METRIC-LARGE etiketleriyle yapılan kalibrasyon ise %7 yakınına ulaştı. Daha fazla görüntü, görüntü başına daha fazla noktadan daha çok fayda sağlar: Görüntü başına 1 nokta kullanılan 150 görüntü yaklaşık %3 içinde kalırken, görüntü başına 5 nokta kullanılan 20 görüntüde sapma %9'a kadar çıktı.

Doğrula#

Eğitilmiş bir YOLO26n-depth modelinin doğruluğunu bir derinlik kestirimi veri kümesinde doğrula. Doğrulamada amaçlanan veri kümesi YAML dosyasının kullanılması için data değerini açıkça belirt. Yayımlanan ağırlıklar, dolguyla letterbox uygulanmış görüntüler yerine kare olacak şekilde esnetilmiş görüntüler üzerinde imgsz=768 boyutunda eğitildi; bu nedenle en iyi doğruluk için doğrulama ve tahmin işlemlerini bu boyutta yap. Tahmin, doğrulama ve model.calibrate() girdiyi aynı şekilde esnetir.

Örnek
from ultralytics import YOLO

# Bir model yükle
model = YOLO("yolo26n-depth.pt")  # Resmî bir modeli yükle
model = YOLO("path/to/best.pt")  # özel bir model yükle

# Modeli doğrula
metrics = model.val(data="nyu-depth.yaml")
metrics.delta1  # eşik δ=1.25 içindeki piksel oranı
metrics.abs_rel  # ortalama mutlak göreli hata
metrics.rmse  # kök ortalama kare hata (metre)
metrics.silog  # ölçekten bağımsız logaritmik hata

Tahmin#

Görüntülerde tahmin yapmak için eğitilmiş bir YOLO26n-depth modeli kullan.

Örnek
from ultralytics import YOLO

# Bir model yükle
model = YOLO("yolo26n-depth.pt")  # Resmî bir modeli yükle
model = YOLO("path/to/best.pt")  # özel bir model yükle

# Modelle tahmin yap
results = model("https://ultralytics.com/images/bus.jpg")  # bir görüntü üzerinde tahmin yap

# Sonuçlara eriş
for result in results:
    depth_map = result.depth.data.cpu().numpy()  # torch.Tensor -> NumPy float32, şekil (H, W), metre

predict kipinin tüm ayrıntıları için Tahmin sayfasına bak.

Sonuç Çıktısı#

YOLO derinlik kestirimi, görüntü başına bir Results nesnesi döndürür. Her sonuç, görüntünün tamamına ait yoğun bir kayan noktalı derinlik haritası içerir.

ÖznitelikTürŞekilAçıklama
result.depthDepthMap(H,W)Yoğun piksel başına derinlik haritası.
result.depth.datatorch.Tensor(H,W)Derinlik değerleri metre cinsindendir; NumPy için .cpu().numpy() çağrısı yap.
result.boxes--Örnek kutusu yok.
result.masks--Örnek maskesi yok.

Tüm görevlerde göreve özgü Results alanları için Göreve Göre Tahmin Sonuçları bölümüne bak.

Örnek bölütlemeyle nesne başına derinlik#

Algılanan her nesnenin ne kadar uzakta olduğunu tahmin etmek için örnek bölütlemeyi derinlikle birleştir. Maskelerin derinlik haritasının özgün görüntü çözünürlüğünü paylaşması için her iki modeli de aynı görüntüde retina_masks=True ile çalıştır, ardından her maskenin içindeki geçerli derinlik piksellerinin medyanını al.

Bölütlenen nesne başına medyan derinlik
from ultralytics import YOLO

image = "https://ultralytics.com/images/bus.jpg"
seg = YOLO("yolo26n-seg.pt")(image, retina_masks=True)[0]
depth = YOLO("yolo26n-depth.pt")(image)[0].depth.data  # (H, W) meters

if seg.masks is not None:
    for mask, cls in zip(seg.masks.data.bool(), seg.boxes.cls):
        values = depth[mask & (depth > 0)]  # valid depth pixels inside this mask
        if values.numel():
            print(f"{seg.names[int(cls)]}: {values.median():.2f} m")

Medyan, maske kenarlarındaki arka plan piksellerinden etkilenmez; ancak nesnenin merkezini değil, görünen yüzeyini tanımlar ve doğruluğu modelin derinlik ölçeğine bağlıdır (Derinlik ölçeğini kalibre etme bölümüne bak).

Derinlik haritasını renklendirme#

Ham derinlik haritası metre cinsinden tek kanallı bir kayan noktalı dizidir; hesaplama için kullanışlıdır ancak doğrudan okunması zordur. Bunu renkli bir görüntüye dönüştürmek için ultralytics.utils.plotting içindeki colorize_depth yardımcı işlevini kullan. Bu işlev, (H, W) derinlik dizisini (H, W, 3) BGR uint8 görüntüsüne dönüştürür (geçersiz pikseller <= 0 siyah gösterilir).

result.plot(), bu renklendirmeyi varsayılan ayarlarla (cmap="jet", mode="disparity") giriş görüntüsünün üzerine zaten uygular; bağımsız bir renkli derinlik görüntüsü veya farklı bir renk haritası ya da normalizasyon istediğinde doğrudan colorize_depth çağır.

Tahmin edilen derinlik haritasını renklendir
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

# Yakını sıcak tonlarla renklendir ve kaydet
cv2.imwrite("depth_colored.png", colorize_depth(depth, cmap="spectral"))  # (H, W, 3) BGR uint8

# Kareler arasında aynı rengin aynı mesafeyi göstermesi için aralığı 0-20 m olarak sabitle
cv2.imwrite("depth_metric.png", colorize_depth(depth, vmin=0.0, vmax=20.0, cmap="inferno", mode="metric"))

# Doğrudan Results nesnesinden harmanlanmış katman (cmap="jet", mode="disparity" kullanır)
result.save("depth_overlay.png")

Her renk haritası soğuk/koyu → sıcak/parlak yönünde ilerler. mode hangi ucun yakını göstereceğini belirler; vmin/vmax ise renklerin her zaman aynı mesafeyi göstermesi için kareler arasındaki aralığı sabitler.

Bağımsız değişkenDeğerAçıklama
cmapjet (varsayılan)Yüksek kontrastlı mavi → yeşil → kırmızı; result.plot() paletinin kullandığı renkler.
cmapinfernoSiyah → mor → turuncu → sarı. Algısal olarak tekdüze, renk körlüğüne uygun ve gri tonlamada okunabilir.
cmapspectralKırmızı → sarı → yeşil → mavi (matplotlib Spectral_r).
modedisparity (varsayılan)Ters derinliği (1/d) 2. ve 98. yüzdelik dilimler arasında normalleştirir; sıcak tonlar yakını gösterir ve uzak aykırı değerler bastırılır.
modemetricDerinliği metre cinsinden vmin ile vmax arasında doğrusal olarak normalleştirir; sıcak tonlar uzağı gösterir, böylece renkler gerçek mesafeyi yansıtır.

Dışa aktar#

YOLO26n-depth modelini ONNX, CoreML vb. başka bir biçime aktar

Örnek
from ultralytics import YOLO

# Bir model yükle
model = YOLO("yolo26n-depth.pt")  # Resmî bir modeli yükle
model = YOLO("path/to/best.pt")  # özel bir model yükle

# Modeli dışa aktar
model.export(format="onnx")

Kullanılabilir YOLO26 derinlik kestirimi dışa aktarma biçimleri aşağıdaki tabloda listelenmiştir. format argümanını, yani format='onnx' veya format='engine' değerini kullanarak istediğin biçime aktarabilirsin. Dışa aktarılmış modellerde doğrudan tahmin veya doğrulama yapabilirsin; örneğin yolo predict model=yolo26n-depth.onnx. Dışa aktarma tamamlandığında modeline ilişkin kullanım örnekleri gösterilir.

Biçimformat bağımsız değişkeniModelÜst verilerBağımsız değişkenler
PyTorch-yolo26n-depth.pt✅-
TorchScripttorchscriptyolo26n-depth.torchscript✅imgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-depth.onnx✅imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-depth_openvino_model/✅imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-depth.engine✅imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-depth.mlpackage✅imgsz, dynamic, quantize, nms, batch, device
Apple Core AIcoreaiyolo26n-depth.aimodel✅imgsz, batch, quantize
TF SavedModelsaved_modelyolo26n-depth_saved_model/✅imgsz, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-depth.pb❌imgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-depth_edgetpu.tflite✅imgsz, quantize, opset, data, fraction, device
LiteRTlitertyolo26n-depth.tflite✅imgsz, quantize, batch, data, fraction, device
PaddlePaddlepaddleyolo26n-depth_paddle_model/✅imgsz, batch, device
MNNmnnyolo26n-depth.mnn✅imgsz, 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.onnx✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
Hailohailoyolo26n-depth_hailo_model/✅imgsz, name, quantize, data, fraction, simplify, conf, iou, device
Huawei Ascendascendyolo26n-depth_ascend_model/✅imgsz, batch, name, quantize, opset, simplify, nms, device
AMD Xilinxxilinxyolo26n-depth_xilinx_model/✅imgsz, name, quantize, data, fraction, opset, simplify, device

nms=None, harici NMS için varsayılan olarak ham çıktılar üretir. Kullanılabilir bir NMS içermeyen başlık seçmek için nms=False değerini ayarla; desteklenmeyen biçimler yerel çıktı yoluna döner. Yukarıdaki nms girdileri, nms=True ile NMS içerebilen biçimleri tanımlar.

Ayrıntılı export bilgileri için Dışa Aktarma sayfasına bak.

Sık Sorulan Sorular#

  • Eşleştirilmiş RGB görüntüleri ve 16 bit derinlik PNG'leri ya da metre cinsinden kayan noktalı NPY derinlik haritaları hazırla; ardından images/ dizinine işaret eden bir veri kümesi YAML dosyası oluştur. Yükleyici, yoldaki images ifadesini depth ile değiştirerek derinlik dosyalarını otomatik bulur; .png dosyasını tercih eder ve yoksa .npy dosyasını kullanır.

    Önceden eğitilmiş ağırlıklarla başla ve modelin zaten öğrendiklerini koruması için AdamW ile düşük bir öğrenme oranı kullan (nedenini Kendi verilerinle ince ayar sayfasında görebilirsin):

    Örnek
    from ultralytics import YOLO
    
    # Önceden eğitilmiş bir YOLO26 derinlik modelini yükle
    model = YOLO("yolo26s-depth.pt")
    
    # Özel bir derinlik veri kümesinde ince ayar yap
    results = model.train(
        data="path/to/your_dataset.yaml",
        epochs=20,
        imgsz=640,
        optimizer="AdamW",
        lr0=1e-4,
        warmup_bias_lr=1e-4,
    )

    Kullanılabilir diğer bağımsız değişkenler için Yapılandırma sayfasına bak.

  • Derinlik kestirimi doğrulaması, Depth Anything ve ilgili tekil görüntü derinliği çalışmalarında kullanılan metrik kümesini raporlar:

    • delta1 / delta2 / delta3 — tahmin edilen derinliğin gerçek derinliğe (veya tersine) oranının sırasıyla 1.25, 1.25² ve 1.25³ değerlerinin altında olduğu piksel oranı. Yüksek olması daha iyidir.
    • abs_rel — ortalama mutlak göreli hata. Düşük olması daha iyidir.
    • rmse — metre cinsinden kök ortalama kare hata. Düşük olması daha iyidir.
    • silog — ölçekten bağımsız logaritmik hata. Düşük olması daha iyidir.

    Her tahmin, görüntü başına gerçek değerine göre medyan hizalamasından geçirilir; her metrik o görüntü için son haline getirilir ve görüntü başına bu sonuçların ortalaması doğrulama kümesi genelinde alınır. Böylece geçerli derinlik pikseli sayısından bağımsız olarak her görüntü eşit ağırlık taşır. Gerçek derinlik değeri geçerli 10 pikselden az olan görüntüler atlanır ve bu ortalamaya katılmaz; çünkü bir avuç pikselin medyanını hizalamak anlamsızdır. Sonlu olmayan tahminler ise derinlik sınırlarında puanlanır. Bu yöntem, Depth Anything V2'de kullanılan örnek başına ortalama alma ve 10 piksel alt sınırıyla eşleşir.

  • Derinlik haritası, her değerin metre cinsinden tahmin edilen derinliği temsil ettiği (H, W) şeklinde bir torch.Tensor olarak saklanır (NumPy float32 dizisi için result.depth.data.cpu().numpy() kullan). Tahmin çalıştırdıktan sonra result.depth.data üzerinden erişebilirsin. Harita, giriş görüntüsünün çözünürlüğüne göre hizalanır.

  • Ultralytics YOLO26, NYU Depth V2, KITTI, Hypersim, SUN RGB-D ve ARKitScenes dâhil olmak üzere çeşitli derinlik kestirimi veri kümeleri için yerleşik veri kümesi YAML yapılandırmaları sunar. Tam liste ve biçim ayrıntıları için Derinlik Kestirimi Veri Kümesi Kılavuzu sayfasına bak.

  • Önceden eğitilmiş bir YOLO26 derinlik modelini, değerlendirmede kullanılan veri kümesi YAML dosyasını belirterek doğrula:

    Örnek
    from ultralytics import YOLO
    
    # Önceden eğitilmiş bir modeli yükle
    model = YOLO("yolo26n-depth.pt")
    
    # Modeli doğrula
    metrics = model.val(data="nyu-depth.yaml")
    print("delta1:", metrics.delta1)
    print("abs_rel:", metrics.abs_rel)
    print("rmse:", metrics.rmse)
  • YOLO26 derinlik modelini Python veya CLI ile ONNX biçimine aktar:

    Örnek
    from ultralytics import YOLO
    
    # Önceden eğitilmiş bir modeli yükle
    model = YOLO("yolo26n-depth.pt")
    
    # Modeli ONNX biçimine aktar
    model.export(format="onnx")

    Çeşitli biçimlere dışa aktarma hakkında daha fazla bilgi için Dışa Aktarma sayfasına bak.

Yorumlar