Doğrula ve Teşhis Et
best.pt dosyasını bir başlangıç değeriyle karşılaştırarak doğrula, karışıklık matrisini, sınıf başına değerleri ve tahmin görüntülerini incele ve bunları belirli bir düzeltme listesine dönüştür.
Tek bir mAP değeri, modelin ne kadar yanlış yaptığını söyler; neyi yanlış yaptığını değil. Küçük nesnelerin kaçırılması, iki sınıfın birbiriyle karıştırılması ve gevşek kutular mAP'i düşürür; her biri farklı bir düzeltme gerektirir. Yanlış tahminde bulunursan bir haftanı yanlış verileri toplamaya harcarsın.
Bu derste best.pt üzerinde Val modunu çalıştıracak, başlangıç değeriyle karşılaştıracak ve bir sonraki tur için düzeltme listesini yazabilene kadar karışıklık matrisini ve tahmin görüntülerini inceleyeceksin. Performans metrikleri kılavuzu, konunun kapsamlı açıklamasını sunar.
Uygulamalı
Uygulamalı Örnek: best.pt Dosyasını Doğrula#
from ultralytics import YOLO
model = YOLO("runs/detect/pills_v1/weights/best.pt")
metrics = model.val(data="my_dataset/data.yaml")
print(f"precision {metrics.box.mp:.3f} recall {metrics.box.mr:.3f}")
print(f"mAP50 {metrics.box.map50:.3f} mAP50-95 {metrics.box.map:.3f}")val.py komutundan gerçek çıktı:
precision 0.970 recall 0.957
mAP50 0.977 mAP50-95 0.659Grafikler yeni bir runs/detect/val klasörüne kaydedilir (ardından val-2, ...). Değerleri başlangıç değerinin yanına yaz:
| Model | mAP50 | mAP50-95 |
|---|---|---|
Önceden eğitilmiş yolo26n.pt (hap sınıfı yok) | 0.001 | 0.0002 |
pills_v1 (10 epoch, imgsz 320, CPU) | 0.977 | 0.659 |
Sayılar ne söylüyor:
- Precision 0.970, recall 0.957: dengeli. Az sayıda yanlış alarm ve az sayıda kaçırma var.
- mAP50 0.977: örtüşme koşulu gevşek olduğunda model neredeyse tüm hapları buluyor.
- mAP50-95 0.659: örtüşme koşulu katı olduğunda kutuların çoğu yeterince sıkı değil. Bu kadar büyük bir fark, veri eksikliğinden ziyade konumlandırma sorununa işaret ediyor — daha fazla epoch, daha büyük bir
imgszveya daha sıkı etiketler.
precision, recall ve mAP arasındaki ödünleşimleri öğrenmek için Tespit Metriklerini Dürüstçe Okuma sayfasına bak.
Hangi Sorunun Yanıtını Hangi Dosyanın Verdiğini Öğren#
| Soru | Dosya |
|---|---|
| Hangi sınıflar birbiriyle karıştırılıyor, hangileri kaçırılıyor? | confusion_matrix_normalized.png |
| Her sınıf precision ile recall arasında nasıl bir ödünleşim gösteriyor? | BoxPR_curve.png |
| Hangi confidence eşiğiyle dağıtıma almalısın? | BoxF1_curve.png: zirve noktası iyi bir başlangıç conf değeridir |
| Hatalar nasıl görünüyor? | val_batch0_labels.jpg ile val_batch0_pred.jpg |
| Model aşırı öğreniyor mu? | Eğitim klasöründeki results.png |
Karışıklık Matrisini Oku#

Karışıklık matrisi, en yararlı tek tanı aracıdır. Ultralytics grafiklerinde sütunlar gerçek sınıfı, satırlar ise tahmin edilen sınıfı gösterir; ayrıca bir background satırı ve sütunu bulunur. Normalize edilmiş sürüm, her sütunu toplamına böler; böylece her sütun o sınıfa ait nesnelerin nereye gittiğini gösterir. Hap veri kümesinde tek bir sınıf var, bu yüzden alıştırma için üç sınıflı şu depo örneğini kullan (temsili sayılar):
| Tahmin ↓ / Gerçek → | forklift | kişi | palet | arka plan |
|---|---|---|---|---|
| forklift | 0.78 | 0.03 | 0.18 | 0.45 |
| kişi | 0.04 | 0.91 | 0.00 | 0.20 |
| palet | 0.10 | 0.00 | 0.65 | 0.35 |
| arka plan | 0.08 | 0.06 | 0.17 | — |
- Köşegen: doğru algılanan her sınıfın oranı. 0.65 ile palet, zayıf sınıftır.
- Köşegen dışı: karışıklıklar. Gerçek paletlerin %18'i forklift, forkliftlerin %10'u palet olarak tahmin edildi.
- Arka plan satırı: kaçırmalar. Paletlerin %17'si hiç algılanmadı.
- Arka plan sütunu: boş alana çizilen kutular, yani yanlış pozitifler. Bunların %45'i forklift olarak sınıflandırıldı.
Her hücre türü, uygulanacak bir düzeltmeye karşılık gelir:
| Örüntü | Çözüm |
|---|---|
| İki sınıf birbirini karıştırıyor | Bu sınıfları birbirinden ayıran örnekler ekle: palet taşıyan forkliftler, forkliftlerin yanında istiflenmiş paletler |
| Arka plan satırı yüksek (kaçırmalar) | Kaçırıldığı koşullarda o sınıftan daha fazla örnek ekle |
| Arka plan sütunu yüksek (yanlış alarmlar) | Boş koridorlar gibi, bu yanlış alarmları tetikleyen sahnelerin arka plan görüntülerini ekle |
Sınıf Başına Sayıları Oku#
Birden fazla sınıf varsa doğrulama günlüğünde her sınıf için bir satır yazdırılır; metrics.box.maps ise kodda sınıf başına mAP50-95 değerlerini içerir. Depo örneğine devam edelim:
Class Images Instances Box(P R mAP50 mAP50-95)
all 50 102 0.78 0.71 0.74 0.51
forklift 30 45 0.85 0.78 0.81 0.58
person 40 50 0.92 0.88 0.91 0.64
pallet 5 7 0.58 0.48 0.51 0.31pallet diğerlerinden çok daha düşük ve doğrulama kümesinde yalnızca 7 örneği var. Ya model paletleri iyi algılayamıyor ya da bunu anlayabilmek için doğrulama verisi çok az. Her iki durumda da atılacak adım aynı: eğitim ve doğrulama için daha fazla palet topla.
Hataları İncele#
val_batch0_labels.jpg ile val_batch0_pred.jpg dosyalarını yan yana aç. Aralarındaki farklar, hatalarının görsel hâlidir; bu görsellerdeki örüntüler ise tanıyı ortaya koyar: görüntü kenarındaki kaçırmalar, küçük nesneler, belirli bir ışık koşulu veya birbirine benzeyen nesneler. Bu tür veri kümesi örüntüleri, neredeyse her zaman hiperparametre ayarından daha etkilidir.
Hap modelinin doğrulama görüntülerinde açıkça görünen hapların güven puanı 1.0'a yakındır. Yaklaşık 0.3–0.5 puan alan düşük güvenli kutular, kısmen başka bir blister ambalajın altında kalan ve görüntü kenarında kesilen haplarda yoğunlaşıyor. Bu, conf ile ayar yaparak çözülecek bir sorun değil; etiketleme politikasıyla ilgili bir soru. Yarı gizli bir hap sayılmalı mı? Karar ver, kuralı yaz ve her görüntüyü aynı şekilde etiketle.
Ardından results.png dosyasını aç. Eğitim ve doğrulama kayıpları birlikte düşmeli. Eğitim kaybı düşmeye devam ederken doğrulama kaybı yükseliyorsa model aşırı öğreniyordur; her ikisi de yüksek kalıyorsa model yetersiz öğreniyordur. Her iki durumu anlamak için bias-varyans ödünleşimi çerçevesini kullan.

Aşırı öğrenmeyi gidermek için, işe yarama sıklığına göre düzeltmeler: daha çeşitli veri; daha az epoch veya daha sıkı bir patience; ve veri artırma (hsv_h, degrees, translate, scale, fliplr, mosaic, ...). Veri artırma varsayılanları zaten güçlü; yalnızca sol ve sağ yönlerin önemli olduğu durumlarda fliplr özelliğini kapatmak gibi geçerli bir nedenin varsa değiştir.
Bulguları Bir Düzeltme Listesine Dönüştür#
Hiperparametreleri ayarlamadan önce veriyi düzelt ve neyin işe yaradığını anlayabilmek için her turda tek bir şeyi değiştir. Bu döngünün veri kümesi tarafı İlk İnce Ayar ve Yineleme Döngüsü sayfasında ele alınıyor.
Bu Hatalardan Kaçın#
Belirti: 0.659 mAP50-95 puanı alan model aniden 0.403 puan alıyor. Neden: pills_v1, imgsz=320 boyutunda eğitildi ve imgsz=640 ile doğrulandı; nesneler, modelin öğrendiği her şeye kıyasla iki kat büyük görünüyor. Çözüm: Eğitimde kullanılan imgsz boyutunda doğrulama yap ve dağıt; çalıştırmaları yalnızca aynı boyutta karşılaştır.
Doğrulama, tam kesinlik-duyarlılık eğrisini çıkarabilmek için conf=0.001 değerinde çalışır; bu nedenle val_batch0_pred.jpg, uygulamanın hiçbir zaman raporlamayacağı kutuları gösterir. Dağıtım eşiğini BoxF1_curve.png üzerinden seç, ardından predict ile denetle.
23 görüntüyle bir epoch'taki kesinlik 0.93'ten 0.80'e düşüp tekrar yükseldi. Eğilimleri epoch'lar ve çalıştırmalar genelinde değerlendir; bir iki puanlık farklara güvenmeden önce doğrulama kümesini büyüt.
Çözümü göster
Baseline mAP50-95 0.0002 -> pills_v1 0.659 (mAP50 0.977), both at imgsz=320
Failures:
- Low-confidence boxes (about 0.3-0.5) on pills half-hidden under another pack.
- Low-confidence or missing boxes on pills cut off at the image edge.
Overfitting: none. val/box_loss flattened near 1.05; val/cls_loss spiked at epochs 4-6
and then fell to its lowest value (1.08) at epoch 10.
Fix list:
1. Write a labeling rule for partly hidden and edge pills, then relabel the val set to match.
2. Train longer and larger: epochs=50, imgsz=640 (mAP50-95 lags mAP50, so box tightness is the gap).
3. Add 20 frames with overlapping packs, labeled under the new rule.