Ultralytics YOLO27: Bekleme listesine katıl.
Get Started
Bilgisayarlı Görünün Temelleri·Görev Seç·Ders 3/10
Dersbaşlangıç düzeyi

Nesne Algılamayı Anla

Algılayıcı çıktısını (sınıf, kutu, güven) oku ve güven ile IoU eşiklerini her hatanın maliyetine göre belirle.

Üretimdeki görüntü işleme sistemlerinin çoğu, üzerine mantık eklenmiş algılama sistemleridir: sayaçlar, takipçiler, bölge uyarıları, gizlilik bulanıklaştırmaları. Bunlardan biri yanlış çalıştığında nedeni genellikle model değil, bilinçli olarak belirlenmemiş bir eşiktir. Algılayıcının tam olarak ne döndürdüğünü ve bu listeyi şekillendiren iki ayarı bil; böylece bunların üzerine kurulan neredeyse her şeyi hata ayıklayabilirsin.

Sonuç

YOLO26 algılamalarını kodda oku ve kaçırmanın yanlış alarm vermeye kıyasla maliyetine göre conf ve iou değerlerini seç.

Hızlı Başlangıç
Nasıl ilerleyeceğini zaten biliyorsan, işte kısa sürüm.
  1. Her algılama bir sınıftan, bir kutudan ve bir güven puanından oluşur.

  2. conf zayıf kutuları eler (varsayılan 0.25); iou, NMS'nin iki kutuyu ne zaman yinelenen olarak değerlendireceğini belirler (varsayılan 0.7).

  3. Kaçırmalar pahalıya mı mal oluyor? conf değerini düşür. Yanlış alarmlar görünür mü? Değeri yükselt.

  4. Komşu nesneler kayboluyor mu? iou değerini yükselt.

  5. Güven puanı kutuları sıralar; kalibre edilmiş bir olasılık değildir.

Uygulamalı

Algılayıcı ne döndürür?#

Ultralytics YOLO algılamalarının yer aldığı kıyı şeridindeki yaya yolu: sınıfı ve güven puanı etiketlenmiş insanlar, iki bisikletli, bir köpek ve iki otomobil

Görüntüdeki her etiket tek bir çıktı satırına karşılık gelir: bir sınıf adı, bir güven puanı ve nesneyi çevreleyen kutu. Bir algılama modeli tam olarak bu listeyi döndürür:

  • Sınıf — result.names üzerinden bir ada eşlenen tamsayı dizini (0, person değeridir; 5 ise bus değeridir).
  • Kutu — nesnenin konumunu belirten dört sayı; xyxy, sol üst ve sağ alt köşeleri piksel cinsinden verir.
  • Güven — algılamaları sıralamak ve filtrelemek için kullanılan, 0 ile 1 arasında bir puan.

Sayım, uyarı verme, takip ve bulanıklaştırma, bu satırların üzerine yazacağın kodlardır.

from ultralytics import YOLO

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

for box in result.boxes:
    name = result.names[int(box.cls)]
    x1, y1, x2, y2 = box.xyxy[0].tolist()
    print(f"{name:8} conf={float(box.conf):.2f} box=({x1:.0f}, {y1:.0f}, {x2:.0f}, {y2:.0f})")
bus      conf=0.88 box=(0, 230, 803, 751)
person   conf=0.87 box=(49, 398, 240, 902)
person   conf=0.86 box=(223, 405, 345, 861)
person   conf=0.85 box=(670, 395, 810, 880)
person   conf=0.65 box=(0, 553, 60, 871)

Satır satır: otobüs kadrajın sol kenarından taştığı için otobüs kutusu x=0 noktasından başlıyor; üç kişinin puanı 0.85–0.87; sol kenarda kesilmiş dördüncü kişinin puanı yalnızca 0.65 — model vücudun yarısını görüyor. Kadrajın kenarında kesilmiş nesnelerin düşük güven puanı alması normaldir ve eşik etkisini ilk burada gösterir.

Her kutu dört biçimde gelir; sonraki aşamadaki kodunun beklediği biçimi kullan:

ÖznitelikBiçimTipik kullanım
boxes.xyxyKöşe pikselleri (x1, y1, x2, y2)Kırpma, çizim, çakışma kuralları
boxes.xywhMerkez pikselleri ve genişlik ile yükseklikBoyut filtreleri, hareket
boxes.xyxyn0–1 aralığında normalize edilmiş köşelerÇözünürlük değişikliklerinde de geçerli kurallar
boxes.xywhn0–1 aralığında normalize edilmiş merkez ve boyutYOLO etiket dosyaları

Adaylardan son listeye#

Model, her nesne için dahili olarak çok sayıda aday kutuya puan verir. İki filtre bunları gördüğün listeye dönüştürür:

Güven filtresi. conf, eşiğin altındaki kutuları eler; tahmin için varsayılan değer 0.25'tir. Otobüs görüntüsünde sayım hızla değişir:

confbus.jpg üzerindeki kutular
0.107
0.255
0.505
0.754

Yinelenenleri filtreleme. Maksimum olmayanları bastırma (NMS), güven puanı en yüksek kutuyu tutar ve aynı sınıftaki, bu kutuyla iou değerinden (varsayılan 0.7) fazla çakışan diğer kutuları eler. Çakışma, kesişimin birleşime oranı olarak ölçülür: ortak alanın toplam birleşik alana oranı.

Bir kuş üzerinde kesişimin birleşime oranı: çakışan tahmin ve gerçeklik kutuları ile eşleşen maskeler; IoU, çakışan alanın birleşim alanına oranıdır

ioubus.jpg üzerindeki kutularEtki
0.35Katı: örtüşen kutular birleştirilir
0.75Varsayılan
0.958Esnek: birbirine çok benzeyen kutular korunur

Eşikteki değerleri hata maliyetine göre seç#

Eğer…O zaman…
Bir nesneyi kaçırmanın maliyeti yüksekse (güvenlik uyarıları, kusurlar)conf değerini düşür ve bazı yanlış alarmları kabul et
Yanlış alarm kullanıcılar tarafından görünüyorsa (arama, etiketleme)conf değerini yükselt
Sayıları raporluyorsunDoğrulama görüntülerinde conf değerini farklı eşiklerle dene ve sayım hatası en düşük olanı seç
Kalabalıkta gerçek komşu nesneler kayboluyoriou değerini yükselt; ör. 0.7 → 0.8
Aynı nesne için iki kutu çıkıyoriou değerini düşür
Sınıfların zorluk düzeyleri farklıdırGereken en düşük conf değeriyle tahmin yap, ardından kodda sınıf başına filtre uygula

Depo güvenliği izleme, düşük eşik kullanılan klasik bir örnektir; Tahmin modu tüm çıkarım bağımsız değişkenlerini listeler.

Yaygın Hatalar#

Güveni olasılık olarak yorumlamak

Belirti: "model bunun bir otobüs olduğundan %88 emin" denmesi ve eşiklerin sezgiye göre seçilmesi. Çözüm: güveni bir sıralama puanı olarak ele al. YOLO26 içinde tek bir puan hem "bir nesne var" hem de "bu sınıfa ait" durumlarını kapsar ve kalibre edilmemiştir — eşiği sayının anlamına göre değil, doğrulama verilerinden seç.

İki komşudan biri eksik mi? NMS'yi kontrol et

İki kişi omuz omuza durduğunda kutuları büyük ölçüde üst üste gelir ve NMS gerçek bir kişiyi "yinelenen" olarak silip atabilir. iou değerini artırırsan ikinci kutu geri gelir. YOLO26 ayrıca hiç NMS gerektirmeyen uçtan uca bir başlık da sunar; bunu kullanmak için nms=False değerini ilet.

Tek bir görüntüde ayar yapmak

Belirti: demo görüntüsünde kusursuz görünen bir eşik, gerçek kamerada başarısız oluyor. Çözüm: eşikleri dağıtım kamerasından alınan bir doğrulama kümesinde tara; tek bir görüntü sana yalnızca ayarların ne işe yaradığını gösterir.

Yanılmanın dört yolu#

HataSorun ne?Tipik çözüm
Doğru sınıf, gevşek kutuKonumlandırmaDaha sıkı ve tutarlı kutu kuralları; küçük nesneler için daha yüksek imgsz
İyi kutu, yanlış sınıfSınıflandırmaKarıştırılan sınıf çifti için daha fazla örnek kullan veya sınıfları birleştir
Hiç kutu yokDuyarlılıkBu koşula ilişkin daha fazla örnek: aydınlatma, boyut, örtülme
Arka planda kutuKesinlikModeli yanıltan şeyin zor negatif örnek görüntüleri

Tanıyı hızlandıran iki liste vardır: güveni düşük doğru pozitifler (model gerçek nesnelerden emin değildir) ve güveni yüksek yanlış pozitifler (model yanlış şeyden emindir). Bu listeler farklı çözümlere işaret eder.

Dene

Çözümü conf=0.05 ile çalıştır ve kaydedilen görüntüyü aç. 0.5'in altındaki her kutuyu doğru ya da yanlış pozitif olarak işaretle ve her yanlış pozitifin neden oluştuğunu not et. Ardından bu kameradaki yaya sayacı için kullanacağın conf değerini, gerekçesini açıklayan tek bir cümleyle birlikte yaz.

Tamamlanma ölçütü
Aşağıdakilerin tümü doğru olduğunda dersi tamamlamış olursun.
  • bus.jpg üzerindeki 0.5'in altındaki her kutunun yer aldığı, her birinin nedeni belirtilerek doğru ya da yanlış pozitif olarak işaretlendiği bir listen var.

  • Yaya sayacı için bir conf değeri ve bu değerin önlediği hata türünü yazdın.

  • iou değerini yükseltmenin bastırılmış bir komşu nesneyi neden geri getirdiğini IoU tablosuyla açıklayabilirsin.

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

model = YOLO("yolo26n.pt")
result = model("https://ultralytics.com/images/bus.jpg", conf=0.05, save=True, verbose=False)[0]

for box in sorted(result.boxes, key=lambda b: -float(b.conf)):
    name, conf = result.names[int(box.cls)], float(box.conf)
    x1, y1, x2, y2 = box.xyxy[0].tolist()
    print(f"{conf:.2f} {name:10} ({x1:.0f}, {y1:.0f}, {x2:.0f}, {y2:.0f})")
0.88 bus        (0, 230, 803, 751)
0.87 person     (49, 398, 240, 902)
0.86 person     (223, 405, 345, 861)
0.85 person     (670, 395, 810, 880)
0.65 person     (0, 553, 60, 871)
0.18 person     (0, 600, 40, 871)
0.12 stop sign  (0, 252, 35, 326)
0.08 handbag    (43, 732, 78, 812)
0.07 skateboard (669, 822, 808, 881)
0.06 handbag    (225, 634, 291, 705)

0.5'in altındaki her kutu yanlış pozitiftir. 0.18 person değeri, sol kenarda kesilmiş 0.65 puanlı kişiyi yineliyor. 0.12 stop sign değeri, sınıfı yanlış atanmış gerçek bir trafik levhasına ait. El çantaları ve kaykay, ellerin ve ayakkabıların üzerinde yer alıyor. Her gerçek nesnenin puanı 0.6'nın üzerinde; bu nedenle conf=0.5, yaya sayacı için dört kişinin tamamını tutup tüm gürültüyü eliyor ve çift sayımı önlüyor. Kullanıma almadan önce gerçek kameradan alınmış bir doğrulama kümesinde bunu doğrula: 0.65 puanlı ve görüntüde kesilmiş kişi, gerçek nesnelerin sınıra ne kadar yaklaşabileceğini gösteriyor.

Sırada ne var

Sırada: bir dikdörtgenin yeterli olmadığı ve nesnenin tam şekline ihtiyaç duyduğun durum.

İlerlemeni kaydetmek için giriş yap