Ultralytics YOLO27: Bekleme listesine katıl.
Get Started
Algılamanın Ötesi: Segmentasyon, Poz, OBB ve Sınıflandırma·Sınıflandır, Birleştir, Gönder·Ders 10/10
Dersorta düzey

Her Görevi Değerlendir ve Dağıtıma Al

Her görevi kendi metriğine ve dağıtım boyutuna göre değerlendir, tüm görevleri tek bir döngüde doğrula ve her görevi doğrulanmış bir tahminle ONNX'e aktar.

Her görevin doğruluk tanımı farklıdır: piksel örtüşmesi, anahtar nokta benzerliği, döndürülmüş kutu IoU'su, top-1 isabeti veya derinlik oranı. Tespit kontrol listesini başka görevlerde de kullanan ekipler, kutu mAP değerine göre eşiklenen segmentasyon modellerini ve ürünün parçası olmayan kutulara göre eşiklenen poz modellerini dağıtıma alır. Eşik değerini geçen bir model de dışa aktarımdan sonra başarısız olabilir: bu derste aynı poz ağırlıkları bir girdi boyutunda 5, diğerinde 3 kişi buluyor; derinlik modelinin mesafeleri ise neredeyse iki katına çıkıyor.

Sonuç

Her görev modeli için eşik metriğini ve imgsz değerini içeren bir sürüm tablosu oluştur; her modeli doğru görevle yeniden yüklenen ve alan içi bir görüntüde doğru tahmin yapan, doğrulanmış bir ONNX dışa aktarımıyla birlikte sun.

Hızlı Başlangıç
Nasıl ilerleyeceğini zaten biliyorsan, işte kısa sürüm.
  1. Segmentasyon için maske mAP50-95, anlamsal segmentasyon için mIoU, poz için poz mAP50-95, OBB için OBB mAP50-95, sınıflandırma için top-1, derinlik için δ1 metriğini eşik olarak kullan.

  2. Öne çıkan sayıları görevin anahtarını kullanarak metrics.results_dict içinden oku ve her sayının yanına imgsz değerini kaydet.

  3. Doğruladığın boyutta model.export(format="onnx", imgsz=...) ile dışa aktar.

  4. Dışa aktarımı YOLO("model.onnx") ile yeniden yükle ve dağıtıma almadan önce modelin kendi alanından bir görüntü üzerinde bir kez tahmin yap.

Uygulamalı

Her görev için bir eşik#

GörevEşik metriğiresults_dict anahtarıPython özniteliğiÖlçüm ölçütü
segmentasyonmaske mAP50-95metrics/mAP50-95(M)metrics.seg.mapörnek başına piksel IoU'su
anlamsal segmentasyonmIoU (+ sınıf başına IoU)metrics/mIoUmetrics.miousınıf başına piksel IoU'su
pozpoz mAP50-95metrics/mAP50-95(P)metrics.pose.mapOKS
obbOBB mAP50-95metrics/mAP50-95(B)metrics.box.mapdöndürülmüş kutu IoU'su
sınıflandırmatop-1 doğruluğumetrics/accuracy_top1metrics.top1doğru en üst sınıf
derinlikδ1 (+ AbsRel)metrics/delta1metrics.delta1gerçek derinliğin 1,25×'i içindeki piksellerin oranı

performans metrikleri kılavuzu her puanı açıklar. Segmentasyon ve poz çalıştırmaları kutu metriklerini de raporlar; bunları tanılama amacıyla kullan — kutu ile maske arasındaki fark, dış hat kalitesine işaret eder — ancak bunlar ürünün kendisi değildir. Eşik taramaları ve karmaşıklık matrisi gibi tespite özgü inceleme yöntemleri Doğrulama ve Tanılama bölümünden kullanılabilir.

Tüm görevleri tek bir döngüde doğrula#

Val modu, eşleşen veri kümesiyle her görevin ağırlıklarını kabul eder; böylece tek bir döngü sürüm tablosunun sayılarını üretir:

from ultralytics import YOLO

runs = {
    "yolo26n-seg.pt": ("coco8-seg.yaml", "metrics/mAP50-95(M)"),
    "yolo26n-sem.pt": ("cityscapes8.yaml", "metrics/mIoU"),
    "yolo26n-pose.pt": ("coco8-pose.yaml", "metrics/mAP50-95(P)"),
    "yolo26n-obb.pt": ("dota8.yaml", "metrics/mAP50-95(B)"),
    "yolo26n-depth.pt": ("depth8.yaml", "metrics/delta1"),
}
for weights, (data, key) in runs.items():
    metrics = YOLO(weights).val(data=data, device="cpu", plots=False, verbose=False)
    print(f"{weights:17s} {key:22s} {metrics.results_dict[key]:.3f}")
yolo26n-seg.pt    metrics/mAP50-95(M)    0.538
yolo26n-sem.pt    metrics/mIoU           0.610
yolo26n-pose.pt   metrics/mAP50-95(P)    0.419
yolo26n-obb.pt    metrics/mAP50-95(B)    0.857
yolo26n-depth.pt  metrics/delta1         0.377

Açıkça bir imgsz belirtilmediğinde her model, eğitildiği boyutta doğrulanır: segmentasyon ve poz için 640, derinlik için 768, anlamsal segmentasyon ve OBB için 1024. Bu önceden eğitilmiş sayıların değeri, kursta daha önceki 320 piksel eğitim çalışmalarınınkinden yüksektir; bunda hem eğitim hem de çözünürlük etkili olmuştur. Dört doğrulama görüntüsü, buradaki tüm sayıları hızlı birer kontrolden ibaret kılar; örneğin derinlik görevi sayfası, tam NYU kıyaslama veri kümesindeki δ1 değerini raporlar. Sınıflandırma özellikle dışarıda bırakılmıştır: sınıflandırıcı dersinde olduğu gibi, ince ayar yaptığın sınıflandırıcıyı kendi klasörlerinde doğrula.

Çözünürlük metriğin bir parçasıdır

Aynı ağırlıklar, farklı imgsz değerlerinde farklı puan alır. Her sayının yanında imgsz değerini kaydet, dağıtacağın boyutta doğrula ve farklı boyutlarda ölçülen sayıları asla karşılaştırma.

Her görevi dışa aktar#

Her görev, aynı Dışa Aktarma modu çağrısıyla ONNX biçimine aktarılır. Görev model meta verilerinde saklandığından YOLO("model.onnx") doğru son işlemeyi uygular. Çalışma zamanı seçenekleri, eşdeğerlik kontrolleri ve TensorRT veya OpenVINO ayarları ONNX'e Aktarma (ve Eşdeğerliği Doğrulama) bölümünde ele alınır; bu döngü her görevin gidiş-dönüş aktarımından sağ çıktığını denetler:

from ultralytics import YOLO

for weights in ["yolo26n-seg.pt", "yolo26n-sem.pt", "yolo26n-pose.pt", "yolo26n-obb.pt", "yolo26n-cls.pt", "yolo26n-depth.pt"]:
    onnx_path = YOLO(weights).export(format="onnx", imgsz=320)
    onnx_model = YOLO(onnx_path)  # task comes from the ONNX metadata
    result = onnx_model("https://ultralytics.com/images/bus.jpg", imgsz=320, verbose=False)[0]
    print(f"{onnx_model.task:9s} {result.verbose()}")
segment   4 persons, 1 bus,
semantic
pose      3 persons,
obb       (no detections),
classify  minibus 0.38, police_van 0.21, trolleybus 0.05, amphibian 0.05, bullet_train 0.03,
depth     depth 4.67-26.91m,

Her dışa aktarım, doğru görevle yeniden yüklendi. Üç sonuç daha yakından incelenmeli:

  • Poz, 320 pikselde 3 kişi buldu; aynı boyutta 640 piksel kullanan PyTorch çalıştırması 5 kişi bulmuştu.
  • Derinlik modeli sahneyi 4,7–26,9 m olarak okudu; aynı ağırlıklar doğal boyutları olan 768 pikselde 2,1–14,9 m değerlerini vermişti.
  • OBB, bir sokak fotoğrafında hiçbir şey bulmadı — bu, hava görüntüleri üzerinde eğitilmiş bir model için beklenen davranıştır; dışa aktarım hatası değildir.

imgsz=320 boyutunda PyTorch, ONNX ile aynı poz ve derinlik sayılarını verir; dolayısıyla ikisi de dışa aktarım hatası değildir: sonucu değiştiren girdi boyutudur. Doğruladığın imgsz boyutunda dışa aktar. Anlamsal sonuçlarda nesne başına özet satırı bulunmadığından bunun yerine result.semantic_mask değerini kontrol et.

Her dışa aktarımı kendi alanında duman testine tabi tut

Bir dışa aktarımın bozuk olduğuna karar vermeden veya onu kullanıma sunmadan önce, dışa aktarılan her modelle eğitildiği verilere benzeyen bir görüntü üzerinde bir kez tahmin yap — COCO modelleri için sokak sahneleri, OBB için hava görüntüleri, derinlik için doğru ölçekte iç veya sokak sahneleri.

Kendi son işlem kodunu yazıyorsan, dışa aktarım günlüğündeki imgsz=320 boyutunda ONNX'in ham çıktıları şunlardır:

GörevONNX çıktı boyutlarıİçerik
segmentasyon(1, 116, 2100) ve (1, 32, 80, 80)kutular + 80 sınıf puanı + 32 maske katsayısı; maske prototipleri
anlamsal segmentasyon(1, 320, 320)sınıf haritası; argmax zaten grafikte uygulanmıştır
poz(1, 56, 2100)kutular + 1 puan + 17 × 3 anahtar nokta değeri
obb(1, 20, 2100)kutular + 15 sınıf puanı + 1 açı
sınıflandırma(1, 1000)sınıf olasılıkları
derinlik(1, 1, 320, 320)piksel başına metre cinsinden derinlik

Ultralytics Platform'da model sayfası, aynı biçimleri oluşturan Dışa Aktarma sekmesinin üzerinde, göreve özgü metrikleri (segmentasyon modeli için maske mAP gibi) gösterir:

Segmentasyon modeli için Ultralytics Platform model sayfası; Dışa Aktarma sekmesinin üzerinde maske mAP50, mAP50-95, kesinlik ve duyarlılık kartları; sekmede TorchScript, ONNX, OpenVINO, TensorRT ve CoreML biçimleri listeleniyor

ONNX, farklı sistemler arasında aktarım noktasıdır: dışa aktarılan tek bir dosya ONNX Runtime'ta çalışır veya başka çalışma zamanlarına dönüştürülebilir.

Aktarım biçimi olarak ONNX: PyTorch, TensorFlow, Keras ve diğer çerçevelerdeki modeller ONNX'e aktarılır ve ONNX Runtime'ta veya başka bir çerçevede yüklenir

Dağıtım kontrol listesi#

  • Yukarıdaki tablodaki eşik metriği, ayrılmış bir veri kümesinde dağıtım imgsz değerinde hedefini karşılıyor.
  • Dışa aktarılan model beklenen task ile yeniden yükleniyor ve sabit bir görüntü kümesindeki tahminleri PyTorch tahminleriyle eşleşiyor.
  • Her göreve özgü kod yolu boş sonuçları işliyor: masks is None, sıfır anahtar nokta, sıfır OBB.
  • Aşağı akıştaki sayılar (alanlar, açılar, mesafeler, sınıf olasılıkları) kaydediliyor; böylece Gözlemlenebilirlik ve Kayma bölümünde açıklandığı gibi bu değerlerdeki değişimi izleyebilirsin.

Eşik karşılanmadığında, "veriye geri dönmek" genellikle şu üç kaldıraçtan birini kullanmak anlamına gelir:

mAP değerini iyileştirmenin üç yolu: veri kalitesi, model optimizasyonu ve etiketleme süreci

Önce veri kalitesini ve etiketleme sürecini düzelt — 2. ve 6. derslerdeki etiket kontrolleri başlamak için en düşük maliyetli seçenektir — ve modeli ancak veriler temiz olduğunda değiştir.

Dene

Bu kursta eğittiğin görevlerden ikisini seç. Her biri için dağıtım imgsz değerindeki eşik metriğini içeren bir sürüm tablosu satırı yaz; eğitilmiş best.pt modelini bu boyutta ONNX'e aktar, yeniden yükle ve alan içinden bir görüntüde makul bir tahmin yaptığını doğrula.

Tamamlanma ölçütü
Aşağıdakilerin tümü doğru olduğunda dersi tamamlamış olursun.
  • Sürüm tablon, her iki model için doğru eşik metriğini, bu metriğin değerini ve imgsz değerini listeliyor.

  • Her iki model de ONNX'e aktarıldı ve beklenen task ile yeniden yüklendi.

  • Her dışa aktarım, kendi alanından bir görüntü üzerinde makul bir tahmin üretti.

Çözümü göster
from ultralytics import YOLO

checks = {
    "runs/segment/train/weights/best.pt": ("coco8-seg.yaml", "metrics/mAP50-95(M)", "https://ultralytics.com/images/bus.jpg"),
    "runs/obb/train/weights/best.pt": ("dota8.yaml", "metrics/mAP50-95(B)", "https://ultralytics.com/images/boats.jpg"),
}
for weights, (data, key, image) in checks.items():
    model = YOLO(weights)
    gate = model.val(data=data, imgsz=320, plots=False, verbose=False).results_dict[key]
    onnx_model = YOLO(model.export(format="onnx", imgsz=320))
    result = onnx_model(image, imgsz=320, verbose=False)[0]
    print(f"{onnx_model.task:8s} {key} @320 = {gate:.3f} | ONNX: {result.verbose()}")

runs/... yollarını eğitim çalıştırmalarının yazdırdığı klasörlere (Results saved to ...) göre ayarla. 2. ve 7. derslerdeki tek dönemlik çalıştırmalarla:

segment  metrics/mAP50-95(M) @320 = 0.377 | ONNX: 4 persons, 1 bus,
obb      metrics/mAP50-95(B) @320 = 0.832 | ONNX: 185 ships, 3 harbors,
ModelEşik metriğiDeğergörüntü boyutuONNX
segmentasyonmaske mAP50-950.377320segment olarak yeniden yüklenir; otobüsü ve 4 kişiyi bulur
obbOBB mAP50-950.832320obb olarak yeniden yüklenir; 185 gemi ve 3 liman bulur

Her kontrol, kendi alanından bir görüntü kullanır: OBB modeline sokak sahnesi değil, hava görüntüsünden liman fotoğrafı verilir. Her iki satır da dışa aktarım kontrolünü geçer; ancak modellerden hiçbiri dağıtıma hazır değildir, çünkü dört doğrulama görüntüsüyle yapılan tek dönemlik eğitim bir hızlı kontroldür, eşik değerlendirmesi değildir.

Sırada ne var

Sertifikanı almak için kurs sınavına gir, ardından bu modelleri optimize edilmiş çalışma zamanları, izleme ve gözlemleme özellikleriyle dağıtıma almak üzere Üretimde Ultralytics YOLO ile devam et.

İlerlemeni kaydetmek için giriş yap