Tespit Metriklerini Dürüstçe Okuma
Doğrulamayı çalıştır; precision, recall, mAP50-95, sınıf başına AP ve karmaşıklık matrisini birlikte oku; ardından bir hedefe göre dağıtım eşiği belirle.
Tek bir sayı rahatlatıcı gelir: mAP 0,83, tamam. Ancak aynı mAP; zamanın yarısında başarısız olan bir sınıfı, sürekli gevşek kutuları ya da her dakika birine uyarı gönderen bir eşiği gizleyebilir. Gerçek bir doğrulama çalıştıracak ve neyi düzeltmen, eşiği nerede belirlemen gerektiğini gösterene kadar sonuçları satır satır okuyacaksın.
Uygulamalı
Her tahmin nasıl puanlanır?#
Doğrulama, tahmin edilen her kutuyu gerçek değerle eşleştirir. Bir tahmin, doğru sınıfa aitse ve henüz eşleşmemiş bir gerçek değer kutusuyla IoU değeri eşiği aşıyorsa doğru pozitif (TP) olur; aksi hâlde yanlış pozitif (FP) olur. Eşleşmeyen her gerçek değer nesnesi yanlış negatif (FN) olur.
| Ölçüt | Formül | Yanıtladığı soru |
|---|---|---|
| Precision | TP / (TP + FP) | Model bir kutu çizdiğinde, ne sıklıkla doğru sonuç verir? |
| Recall | TP / (TP + FN) | Gerçek nesnelerin kaçını buldu? |
| F1 | 2 × P × R / (P + R) | İkisini dengeleyen tek bir sayı |
Güven eşiğini düşürmek daha fazla kutu ekler: recall yükselir, precision düşer. Precision-recall eğrisi, tüm eşiklerde bu ödünleşimi gösterir; eğrinin altındaki alan, tek bir sınıf için ortalama precision (AP) değeridir. mAP50, IoU 0,5 değerinde sınıflar genelindeki AP ortalamasını alır; bu eşikte belirgin ölçüde gevşek bir kutu bile sayılır. mAP50-95, 0,5 ile 0,95 arasındaki on IoU eşiğinin ortalamasını alır ve bu nedenle sıkı kutuları ödüllendirir; Ultralytics model tablolarındaki öne çıkan metriktir.
Bir doğrulama çalıştır#
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
metrics = model.val(data="coco8.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}") Class Images Instances Box(P R mAP50 mAP50-95)
all 4 17 0.551 0.962 0.943 0.669
person 3 10 0.551 0.8 0.848 0.387
dog 1 1 0.36 1 0.995 0.597
horse 1 2 0.36 1 0.995 0.696
elephant 1 2 0.656 0.969 0.828 0.545
umbrella 1 1 0.543 1 0.995 0.895
potted plant 1 1 0.833 1 0.995 0.895Baştan sona oku:
- Instances 17, Images 4. COCO8 bir hızlı kontroldür. Dört görsel, yayına alma kararı vermek için yeterli değildir; tüm sayıları örnek olarak değerlendir.
- mAP50 0.943, mAP50-95 0.669. Nesnelerin çoğu bulunuyor, ancak birçok kutu gevşek. Aradaki büyük fark, zayıf noktanın tespit değil konumlandırma olduğunu gösterir.
personAP50-95 0.387. En yaygın sınıf en zayıf sınıf. Darboğazın bu.- P 0.551, R 0.962. Bu sütunlar, tahmin yaptığın 0.25 eşiğinde değil, sınıflar genelinde F1 değerini en üst düzeye çıkaran tek güven eşiğinde — burada düşük bir eşikte — okunur. Bunları "modelin precision değeri" diye aktarma.
Sınıf başına AP ve dağıtım eşiği#
Aynı çalıştırma, sınıf başına AP ile her güven eşiğindeki precision ve recall değerlerini içerir; böylece tahmine göre değil, bir hedefe göre eşik seçebilirsin:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
metrics = model.val(data="coco8.yaml", plots=False, verbose=False)
box = metrics.box
# Per-class AP from the same run: the average hides the weakest class
for i, c in enumerate(box.ap_class_index):
print(f"{model.names[int(c)]:13} AP50={box.ap50[i]:.3f} AP50-95={box.ap[i]:.3f}")
# Precision and recall at every confidence threshold for one class
row = list(box.ap_class_index).index(0) # class 0 = person
for conf in (0.1, 0.25, 0.5, 0.75):
j = int(conf * (len(box.px) - 1))
print(f"person @ conf {conf:.2f}: precision {box.p_curve[row, j]:.2f}, recall {box.r_curve[row, j]:.2f}") all 4 17 0.551 0.962 0.943 0.669
person AP50=0.848 AP50-95=0.387
dog AP50=0.995 AP50-95=0.597
horse AP50=0.995 AP50-95=0.696
elephant AP50=0.828 AP50-95=0.545
umbrella AP50=0.995 AP50-95=0.895
potted plant AP50=0.995 AP50-95=0.895
person @ conf 0.10: precision 0.63, recall 0.80
person @ conf 0.25: precision 1.00, recall 0.54
person @ conf 0.50: precision 1.00, recall 0.40
person @ conf 0.75: precision 1.00, recall 0.14Artık eşik bir his değil, karar kuralı:
| Karar ölçütündeki hedef | Seçim | Bu çalıştırmadaki sonuç |
|---|---|---|
| Uyarıların en fazla %5'i yanlış olabilir (precision ≥ 0.95) | En fazla recall değerini korumak için hedefi karşılayan en düşük eşik | 0.25: precision 1.00, recall 0.54 |
| En fazla 5 kişiden 1'ini kaçır (recall ≥ 0.80) | En fazla precision değerini korumak için hedefi karşılayan en yüksek eşik | 0.10: precision 0.63, recall 0.80 |
Burada ikisi de yeterince iyi değil: yüksek precision, insanların yarısına mal oluyor; yüksek recall ise uyarıların üçte birine. Bu, eşik sorunundan ziyade "yinele" kararı için kanıttır. Doğrulama ayrıca BoxPR_curve.png, BoxP_curve.png, BoxR_curve.png, BoxF1_curve.png ve confusion_matrix.png dosyalarını çalıştırma klasörüne kaydeder; böylece aynı ödünleşimi grafiklerden de okuyabilirsin. Performans metrikleri kılavuzu her birini açıklar.
Sonraki düzeltmeler#
Karmaşıklık matrisi, zayıf bir sınıfın neyle karıştırıldığını gösterir. forklift AP değeri düşükse ve forkliftler pallet_jack olarak tahmin ediliyorsa sorun konumlandırma değil, sınıf karışıklığıdır: görsel farkı gösteren örnekler ekle veya ayrı sınıflara ihtiyaç duyan bir sonraki aşama kodu yoksa sınıfları birleştir. Model değerlendirme içgörüleri kılavuzu iş akışını açıklar.

Düzeltmelerin çoğu ilk ve üçüncü panellere girer: darboğaz sınıfı için daha iyi veri ve daha iyi etiketler. Modeli veya eğitim ayarlarını ancak önceki üç dersteki veri kontrollerini geçtikten sonra değiştir.
| Dondurulmuş bir test kümesinden elde edilen kanıt | Karar |
|---|---|
| İş açısından kritik her sınıf, precision ve recall hedefini karşılıyor | Yayına al ve izle |
| Bir sınıf veya koşul hedefini karşılamıyor | Yinele: bu açığı kapatmaya yönelik veri ve etiketler kullan |
| Her sınıf hedeften çok uzak veya sınıflar görsel olarak örtüşüyor | Görev tanımını, sınıfları veya kamera kurulumunu yeniden düşün |
Yaygın Hatalar#
0,83 mAP, bir sınıfın 0,40 değerinde olduğunu gizleyebilir. İş değeri o sınıfa bağlıysa elinde 0,83'lük bir model yoktur — göz boyayan bir ortalamaya sahip, bozuk bir model vardır.
Belirti: "0,94 puan alan" bir modelin ölçüm veya kırpma için fazla gevşek kutular çizmesi. Çözüm: mAP50-95 değerini raporla ve mAP50 ile arasındaki farkı konumlandırma göstergesi olarak yorumla.
Belirti: birkaç düzine görüntüden veya eğitim kümesinin neredeyse kopyalarından elde edilen kusursuz görünen sonuçlar. Çözüm: doğrulamayı önemli her sınıf için birkaç yüz örneğe çıkar ve herhangi bir metriği yorumlamadan önce önceki derste anlatılan yakın yinelenenleri kontrol et.
Çözümü göster
yolo26n.pt üzerinde kişi sayacı: COCO8 doğrulama sonuçları
Darboğaz person; AP50-95 değeri 0.387, genel değer ise 0.669. Ayrıca en çok örneğe sahip sınıf da bu (17 örneğin 10'u); dolayısıyla hem en zayıf sınıf hem de kişi sayacı için en önemli sınıf. AP50 değeri 0.848 olduğundan model kişilerin çoğunu buluyor, ancak kutuları gevşek çiziyor. Bu durum sayım için, konumu veya boyutu ölçen görevlerde olduğu kadar önemli değil.
Precision ≥ 0.95 için koşulu sağlayan en düşük eşik conf 0.25; bu eşikte precision 1.00, ancak recall yalnızca 0.54: sayaç kişilerin neredeyse yarısını kaçırır. Recall ≥ 0.80 için conf 0.10 gerekir; bu eşikte sayımların üçte biri yanlış olur.
Karar: yinele. Dağıtım kamerasından kişiler topla ve etiketle — özellikle küçük, örtülmüş ve kare kenarındaki kişileri — ardından birkaç yüz kişiden oluşan sabit bir test kümesiyle yeniden doğrula. Dört doğrulama görseli, dağıtıma alma kararı vermek için yeterli değil.