Confusion Matrix’ten mAP’e: Object Detection Metriklerini Anlamak
Son 1 yıldır derin öğrenme - bilgisayarlı görü alanında çalışmalar yapıyorum ve önceki yazılarımı okuduysanız eğer öğrendiklerimi somutlaştırmayı severim :) Bu yüzden bu yazıyla AI/ML/DL/CV (unuttuğum olmamıştır inş.) alanına girmiş bulunmaktayım.
Makine öğrenmesi, derin öğrenme, bilgisayarlı görü gibi kavramları var eden şey model eğitimidir. Model eğitimi dediğimiz şey ilk başta çok basit görünebilir -ki bir anlamda öyle- çünkü ortalama 20–30 satırlık bir scriptle model eğitimi başlatılabilir. Ama o scripti çalıştırmak model eğitiminin en kolay kısmı aslında. Çünkü bir model eğitmeden önce, günlerce belki de haftalarca veri hazırlığı yapmanız gerekiyor. İyi bir model eğitiminin altın kuralı iyi bir verisetidir. Veriseti hazırlığında kuralların kesin bir şekilde tanımlı olması ve eğer kalabalık bir ekiple çalışıyorsanız (yani verileriniz birden fazla kişinin elinden çıkacaksa) bu kuralların tüm ekip tarafından iyi anlaşılmış olması gerekir. Bu kurallar ve kuralların uygulanmasıyla ilgili detay verebilirim ama konumuz veri hazırlığı değil :)
Eğer veri setinizden eminseniz artık model eğitimine başlayabilirsiniz demektir. Model eğitiminde de yapmanız gereken verinize uygun modeli seçmek ve bazı parametreleri ayarlamak. Eğitim kısmını da iki cümleyle geçiyorum ama aslında sadece eğitim kısmından bile 10–100 -1000 … tane falan yazı çıkar. Eğitim aşaması da bittiğine göre artık modelinizi değerlendirmeye hazırsınızz 🥳🥳
Model çıktılarının anlamlandırılabilir olması eğitimin başarılı ya da başarısız geçtiğini anlamak için çok önemlidir. Bunun için karmaşıklık matrisi (confusion matrix) ve değerlendirme metriklerini kullanırız. Değerlendirme metrikleri ele alınan probleme göre çeşitlilik gösterebilir ancak bu yazıda object detection ve YOLO odaklı model değerlendirme metriklerini ele alacağız. Bu metrikler: Precision, Recall, F1-Score, IoU ve mAP50 ile mAP50–95 olacak. Bu metriklerin görselleştirilmiş hali de karmaşıklık matrisinde (confusion matrix) gösterilir. Karmaşıklık matrisinden başlayarak açıklayalım.
1. Karmaşıklık Matrisi (Confusion Matrix)
Karmaşıklık matrisi bir sınıflandırma modelinin ne kadar başarılı olduğunu ya da nerde ne kadar ve nasıl bir hata yaptığını analiz etmemizi sağlayan, sonuçları görselleştiren bir araçtır. Hata matrisi olarak da bilinir. Bu matriste 4 değer temsil edilir. Bu değerler:
- True positive
- True negative
- False positive
- False negative
Küçük bir araştırmayla bu değerlerin teorik açıklamasını bulabilirsiniz ancak her yerde yapılan o açıklamayı anlamak çokça vaktimi aldı :’) Bu yüzden sizi bu amelelikten kurtarıp çok ünlü ve basit bir metaforla kavramları açıklayacağım. Amme hizmetidir:
Diyelim ki bir hastanede 100 kişiye kanser teşhisi için testler yapılıyor. Bu yüz kişiden 80 i sağlıklı 20 si de kanser olsun.
Hasta olan 20 kişinin de 15 ine teşhis konulsun; kalan 5 i ne sağlıklı densin. Yani 5 kişinin hastalığı tespit edilemesin.
Sağlıklı olan 80 kişinin de 60 ına sağlıklı densin ve kalan 20 kişiye kanser teşhisi konulsun. Yani 20 kişi kanser olmamasına rağmen onlara kanser denilsin.
Bu durumda:
TP = 15
FP = 20
TN = 60
FN = 5
olur.
Peki sizce kanser olmayan kişiye kanser demek mi daha kötü yoksa kanser olana sağlıklı demek mi??
Matristeki değerlerden Accuracy, Specifity, Recall, Precision ve F1-Score dediğimiz bazı metrikler üretilir. Bu metriklerden YOLO ile ilgili olanları detaylıca açıklayacağım için bu başlıkta ele almayacağım. Bu başlık altında sadece accuracy ve specificity i açıklayalım.
Accuracy (Doğruluk): Doğru sınıflandırma oranıdır. Doğru tahminlerin (TP + TN) tüm tahminlere oranıyla bulunur. İlk bakışta mantıklı bir değerlendirme yöntemi olarak görünse de sınıf dağılımının dengeli olmadığı veri setlerinde yanıltıcı bir olabilir.
Specifity (Özgülük): Gerçek negatiflerin ne kadarının doğru şekilde negatif olarak sınıflandırıldığını gösterir. Yani “Kanser olmayan hastaların kaçı model tarafından doğru tespit ediliyor?” sorusuna cevap verir.
2. Recall (Duyarlılık)
Recall, gerçek pozitiflerin ne kadarının doğru yakalandığının bir ölçütüdür. Eğer bu cümle Çince gibi geldiyse Recall’ı bir arkadaşıma anlatır gibi anlatacağım.
Recall denilen şey modelin hedefi yakalama/kaçırmama oranıdır. Eğer amacın bir MR görselindeki tümörü tespit etmekse tespit ettiğin tümör sayısı arttıkça Recall değerin de artar.
Diyelim ki bir MR sonucunda 4 ayrı tümör var var ama model sadece 3 tanesini tespit etti. Bu durumda modelin Recall değeri 0.75 olur
Medikal yapay zeka uygulamalarında False Negative’leri gözden kaçırmamak çok önemlidir. Bu örnek, False Negative durumunu ve modelin var olan tümörleri yakalama başarısını somutlaştırır.
Recall, False Positive’lerle ilgilenmez. Yani yanlış pozitif tahminlerin sayısı Recall değerini doğrudan etkilemez. Önemli olan gerçek pozitifleri kaçırıp kaçırmadığıdır. Yani şöyle ki eğer model, tümörlerin yanında sağlıklı bir dokuya da yanlışlıkla tümör teşhisi koyarsa Recall değeri değişmez. Sonuç yine 0.75 olur. Dolayısıyla Recall metriğinin tek başına yeterli olmadığı çıkarımını yapabiliriz. Yanlış pozitif tahminleri de değerlendirmek için Precision metriğine ihtiyaç duyarız.
Model sağlıklı bir dokuya da yanlışlıkla kutu çizip alarm verse bile (FP = 1), Recall formülünde FP yer almadığı için Recall değeri yine %75 kalır. Bu durum, Recall metriğinin tek başına neden yetersiz olduğunu ve yanlış alarmları (FP) cezalandırmak için neden Precision metriğine ihtiyaç duyduğumuzu açıklar.
Recall değeri düşükse bunun birçok sebebi olabilir. En yaygın sebepler arasında sınıf dengesizliği, yetersiz eğitim verisi, hatalı etiketlemeler ve nesnelerin görüntüde çok küçük ya da belirsiz olması sayılabilir. Ayrıca modelin confidence threshold değeri de Recall üzerinde doğrudan etkilidir.
Örneğin veri setinde bir sınıf diğerlerine göre çok baskınsa model, az örnekle temsil edilen sınıfları yeterince öğrenemeyebilir. Bu da bazı nesnelerin kaçırılmasına neden olabilir.
Tabii ki Recall düşüklüğünün sebebini analiz etmek için model eğitimi sonucunda oluşturulan çıktıların (özellikle de grafiklerin ve confusion matrix’in) çok iyi incelenmesi gerekir.
3. Precision (Kesinlik) vs Recall
Precision, pozitif olarak tespit edilen sonuçların kaçının gerçekten pozitif olduğunun bir ölçütüdür. Yani “Model kaç tespit yaptı ve bunların kaçı doğru?” sorusuna cevap verir.
Precision metriği tek başına modelin yaptığı pozitif tahminlerin ne kadar güvenilir olduğu hakkında bilgi verir. Ancak modelin gerçek pozitiflerin ne kadarını bulabildiğini söylemez. Bunun için Precision’ın Recall ile ilişkisini anlamak ve yorumlayabilmek çok önemlidir.
Bu yüzden bu başlıkta sadece Precision’ı anlatmak yerine çok daha önemli olan Precision vs Recall ilişkisini açıklayacağım.
Bir metafor üzerinden anlatalım:
Bir denizde 100 tane levrek olduğunu ve bir balıkçının da bu 100 levreği avlamayı hedeflediğini düşünelim. Eğer bu balıkçı 100 levreğin 90'ını avlarsa ve toplamda 120 tane şey avlamış olursa bu balıkçının Precision ve Recall değerleri ne olur?
Görselde göründüğü üzere %75, Recall ise %90 olur.
Peki bu balıkçı zıpkın kullanarak her bir balığı avlamayı hedeflerse ne olur?
%100 Precision oranına ulaşır. Çünkü balığın levrek olduğundan emin olmadıkça zıpkınını kullanmaz. Gün sonunda kovada sadece 5 tane balık vardır ve bu balıkların 5'i de kesinlikle levrektir. Ancak bu sefer Recall değeri oldukça düşük çıkar (%5 kadar düşük). Çünkü denizde 95 levrek daha vardır ve balıkçı bu 95 levreği kaçırmıştır :(
Şimdi de aynı balıkçının aynı denizde zıpkınla değil de ağ ile levrek avladığını düşünelim. Bu durumda Precision ve Recall nasıl etkilenir?
Bu senaryoda denizdeki tüm levreklerin yakalandığını kabul ediyoruz. Ancak ağa levrek dışında bir sürü şey ve birçok farklı balık türü de yakalanmış olur. Ama bizim hedefimiz sadece levrekleri yakalamaktı. Bu yüzden bu sefer Precision değeri oldukça düşük çıkar ve Recall değeri de %100 olur.
Sonuç olarak Recall ile Precision metrikleri arasında genellikle bir denge (trade-off) olduğunu görmüş olduk. Peki sizce ideal olan nedir? Yani Precision’ın yüksek olması mı daha başarılıdır, yoksa Recall’ın daha yüksek olması mı?
Bu sorunun kesin ve net bir cevabı yok. Çünkü modelinizi eğitme amacınıza göre önceliğiniz Precision’ın daha yüksek olması ya da Recall’ın daha yüksek olması olabilir.
Eğer amacınız bir plastik boru üretim hattındaki hasarlı boruları tespit etmekse Recall metriği burada daha öne çıkar. Çünkü en nihai amacınız hasarlı parçaları kaçırmamaktır. Yani mümkün olduğunca fazla True Positive elde etmek ve False Negative sayısını azaltmak istersiniz.
Ama eğer amacınız yine aynı boru üretim hattında belirli bir zaman diliminde kaç tane hasarlı parça üretildiğini doğru şekilde hesaplamaksa Precision metriği de önem kazanır. Çünkü bu sefer yanlış alarm almak istemezsiniz. Yanlış tespitler, hasarlı parça sayısını olduğundan fazla gösterebilir.
Bu iki kavramı yeterince somutlaştırdığımı düşünüp bir sonraki başlığa geçiyorum.
4. F1-Score
F1-Score, değerlendirme metrikleri arasında en dikkat edilmesi gerekenlerden biridir. Eğer Recall ve Precision iyice anlaşıldıysa bu ikili arasında bir ilişki olduğu da görülmüştür. Genellikle biri artarken diğeri azalabilir. Bu ilişkiye tahterevalli benzetmesi yapabiliriz.
İşte F1-Score da bu tahterevallinin dengesini gösterir. Yani bu iki değerin ortalamasını verir. Ortalama denince akla ilk aritmetik ortalama gelebilir ancak buradaki ortalama harmonik ortalamadır. Peki neden harmonik ortalama?
Aritmetik ortalama iki değerin toplamının değer sayısına bölünmesiyle bulunurken harmonik ortalama küçük değere daha fazla ağırlık verir. Değerlerden biri sıfıra yaklaştıkça sonuç da sıfıra yaklaşır. Yani harmonik ortalama uç değerlere acımaz.
Aritmetik ortalama ile harmonik ortalama arasındaki farkı matematiksel bir örnekle somutlaştıralım.
Diyelim ki bir model eğitimi sonucunda Precision ve Recall metrikleriniz şu şekilde:
Precision = 1.0
Yani modelin tahmin ettiği pozitiflerin %100'ü gerçekten pozitif; hiç yanlış pozitif tahmin yok.
Get Dilara Kardaş’s stories in your inbox
Join Medium for free to get updates from this writer.
Recall = 0.05
Yani model, gerçek pozitiflerin sadece %5'ini yakalayabilmiş, geri kalanını kaçırmış.
Bu durumda:
- Aritmetik ortalama: 0.525
- Harmonik ortalama: 0.095 (yaklaşık)
Aritmetik ortalamaya baksaydınız modelin “orta seviyede (%52.5) başarılı” olduğunu düşünebilirdiniz. Ancak bu tamamen yanıltıcı olurdu. Çünkü model neredeyse hiçbir gerçek pozitif nesneyi/durumu bulamamıştır.
Harmonik ortalamaya göre ise skor, modelin ciddi bir kör noktası olduğunu (bu senaryoda Recall değerinin fazlaca düşük olduğunu) size doğrudan söyler.
Sonuç olarak bir modelin başarılı sayılabilmesi için hem hedefi kaçırmaması (Recall) hem de tahminlerinin doğru olması, yani yanlış pozitif tahminler yapmaması (Precision) önemlidir.
F1-Score’un yüksek olması bu iki değerin de genel olarak iyi olduğunu gösterir. Düşük olmasıysa bu iki değerden en az birinin düşük olduğunu gösterir. Yani harmonik ortalamanın düşük olması modelde bir sorun olduğunu gösterir ama sorunun teşhisi size, yani modeli eğiten kişiye kalır.
5. IoU (Intersection over Union)
Şimdiye kadarki metrikler, nesnenin sınıfının doğru tahmin edilip edilmediğine yönelikti. IoU metriği ise nesnenin görüntüde ne kadar doğru konumlandırıldığını değerlendirmek için kullanılır.
Intersection over Union (IoU), Türkçeye kabaca “Kesişimin Birleşime Oranı” olarak çevrilebilir.
- Intersection: İki kutunun kesişim alanı.
- Union: İki kutunun birleşim alanı.
Bir object detection modelinin 2 temel görevi vardır:
- Nesnenin hangi sınıfa ait olduğunu tahmin etmek (classification),
- Nesnenin görüntüde nerde bulunduğunu tahmin etmek (localization)
Object detection’da tespit edilen nesnelerin etrafına kutular çizilir. IoU, adından da anlaşılacağı üzere tahmin edilen kutu ile gerçek kutunun ne kadar örtüştüğünü ölçer. Bu ifadeyi sözel olarak açıklamak biraz zor. Bu yüzden bir görselle açıklayalım.
IoU matematiksel olarak bounding box’ların kesişim alanının birleşim alanına bölünmesiyle bulunur ve 0–1 arasında değer alır. 0.00 IoU değeri hiç örtüşme olmadığı anlamına gelirken 1.00 değeri kutuların tamamen örtüştüğü anlamına gelir.
Örneğin model, bir MR görüntüsündeki kanserli hücreyi doğru sınıflandırmış olabilir ama çizdiği bounding box gerçek kanserli hücrenin çok küçük bir bölümünü kapsıyor olabilir. Bu durumda modelin nesneyi sınıflandırması doğru olsa da localization performansı iyi değildir.
Burada önemli bir ayrıntı var: Object detection değerlendirmesinde Recall da belirli bir IoU eşiğine göre hesaplanır. Eğer tahmin edilen kutu gerekli IoU eşiğini karşılamıyorsa bu tahmin True Positive olarak kabul edilmeyebilir. Dolayısıyla kutunun konumlandırılmasındaki hata Recall değerini de etkileyebilir.
Görselde de kanserli hücrenin yalnızca yaklaşık %35'lik bir bölümü örtüşüyor.
Artık IoU kavramını anladığımızı düşünüyorum. Peki öyleyse IoU Threshold nedir?
IoU Threshold, adından da anlaşılacağı gibi bir eşik değeridir. Yani tespit edilen nesnenin tahmin kutusunun, gerçek kutuyla en az ne kadar örtüşmesi gerektiğini belirler. Bu değer kullanılan değerlendirme protokolüne göre belirlenir.
Örneğin IoU eşiğinin 0.30 olduğunu varsayarsak son görseldeki kanserli hücre tespiti, diğer eşleştirme koşullarını da sağlıyorsa değerlendirmeden geçer. Çünkü hücre için hesaplanan IoU değeri 0.35'tir.
Ancak unutulmamalıdır ki bir tespitin TP sayılması için IoU eşiğini geçmesi tek başına yeterli değildir. Tahmin edilen nesnenin aynı zamanda doğru sınıflandırılmış olması ve ilgili ground truth nesnesiyle geçerli bir eşleştirme oluşturması gerekir.
6. mAP50 ve mAP50–95
mAP metriğinin açılımı “mean Average Precision”dır. mAP kavramını parçalayarak açıklayalım.
AP (Average Precision): Tek bir sınıf için, farklı confidence threshold değerlerinde elde edilen Precision-Recall ilişkisinden hesaplanan performans ölçütüdür.
mAP (mean Average Precision): Birden fazla sınıfın AP değerlerinin ortalamasıdır.
Örneğin modelimiz 3 sınıftan oluşsun: Araba, motosiklet ve kamyon. Bu sınıfların AP değerleri sırasıyla 0.90, 0.80 ve 0.70 ise mAP, bu 3 değerin ortalamasıyla bulunur. Yani 0.80 olur.
Bu sayede modelin farklı sınıflardaki tespit başarısını tek bir değerle ifade edebiliriz.
Peki mAP50 ve mAP50–95 arasındaki fark nedir?
Öncelikle şunu bilmemiz gerekiyor: AP hesaplanırken bir IoU threshold değeri belirlenir. Bu eşik, tahmin edilen bounding box’ın gerçek bounding box ile ne kadar örtüşmesi gerektiğini belirler.
mAP50, IoU threshold değerinin 0.50 olarak belirlendiği değerlendirmedir. Yani bir tahminin doğru kabul edilmesi için gerekli IoU değeri en az 0.50 olmalıdır.
mAP50–95 ise IoU threshold değerlerinin 0.50'den 0.95'e kadar 0.05 aralıklarla değiştirildiği değerlendirmedir. Yani sırasıyla 0.50, 0.55, 0.60, 0.65, 0.70, 0.75, 0.80, 0.85, 0.90 ve 0.95 eşikleri kullanılır. Bu eşiklerde elde edilen AP değerleri ortalanır.
Dolayısıyla mAP50–95, mAP50'ye göre daha sıkı bir değerlendirme kriteridir. Çünkü modelin yalnızca nesneleri bulmasını değil, bounding box’ları daha hassas konumlandırmasını da değerlendirir.
Nesne tespitinde yalnızca Precision ve Recall değerlerine bakmak yeterli değildir.
Çünkü bir modelin başarısı, yalnızca doğru ve yanlış tahminlerinin sayısına değil, aynı zamanda modelin farklı güven eşiklerinde nasıl performans gösterdiğine de bağlıdır.
Örneğin modelimiz bir nesneyi tespit ettiğinde ona bir güven skoru (Confidence Score) verir:
- Otomobil: %95 güven
- Otomobil: %85 güven
- Otomobil: %70 güven
- Otomobil: %40 güven
Biz modelin yalnızca %80 ve üzeri güvenle yaptığı tahminleri kabul edersek başka, %40 ve üzeri tahminleri kabul edersek başka sonuçlar elde ederiz.
Dolayısıyla Confidence Threshold değiştikçe Precision ve Recall değerleri de değişir. İşte burada Average Precision (AP) devreye girer.
AP, farklı confidence threshold değerlerinde elde edilen Precision-Recall eğrisinin altında kalan alanı (Area Under the Curve) ifade eder. Yani tek bir eşikteki Precision ve Recall değerine bakmak yerine modelin farklı eşiklerdeki performansını değerlendirir.
Peki ikisini birlikte yorumlarken nelere dikkat etmeliyiz?
mAP50 metriği, nesnelerin en az 0.50 IoU örtüşme eşiğini karşıladığı koşullarda modelin tespit başarısını gösterir. mAP50–95 metriği ise farklı ve giderek zorlaşan IoU eşiklerinde modelin performansını değerlendirir. Bu nedenle mAP50–95 değeri genellikle mAP50 değerinden daha düşük çıkar.
İki metriği birlikte yorumlamak, modelin genel tespit başarısının yanı sıra bounding box konumlandırma hassasiyeti hakkında da fikir verir.
Bu yazıda confusion matrix’ten başlayarak Precision, Recall, F1-Score, IoU ve mAP metriklerini kendi anladığım ve anlatabildiğim kadarıyla açıklamaya çalıştım. Umarım okurken sizin için de anlaşılır ve faydalı olmuştur. Eksik ya da yanlış aktardığım bilgiler varsa düzeltmekten ve katkıda bulunmaktan çekinmeyin. Her türlü yoruma ve öneriye açığım :)
Bu blogda yazdığım yazılar, aylar boyunca edindiğim bilgi ve deneyimleri somutlaştırmak, öğrendiklerimi kalıcı hâle getirmek ve kendi gelişimimi takip edebilmek için yazdığım yazılar. Bir bakıma buraya yazı yazarak kendimi teknik anlamda daha fazla geliştirmek için motive oluyorum.
Eğer yazımı beğendiyseniz diğer yazılarıma da göz atabilirsiniz. Yeni şeyler öğrenmeye ve öğrendiklerimi paylaşmaya devam!!







