Grad-CAM ile Modeli Açıklamaya Çalışmak | Part 3

Grad-CAM nedir? TensorFlow-Keras ile nasıl kodlanır?

Kaan Bıçakcı
Machine Learning Turkiye
5 min readNov 27, 2021

--

Önceki Yazılar

Part-1'e buradan erişebilirsiniz.

Part-2'ye buradan erişebilirsiniz.

Bu yazımda:

  • Grad-CAM’in ne olduğundan,
  • Grad-CAM’e neden ihtiyaç duyulacağını,
  • Grad-CAM matematiğinden,
  • Grad-CAM kodunun yazımından

bahsedeceğim.

En son model training’i yapıp, test setinde performansına bakmıştık. Performans metriklerine baktığımız zaman aslında model hakkında çok fikir vermiyorlar. Çünkü modelin doğru veya yanlış öğrenip öğrenmediğini bilmiyoruz.

Örnek olarak, X-Ray görüntülerinden COVID veya Normal ayrımı yapacak bir modelin veri setinde Normal görüntülerin hepsi çocuk, COVID olanlar yetişkin olursa, model yetişkin ve çocuk X-Ray’i ayrımı yapmayı öğrenebilir.

Bir deep learning modeline bu anda black-box diyebiliriz. Bir tahmin yapıyor fakat biz bu tahmini nasıl yaptığını bilmiyoruz. Grad-CAM tekniği ile bu black-box’u biraz açmaya çalışacağız.

İşin Hikayesi — Şehir Efsanesi

DL modelleri geliştikçe öğrendikleri bilgileri yorumlamak zorlaşıyor. Günümüzde CNN’ler, beslediğimiz verilerden özellikler çıkarmamızı sağlıyor.

Ancak DL modelleri black-box olarak kabul ediliyor çünkü verilerden ne öğrendiklerini bilmiyoruz. Veya modeller verileri istediğimiz gibi öğrenmeyebilirler. Bunu bir örnekle açıklayalım:

Pentagon — Bulutları Ayıran Model

ABD Ordusu kamufle edilmiş tankları otomatik olarak tespit etmek için bir derin öğrenme modeli kullanmak istedi.

Belli araştırmacılar bu projeye atandı ve 2 sınıfa ayrılmış 200 görüntüden oluşan bir veri seti topladılar.

Araştırmacılar bu veri setini yarı yarıya olacak şekilde eğitim ve test setlerine böldüler ve aynı zamanda sınıf etiketlerinin bölümler arasında dengelenmesini de sağladılar.

İlk başta bir model eğittiler ve performasına baktılar. Bu model eğitim setinde %100 doğruluk ile tahmin yapabiliyordu. Aynı modeli test seti üzerinde test ettikten sonra bir kez daha elde edilen doğruluk oranının %100 olduğunu gördüler.

https://unsplash.com/photos/4CdIv6SZkck

Bu sonuçların ardından araştırmacılar, kamuflajlı tank sorununu çözdüklerini belirterek Pentagon’a bilgi verdiler.

Birkaç hafta sonra araştırmacılara Pentagon’dan telefon ettiler ve modelin performansından memnun olmadıklarını söylediler.

Araştırmacılar daha sonra modeli incelediler ve farklı bir eğitim süreci izlediler. Sonuçlarda bir değişiklik olmadı, hem eğitim hem de test veri setlerinde tekrardan %100 doğruluk elde ettiler. Yeni modeli gönderdiler.

Yeni modelle birlikte Pentagon’dan da yine aynı geri dönüşler geldi. Bundan sonra, araştırmacılardan birisi veri setini tekrar incelemeye karar verdi ve problemi anladı.

Problem:
Kamufle
olmuş tankların fotoğrafları bulutsuz-güneşli günlerde, kamufle olmamış tankların görüntüleri ise bulutlu günlerde çekilmişti.

Sonuç
Yani araştırmacılar, gökyüzündeki bulutları tespit etmek için bir model geliştirmişlerdi :)

Gradient-weighted Class Activation Mapping

Daha deminki hikayedeki araştırmacılar Grad-CAM gibi bir algoritma kullanmış olsalardı, sorunu daha önce anlayabileceklerdi.

Kısaca Grad-CAM nedir?

Grad-CAM aslında bir sınıf label’ı için heatmap görselleştirmesidir. Bu label’ı kendimiz seçebilir veya en yüksek softmax olasılığına sahip etiketi seçebiliriz. Biz softmax kullandığımız için en yüksek değere sahip olan label’ı kullanacağız.

Verilen görseli tahmin ederken aynı zamanda modelimizin nereye dikkat ettiğini veya baktığını görmek için bu heatmap’i kullanacağız. Yani bir nevi modelimizi doğrulamış olacağız.

Meraklısına-İşin Matematiği

Yayınlanmış olan makale üzerinden gideceğim. Dilerseniz orijinaline (Grad-CAM: Visual Explanations from Deep Networks via Gradient-Based Localization) buradan ulaşabilirsiniz.

Bu teknikte 3 adet ana adım vardır.

1.Adım-Gradyan Hesabı:

Feature Map (Özellik Haritası) Nedir? Feature Map veya Activation Map, verilen yani girdi olarak gelen bir görüntünün farklı bölümlerinin etkinleştirmesine olanak sağlayan bir eşlemedir (mapping). Diğer kelimelerle açıklayacak olursam, feature map, görüntüde bulunan bir tür özelliğin bulunduğu yerin eşlemesidir (mapping).

İlk adımda gradyan hesabı yapılır. Bulunacak olan gradyan değeri verilen görüntüye göre değişecektir. Çünkü verilen görüntü hem aktivasyon haritasını (activation map) hem de modelin çıktısını etkileyecektir.

2.Adım-Aktivasyon Haritalarını Derecelendirmek

Yukarıdaki formülde bir tane aktivasyon haritasını incelemek için bir gradyan elde etmiş olduk. Ama genele vurduğumuzda amacımız bütün aktivasyon haritalarındaki değişimi incelemektir.

Hepsini birden incelemek nispeten kolaydır. Fakat biz bu aktivasyon haritalarının hangilerinin ne kadar önemli olduğunu bilmiyoruz yani bizim bunları bir şekilde derecelendirmemiz lazım (model tahminine göre).

Bu derecelendirmeyi gradyanın tüm elemanlarının ortalamasını alarak yapabiliriz. Gradyanın elemanları dedim çünkü:

  • → 2D bir resim için gradyan hesaplama işlemi sonucu 3D’dir.

Toparlamak gerekirse, özellik haritaları üzerinde Global Average Pooling yapıyoruz.

3. Adım Grad-CAM Heatmap

2. adımdaki formüle tekrar göz atacak olursak:

Son adım olarak, elde ettiğimiz ağırlıklar ile aktivasyon haritalarının ağırlıklı kombinasyonlarını alacağız.

Negatif değerleri elemek için ReLU kullanıldı.

Açıklanabilirlik ve Yorumlanabilirlik Arasındaki Fark

Açıklanabilirlik, modelin bir input için o tahmininin açıklanmasıdır. Bu açıklanabilirlik sonucu ulaşılan sonuçlar/değerler insanların anlayabileceği şekilde olmayabilir.

Örnek: Bir CNN modeli, bir arabayı, araba olarak tahmin ederken tekerlerine odaklanabilir. Bu durumda açıklanabilirlik sonucu insanlara göre mantıklıdır fakat her zaman böyle olacak diye bir şey yok.

Yorumlanabilirlik, benzer fakat farklı bir durumdur. Bir modelin yorumlanabilir olması demek, başından itibaren o modelin insanların anlayacağı şekilde tahmin yapmasıdır.

Grad-CAM Açıklanabilirlik Tekniğidir

Bir modeli debug etmek için Grad-CAM iyi bir yöntem olabilir fakat çok hassas veriler ve modeller için uygun bir yöntem değildir.

TensorFlow-Keras ile Grad-CAM

Grad-CAM tekniğini F.Chollet’in Colab platformunda paylaşmış olduğu yerden alıp birkaç uyarlama yapacağım.

Uyarlanan (F.Chollet) notebook’a buradan ulaşabilirsiniz.

Kodlarda yorum satırı eklediğim için burada ayrıca anlatmıyorum:

Resimleri ve Grad-CAM’i göstermek için bir fonksiyon yazmıştım, onları eklemeden direkt olarak örnek çıktı eklemek istiyorum.

Sonuçlar

Sarı-Kırmızı olan noktalar, modelin tahmin yaparken dikkat ettiği noktaları göstermektedir.

Mavi ise aktivasyonun en az olduğu yerleri göstermektedir.

Kodların Tamamı

Notebook’un tamamına buradan ulaşabilirsiniz. (Part 1–2–3)

--

--