
ŞEK. 01
KAYIT KÜNYESİ
Kategori
Yazılım
TARİH
Eğitim bitti ve terminal son satırını yazdı: mAP50 0.950. Takımda kısa süreli bir kutlama koptu. Ertesi hafta aynı modeli sahada uçurduk ve hedeflerden birine ne yaptıysak kilitlenemedik.
Bu çelişki bize bir refleks kazandırdı: metriğe güvenmeyi bırakmak. Ama yanlış tepki bu. Metrik yalan söylemiyordu; biz ona yanlış soruyu soruyorduk. mAP50 0.950 "model sahada iyi çalışıyor" demiyor. "Bu görüntülerde, bu doğrulama setinde, 0.50 IoU eşiğinde, tüm güven eşikleri boyunca ortalaması alındığında precision bu kadar" diyor. Bu iki cümle arasındaki mesafe, uçuş günüyle ofisteki bir gün arasındaki mesafe kadar geniş.
Bu yazıda tespit metriklerini formülleriyle birlikte açıyoruz: hangi sayı neyi ölçüyor, her biri sizi ne zaman yanıltıyor ve kendi doğrulama setimizde neye dikkat ediyoruz.
Önce IoU: bir tespit ne zaman "doğru" sayılır?
Sınıflandırmada doğruluk basittir: etiket ya tutar ya tutmaz. Tespitte ise model bir de kutu çizer. Kutu doğru yerde mi? İşte IoU'nun (Intersection over Union, kesişimin birleşime oranı) ölçtüğü şey bu:
IoU= Alan(tahmin ∩ ground truth) / Alan(tahmin ∪ ground truth)
IoU 0 ile 1 arasında değişir. 1 tam örtüşme, 0 ise hiç örtüşme yok demektir. Tipik olarak 0.50 gibi bir eşik seçer ve tahminleri üç gruba ayırırsınız:
Kısaltma | Adı | Ne anlama gelir |
|---|---|---|
TP | True Positive (doğru pozitif) | Doğru sınıf ve IoU ≥ eşik |
FP | False Positive (yanlış pozitif) | Yanlış sınıf, ya da IoU < eşik, ya da hiç nesne yokken üretilmiş bir kutu |
FN | False Negative (yanlış negatif) | Gerçekten orada olan ama modelin bulamadığı nesne |
Bu listede eksik olana dikkat edin: TN (True Negative) yok. Tespitte "arka planı doğru şekilde tespit etmemek" sayılamaz, çünkü bir görüntü nesne olmayan sınırsız sayıda kutu barındırır. Accuracy'nin tespitte kullanılmamasının nedeni de bu: paydası tanımsız.
Precision ve recall: birbirini iten iki soru
TP/FP/FN üçlüsünden iki metrik çıkar. Her biri tek cümlelik bir soruyu yanıtlar:
Precision= TP / (TP + FP) → "Bulduklarımın kaçı gerçekten doğru?"
Recall= TP / (TP + FN) → "Var olanların kaçını bulabildim?"
F1= 2 · (P · R) / (P + R) → ikisinin harmonik ortalaması
İkisi genelde birbirinin aleyhine çalışır. Modeli cesaretlendirirseniz (düşük güven eşiği) recall yükselir, precision düşer. Daha temkinli yaparsanız tersi olur.
Hangisinin daha ağır bastığı göreve bağlı. Bizim SUAS görevimizde tablo şöyle:
Hata türü | Sahada nasıl görünür | Maliyet |
|---|---|---|
FP (yanlış tespit) | Olmayan bir hedefe otonom bırakış yapmak | Yüksek: doğrudan puan kaybettirir |
FN (kaçırılan hedef) | Hedefin üzerinden bırakış yapmadan geçmek | Orta: tur tekrarlanabilir |
Yani bizim için precision, recall'dan biraz daha pahalı. Otonom bırakış kararı geri alınamıyor. Bu tercih, aşağıda anlattığımız güven eşiğini doğrudan belirledi.
PR eğrisi, AP ve mAP
Precision ve recall tek bir sayı değil; güven eşiğinin fonksiyonu. Eşiği 0.99'dan 0.01'e doğru taradığınızda bir eğri elde edersiniz: precision-recall (PR) eğrisi. Eğri sol üst köşeye ne kadar yaklaşırsa o kadar iyi.
AP (Average Precision), bu eğrinin altında kalan alandır. Ultralytics'in de kullandığı COCO protokolü bunu 101 noktalı interpolasyonla hesaplar: recall ekseni {0, 0.01, ..., 1.00} noktalarında örneklenir, her noktada o recall'a karşılık gelen maksimum precision alınır ve ortalama integre edilir.
AP= ∫₀¹ p(r) dr ≈ (1/101) · Σ p_interp(r), r ∈ {0.00, 0.01, ..., 1.00}
mAP= (1/N) · Σ AP_i (N = sınıf sayısı)
mAP (mean Average Precision) ise AP'nin sınıflar üzerinden ortalamasıdır. Modelimizin iki sınıfı var, dolayısıyla mAP iki AP'nin aritmetik ortalaması; bu ayrıntı önemli, birazdan geri döneceğiz.

mAP50 ile mAP50-95 arasındaki fark
Yukarıdaki tanımda IoU eşiğini 0.50'de sabitledik. Bu mAP50. mAP50-95 ise IoU eşiğini 0.50'den 0.95'e 0.05'lik adımlarla tarayarak (10 farklı eşik) elde ettiğiniz mAP değerlerinin ortalamasıdır:
mAP50-95= (1/10) · Σ mAP@IoU_t, IoU_t ∈ {0.50, 0.55, ..., 0.95}
Pratikte ikisini ayıran şey şu:
Metrik | Neyi ölçer | Ne zaman bakılır |
|---|---|---|
mAP50 | "Nesneyi kabaca doğru yerde buldun mu?" | Nesne var/yok kararının yeterli olduğu bul-ve-geç işlerinde |
mAP50-95 | "Kutunun sınırları ne kadar isabetli?" | Hassas konumlandırma, ölçüm, takip ya da bırakış noktası hesabı gerektiğinde |
mAP75 | Orta yol; katı, ama 0.95 kadar acımasız değil | Diğer iki metrik arasındaki farkın nereden geldiğini kovaladığınızda |
mAP50 her zaman mAP50-95'ten yüksektir. Aradaki fark büyükse, modeliniz nesneyi buluyor ama kutuyu üzerine düzgün oturtamıyordur. Bu fark tipik olarak küçük nesnelerde açılır: birkaç piksellik kayma, küçük bir kutuda IoU'yu oransal olarak çok daha fazla düşürür.
Bir uyarı: mAP50'yi tek başına raporlamak sayıyı olduğundan iyi gösterir. mAP50 için 0.950 değerini, yalnızca havadan görüntülerden oluşan kendi doğrulama setimizde ölçtük ve bu sayıyı her zaman "yalnızca havadan doğrulama setinde" kaydıyla yazıyoruz. Kaydı düşürdüğünüzde okuyucu bunu genel yetenek iddiası sanır.
Confusion matrix'i okumak
Doğrulamanın sonunda Ultralytics (nc+1) × (nc+1) boyutunda bir confusion matrix (karışıklık matrisi) çizer; burada nc sınıf sayısı, fazladan gelen satır/sütun ise background'dur. O fazladan satır, sınıflandırma probleminde olduğu gibi bir sınıf değil; eşleşmemiş tahminleri ve kaçırılan ground truth nesnelerini toplayan bir gider.
Hücre | Ne anlama gelir | Ne yapmalı |
|---|---|---|
Köşegen (sınıf i → sınıf i) | Doğru tespitler | Yapılacak bir şey yok |
Sınıf i → sınıf j (köşegen dışı) | Sınıf karışması | Etiket kalitesini ve sınıflar arası görsel benzerliği kontrol edin |
background → sınıf i sütunu | Arka planı nesne sandı (FP) | Hard negative örnek ekleyin, eşiği yükseltin |
sınıf i → background satırı | Gerçek nesneyi kaçırdı (FN) | Örnek sayısına, çözünürlüğe ve tiling'e bakın |
Önemli bir ayrıntı: PR eğrisinin aksine confusion matrix tek bir güven eşiğinde çizilir; Ultralytics'te varsayılan olarak 0.25 (2026 itibarıyla). Yani matris "model bu eşikte ne yapıyor" sorusunu yanıtlar, mAP ise tüm eşikler boyunca bir özettir. İkisi çeliştiğinde önce eşiğe bakın.

Güven eşiği: dengeyi seçen sizsiniz
Bir model tek bir eşikle gelmez. val ile predict varsayılanları arasındaki fark da buradan doğar ve düzenli olarak kafa karıştırır (2026 itibarıyla):
Parametre | val varsayılanı | predict varsayılanı | Not |
|---|---|---|---|
| 0.001 | 0.25 | val'de kasıtlı olarak çok düşük; böylece PR eğrisinin tamamı çıkar |
| 0.7 | 0.7 | Bu NMS eşiği, ground truth eşleştirme eşiği değil |
| 300 | 300 | Görüntü başına maksimum tespit sayısı |
val'in conf=0.001 kullanması bilinçli: eğrinin düşük precision bölgesine kadar uzanmasını ister. Bu yüzden doğrulama çıktısındaki precision/recall sayılarını uçuş konfigürasyonunuzun performansı sanmayın. Uçuşta conf=0.25 kullanıyoruz; o eşikteki gerçek precision/recall, PR eğrisi üzerindeki tek bir noktadır, tabloda basılan satır değil.
Ultralytics kendiliğinden F1'i maksimize eden eşiği de arar; kaynaktaki ilgili satır şu:
Yani sınıflar üzerinden ortalaması alınan F1 eğrisi hafifçe yumuşatılır ve tepe noktası bulunur. F1_curve.png çıktısındaki bu tepe iyi bir başlangıç noktası, ama F1, precision ile recall'a eşit ağırlık verir. FP'nin daha pahalı olduğu bizimki gibi bir görevde eşiği F1 optimumunun biraz üzerinde seçmek akılcı olur.
Sık düşülen tuzaklar: metriğin sizi yanılttığı dört durum
1. Küçük doğrulama seti. 40 nesne barındıran bir sette 2 tespitlik fark mAP'yi birkaç puan oynatabilir. Bu gürültüyü gerçek bir iyileşme sanmak, aslında hiçbir işe yaramayan bir değişikliği kalıcılaştırmanın en kolay yolu. Sayıya bakmadan önce sette kaç nesne olduğuna bakın.
2. Dengesiz sınıflar. mAP, sınıfların AP'lerini eşit ağırlıkla ortalar; örnek sayısını umursamaz. İki sınıflı bir modelde iyi temsil edilen sınıf 0.98, seyrek olan 0.62 alıyorsa mAP 0.80 çıkar ve o tek sayıya bakmak ikinci sınıfın çöktüğüne dair hiçbir ipucu vermez. Kendi ilk veri setimizde sınıflar arasında ciddi bir örnek sayısı dengesizliği vardı; bu yüzden metrics.box.maps ile sınıf bazında bakmayı alışkanlık hâline getirdik.
3. Sızıntılı doğrulama (data leakage). En sinsi olanı bu. Aynı videodan çıkarılmış ardışık kareleri rastgele train/val diye bölerseniz, doğrulama setindeki kare eğitimdekinin neredeyse birebir kopyası olur. Model ezberler, mAP yükselir, sahadaki performans değişmez. Doğru bölme birimi kare değil, çekim oturumu: aynı uçuştan gelen her kare aynı tarafta kalmalı.
4. Yanlış alan. Doğrulama seti göreve benzemiyorsa metrik başka bir problemi ölçüyordur. İlk veri setimizde ağırlık, web'den toplanmış yer seviyesi görüntülerindeydi; oysa görev, yüzlerce metre yukarıdan aşağı bakan bir kameradan geliyor. Bu yüzden doğrulama setini yalnızca havadan görüntülerden kurduk. Sayı düştü, ama anlamı yükseldi.
Dördü de tek bir cümleye iniyor: mAP aynı zamanda veri setinizin ne kadar zor olduğunu ölçer. Kolay bir set seçerseniz kolay bir sayı alırsınız.
Pratik özet
Tek bir sayı raporlamayın. mAP50, mAP50-95 ve sınıf bazında AP'yi birlikte yazın; ilk ikisi arasındaki fark, kutu isabetiniz hakkında bedava bilgi verir.
Kaydı metriğin yanına yazın. "Yalnızca havadan görüntülerden oluşan doğrulama setinde mAP50 0.950" ile "mAP50 0.950" farklı iddialardır. İkincisini yazmayın.
Doğrulama setini oturuma göre bölün, kareye göre değil. Aynı uçuştan gelen kareler asla hem train'e hem val'e düşmemeli.
Uçuş eşiğinizi F1 eğrisinden seçin, ama görevin hata maliyetine göre kaydırın. Yanlış tespitin pahalı olduğu bir görevde F1 optimumunun biraz üstü daha güvenli.
mAP yükseldiğinde önce sette kaç nesne olduğuna bakın. Küçük bir sette gördüğünüz iyileşme genelde gürültüdür.
Metrik, modelin karnesi değil; sorduğunuz sorunun cevabı. Soruyu iyi kurarsanız uçuş gününde sürpriz azalır.
