Bir Görüntüde Tahmin Yap
Önceden eğitilmiş bir YOLO26 modelini Python'dan çalıştır, sonuçlardan sınıfları, güven skorlarını ve piksel kutularını oku ve en çok kaçırılan nesneleri bulmaya yarayan parametreleri ayarla.
Bir nesne algılayıcının gerçek dünyadaki her kullanımı — raftaki stokları saymak, bulanıklaştırmak için yüzleri kırpmak, kutuları bir JSON API'sine göndermek — sonuç nesnesini doğru okumakla başlar. Bir ayrıntıyı bile yanlış yaparsan, örneğin sınıf adlarını bir tensörle indekslersen, uygulaman ilk görüntüde çöker.
Önceden eğitilmiş bir YOLO26 algılama modeli 80 COCO sınıfını zaten tanır. Bu derste Python'dan Tahmin modunu çalıştıracak, sonuçlardaki tüm yararlı alanları alacak ve kaçırılan nesneler, yinelenen kutular ve küçük nesneler için hangi parametreyi değiştirmen gerektiğini öğreneceksin. Daha sonra kendi eğittiğin modelin sonuçları da aynı nesne biçiminde döner.
Uygulamalı
Tahmin Yap ve Her Tespiti Yazdır#

Modeli bir kaynak üzerinde çağırmak Tahmin modunu çalıştırır ve her görüntü için bir Results nesnesi içeren bir liste döndürür. Tek bir görüntü varsa results[0] alanını oku.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
for box in result.boxes:
name = result.names[int(box.cls)]
conf = float(box.conf)
x1, y1, x2, y2 = box.xyxy[0].tolist()
print(f"{name:>8} {conf:.2f} ({x1:.0f}, {y1:.0f}) -> ({x2:.0f}, {y2:.0f})")
result.save("bus_annotated.jpg")Olağan günlük satırından sonra predict.py çıktısından alınmış gerçek sonuç:
bus 0.88 (0, 230) -> (803, 751)
person 0.87 (49, 398) -> (240, 902)
person 0.86 (223, 405) -> (345, 861)
person 0.85 (670, 395) -> (810, 880)
person 0.65 (0, 553) -> (60, 871)Şöyle okuyabilirsin:
bus 0.88: sınıf adı ve güven skoru. Kutular, güven skoruna göre en yüksekten en düşüğe sıralanır.(0, 230) -> (803, 751): orijinal 810×1080 görüntüde sol üst ve sağ alt köşelerin piksel koordinatları; başlangıç noktası sol üst köşedir. Bunlarla doğrudan kırpma veya çizim yapabilirsin.(0, 553)konumundakiperson 0.65: sol kenardan kesilmiş beşinci kişi daha düşük bir skor alır. Kısmen görünen nesneler genellikle böyle olur.
result.save() açıklama eklenmiş görüntüyü yazar; result.show() ise bu görüntüyü bir pencerede açar.
Sonuçta Neler Olduğunu Bil#
Her görev aynı Results türünü döndürür; yalnızca doldurulan alanlar değişir. Tüm alanlar Python kullanım kılavuzunda yer alır.
| Öznitelik | İçerik |
|---|---|
boxes | Tespitler: piksel cinsinden xyxy, normalize edilmiş merkez biçiminde xywhn, conf, cls ve izleme sırasında id |
masks, keypoints, obb, probs | Segmentasyon, poz, OBB ve sınıflandırma modellerinin çıktıları (algılama modeli için None) |
names | Sınıf indeksini → sınıf adına eşleyen sözlük |
orig_img, orig_shape | NumPy dizisi olarak giriş görüntüsü ve yüksekliği × genişliği |
speed | Ön işleme, çıkarım ve son işleme süreleri (ms) |
path, save_dir | Girdinin kaynağı ve çıktıların yazıldığı konum |
Nesne algılama için çoğunlukla boxes, yani sınırlayıcı kutular gerekir. result.summary(), aynı tespitleri JSON API'sine göndermeye hazır, yalın sözlüklerden oluşan bir liste olarak döndürür.
Tahmin Ayarlarını Yap#
Varsayılan değerler çoğu görüntü için uygundur. Uygun olmadıklarında her seferinde tek bir parametreyi değiştir:
| Gördüğün sorun | Argüman | Varsayılan | Değiştir |
|---|---|---|---|
| Kaçırılanlar: görebildiğin bir nesne için kutu çizilmemesi | conf | 0.25 | Düşür; örneğin 0.1 |
| Yanlış pozitifler: boş alanlarda kutular | conf | 0.25 | Yükselt; örneğin 0.5 |
| Tek nesnenin üzerinde iki kutu | iou | 0.7 | Düşür: yinelenen kutuları birleştirmek için NMS örtüşme (IoU) eşiğini |
| Küçük ve uzaktaki nesnelerin kaçırılması | imgsz | 640 | Yükselt; örneğin 1280 (32'nin katına yuvarlanır) |
| Yalnızca bazı sınıflar önemli | classes | tümü | örneğin insanlar için classes=[0] |
| Yanlış donanım | device | otomatik | cpu, mps veya 0 gibi bir GPU indeksi |
Güven skoru yalnızca sayıyı değil, sonucu da değiştirir. Aynı otobüs görüntüsünde:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model("https://ultralytics.com/images/bus.jpg", conf=0.5, classes=[0]) # 4 persons
model("https://ultralytics.com/images/bus.jpg", conf=0.1) # 5 kişi, 1 otobüs, 1 dur işareticonf=0.1 değerinde model, emin olamadığı bir dur işaretini de bildirir. conf değerini düşürmek, modelin neredeyse bulduğu nesneleri görmenin en hızlı yoludur. Diğer tüm parametreler yapılandırma başvurusunda yer alır.
Tahmin boş döndüğünde şu adımları sırayla uygula:
Birden Fazla Görüntüde Çalıştır#
Bir liste, klasör veya "photos/*.jpg" gibi bir glob deseni ver. Tahmin varsayılan olarak batch=1 değerini kullanır; birden fazla görüntüyü aynı anda modelden geçirmek için batch değerini ayarla. Bu, GPU'da çok daha hızlıdır:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
images = ["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/zidane.jpg"]
for result in model(images, batch=2):
print(result.path, len(result.boxes), result.verbose())image0.jpg 5 4 persons, 1 bus,
image1.jpg 3 2 persons, 1 tie,Bu Hatalardan Kaçın#
Belirti: KeyError: tensor([5.]). Neden: box.cls ve box.conf PyTorch tensörleridir; result.names ise anahtarları int olan bir sözlüktür. Çözüm: önce dönüştür: result.names[int(box.cls)], float(box.conf), box.xyxy[0].tolist().
Belirti: işlevin içinde YOLO("yolo26n.pt") çağıran bir yardımcı yavaş çalışıyor. Dizüstü bilgisayarın CPU'sunda her görüntüde yeniden yükleme 71 ms sürerken model bir kez yüklendiğinde 25 ms sürdü. Çözüm: modeli başlangıçta bir kez oluştur ve her görüntü için yeniden kullan.
model(list_or_folder), döndürmeden önce her Results nesnesini bellekte toplar. Büyük klasörler ve tüm videolar için stream=True parametresini geçir ve döngüye al: sonuçlar teker teker gelir. Video dersi bunu ayrıntılı olarak ele alıyor.
Çözümü göster
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # load once
images = ["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/zidane.jpg"]
for result in model(images, verbose=False):
top3 = sorted(result.summary(), key=lambda d: d["confidence"], reverse=True)[:3]
print(f"{result.path}: {len(result.boxes)} detections")
for d in top3:
print(f" {d['name']:>8} {d['confidence']:.2f}")image0.jpg: 5 detections
bus 0.90
person 0.85
person 0.85
image1.jpg: 3 detections
person 0.89
person 0.79
tie 0.59summary() zaten yalın adlar ve kayan noktalı sayılar döndürür, bu yüzden dönüştürülecek tensör yoktur. Görüntü listesi tek bir ortak boyuta doldurulduğundan güven skorları predict.py değerinden biraz farklıdır. conf=0.1 değerinde bus.jpg bir dur işareti ekler.