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.
Uygulamalı
Algılayıcı ne döndürür?#

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,persondeğeridir;5isebusdeğ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:
| Öznitelik | Biçim | Tipik kullanım |
|---|---|---|
boxes.xyxy | Köşe pikselleri (x1, y1, x2, y2) | Kırpma, çizim, çakışma kuralları |
boxes.xywh | Merkez pikselleri ve genişlik ile yükseklik | Boyut filtreleri, hareket |
boxes.xyxyn | 0–1 aralığında normalize edilmiş köşeler | Çözünürlük değişikliklerinde de geçerli kurallar |
boxes.xywhn | 0–1 aralığında normalize edilmiş merkez ve boyut | YOLO 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:
conf | bus.jpg üzerindeki kutular |
|---|---|
| 0.10 | 7 |
| 0.25 | 5 |
| 0.50 | 5 |
| 0.75 | 4 |
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ı.

iou | bus.jpg üzerindeki kutular | Etki |
|---|---|---|
| 0.3 | 5 | Katı: örtüşen kutular birleştirilir |
| 0.7 | 5 | Varsayılan |
| 0.95 | 8 | Esnek: 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ı raporluyorsun | Doğ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 kayboluyor | iou değerini yükselt; ör. 0.7 → 0.8 |
| Aynı nesne için iki kutu çıkıyor | iou değerini düşür |
| Sınıfların zorluk düzeyleri farklıdır | Gereken 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#
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 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.
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#
| Hata | Sorun ne? | Tipik çözüm |
|---|---|---|
| Doğru sınıf, gevşek kutu | Konumlandırma | Daha sıkı ve tutarlı kutu kuralları; küçük nesneler için daha yüksek imgsz |
| İyi kutu, yanlış sınıf | Sınıflandırma | Karıştırılan sınıf çifti için daha fazla örnek kullan veya sınıfları birleştir |
| Hiç kutu yok | Duyarlılık | Bu koşula ilişkin daha fazla örnek: aydınlatma, boyut, örtülme |
| Arka planda kutu | Kesinlik | Modeli 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.
Çö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.