Ultralytics YOLO27: Bekleme listesine katıl.
Get Started
İlk YOLO modelini eğit·Tahmin·Ders 2/10
Dersbaşlangıç düzeyi

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.

Sonuç

Görüntülerde YOLO26 çalıştıran, her tespitin sınıf adını, güven skorunu ve piksel kutusunu yazdıran bir Python betiği yazabilir ve hangi tür kaçırılan nesne için hangi parametreyi ayarlaman gerektiğini bilirsin.

Hızlı Başlangıç
Nasıl ilerleyeceğini zaten biliyorsan, işte kısa sürüm.
  1. Bir kez yükle: model = YOLO('yolo26n.pt'); ardından result = model(source)[0].

  2. result.boxes üzerinde döngü kur; int(box.cls), float(box.conf), box.xyxy[0].tolist() ile dönüştür.

  3. Sınıf indekslerini adlara result.names[int(box.cls)] ile eşle.

  4. Her çağrıda conf, iou, imgsz ve classes parametrelerini ayarla.

Uygulamalı

Tahmin Yap ve Her Tespiti Yazdır#

Sahil kenarındaki bir yaya yolunda Ultralytics YOLO tespitleri: insanların, bisikletlerin, bir köpeğin ve arabaların çevresinde güven skorları bulunan etiketli kutular

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) konumundaki person 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
boxesTespitler: piksel cinsinden xyxy, normalize edilmiş merkez biçiminde xywhn, conf, cls ve izleme sırasında id
masks, keypoints, obb, probsSegmentasyon, poz, OBB ve sınıflandırma modellerinin çıktıları (algılama modeli için None)
namesSınıf indeksini → sınıf adına eşleyen sözlük
orig_img, orig_shapeNumPy 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_dirGirdinin 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 sorunArgümanVarsayılanDeğiştir
Kaçırılanlar: görebildiğin bir nesne için kutu çizilmemesiconf0.25Düşür; örneğin 0.1
Yanlış pozitifler: boş alanlarda kutularconf0.25Yükselt; örneğin 0.5
Tek nesnenin üzerinde iki kutuiou0.7Düşür: yinelenen kutuları birleştirmek için NMS örtüşme (IoU) eşiğini
Küçük ve uzaktaki nesnelerin kaçırılmasıimgsz640Yükselt; örneğin 1280 (32'nin katına yuvarlanır)
Yalnızca bazı sınıflar önemliclassestümüörneğin insanlar için classes=[0]
Yanlış donanımdeviceotomatikcpu, 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şareti

conf=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#

Adları tensörle indekslemek

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().

Her çağrıda modeli yüklemek

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.

Yüzlerce görüntü veya herhangi bir video mu? Akış olarak işle

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.

Dene

top3.py dosyasını yaz: yolo26n.pt dosyasını bir kez yükle, bus.jpg, zidane.jpg ve kendi çektiğin bir fotoğraf üzerinde çalıştır; her görüntünün tespit sayısını ve güven skoru en yüksek üç sınıfını yazdır. Ardından en az tespit bulunan görüntüyü conf=0.1 değerinde yeniden çalıştır ve neyin göründüğünü tek cümleyle yaz.

Tamamlanma ölçütü
Aşağıdakilerin tümü doğru olduğunda dersi tamamlamış olursun.
  • Betiğin her görüntü için tespit sayısını ve güven skorlarıyla birlikte en iyi 3 sınıfı, herhangi bir KeyError olmadan yazdırır.

  • Bir görüntüyü conf=0.25 ve conf=0.1 değerlerinde karşılaştırdın ve nelerin değiştiğini not ettin.

  • Kaçırılan nesneler, yinelenen kutular ve küçük nesneler için hangi parametreyi değiştireceğini söyleyebilirsin.

Çö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.59

summary() 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.

Sırada ne var

En küçük modeli kullandın. Sırada projenin hangi YOLO26 boyutunu gerçekten eğitip dağıtacağına karar vermek var.

İlerlemeni kaydetmek için giriş yap