熱力圖heatmap

這個方法又稱Class Activation Map(CAM類激活映射),由於這是基於分類問題的一種可視化技術,並且只有將全連接層改爲全局平均池化才能較好的保存圖像的空間信息,這對於訓練是不利的。2017年提出了Grad-CAM,可以在不改變網絡結構的情況下進行初始化。

CAM

CAM論文
在這裏插入圖片描述
CAM的原理大致如上圖所示,生成步驟如下:

  • step1: 輸入一張圖進入CNN(可以是任何網絡)中,最後一層卷積層得到的特徵圖即爲圖中下排的特徵圖;
  • step2: 經過全局平均池化得到每層特徵圖相應權重WiWi
  • step3: 經過一層softmax得到分類結果,查看圖中Australian terrier對應的權值;
  • step4: 將每層特徵圖與其相對應的權值相乘並求和即得到映射圖;
  • step5: 將生成的映射圖resize到原圖的大小,與原圖相疊。

Q:爲什麼使用全局平均池化代替全連接層?
每一層卷積層的feature map認爲仍然保留着圖像的空間信息,而經過全連接層後,特徵圖轉換爲特徵向量會丟失它的空間信息。所以CAM中採用全局平均池化層代替全連接層。
Q:爲什麼使用全局平均池化而不是最大池化?
基於average的CAM可以標出重要影響的所有區域,而基於max的CAM卻只能標註出ROI區域的右下方的一個關鍵點。這個使得基於GMP的CAM在分類效果上與基於GAM的差不多,但是在定位問題上就要顯得遜色一點。

Grad-CAM

Grad-CAM論文

其基本思路與CAM一致,也是通過得到特徵圖對應的權重,最後求一個加權和。它與CAM的主要區別在於求權重w的過程。
Grad-CAM另闢蹊徑,用梯度的全局平均來計算權重。事實上,經過嚴格的數學推導,Grad-CAM與CAM計算出來的權重是等價的。
在這裏插入圖片描述
Grad-CAM生成步驟如下:

  • step1: 輸入一張圖進入CNN(可以是任何網絡)中,最後一層卷積層得到的特徵圖即爲圖中下排的特徵圖;
  • step2: 求出第k個特徵圖對應類別c的權重爲αkc\alpha_k^c,公式如下;
  • αkc=1ZijycAijk\alpha_k^c=\frac{1}{Z}\sum\limits_{i}\sum\limits_{j}\frac{\partial y^c}{\partial A_{ij}^k}
  • 其中,Z爲特徵圖的像素個數,ycy^c是對應類別c的分數(在代碼中一般用logitslogits表示,是輸入softmax層之前的值),AijkA_{ij}^k表示第k個特徵圖中,(i,j)(i,j)位置處的像素值。
  • step4: 求得類別對所有特徵圖的權重後,用LL求其加權和;
  • LGradCAMc=ReLU(kαkcAk)L_{Grad-CAM}^c=ReLU(\sum\limits_k\alpha_k^cA^k)
  • step5: 將生成的映射圖resize到原圖的大小,與原圖相疊。

注意這裏和CAM的另一個區別是,Grad-CAM對最終的加權和加了一個ReLU,加這麼一層ReLU的原因在於我們只關心對類別c有正影響的那些像素點,如果不加ReLU層,最終可能會帶入一些屬於其它類別的像素,從而影響解釋的效果。使用Grad-CAM對分類結果進行解釋的效果如下圖所示:
在這裏插入圖片描述
除了直接生成熱力圖對分類結果進行解釋,Grad-CAM還可以與其他經典的模型解釋方法如導向反向傳播相結合,得到更細緻的解釋。

在這裏插入圖片描述

參考文獻:

  1. 使用matplotlib繪製熱圖(heatmap)
  2. keras可視化代碼
  3. CAM(Class Activation Mapping)通俗篇
  4. 憑什麼相信你,我的CNN模型?(篇一:CAM和Grad-CAM)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章