CAM
CAM
特征圖經(jīng)過 GAP 處理后每一個特征圖包含了不同類別的信息,其具體效果如上圖的 Class Activation Mapping 中的圖片所示,其中的權(quán)重 w 對應(yīng)分類時的權(quán)重。這樣做的缺陷是因為要替換全連接層為 GAP 層,因此模型要重新訓(xùn)練,這樣的處理方式對于一些復(fù)雜的模型是行不通的,Grad-CAM 很好的解決了這個問題,
繪制熱力圖:
- 提取出所有的權(quán)重,往回找到對應(yīng)的特征圖,然后進(jìn)行加權(quán)求和即可
- 通常來說,最后一層卷積層的大小不等于輸入大小,所以我們需要把這個類激活映射上采樣到原圖大小,再疊加在原圖上,就可以觀察到網(wǎng)絡(luò)得到這個輸出是關(guān)注圖片的哪個區(qū)域.
CAM 的意義就是以熱力圖的形式告訴我們,模型通過哪些像素點得知圖片屬于某個類別。
缺點
- 需要修改網(wǎng)絡(luò)結(jié)構(gòu)并重新訓(xùn)練模型,導(dǎo)致在實際應(yīng)用中并不方便!
Grad-CAM
效果圖:
- Grad-CAM 和 CAM 基本思路一樣,區(qū)別就在于如何獲取每個特征圖的權(quán)重,采用了梯度的全局平均來計算權(quán)重.
定義 Grad-CAM 中第個特征圖對應(yīng)類別
的權(quán)重:
其中,
-
表示特征圖的像素個數(shù)
-
表示第
類得分的梯度
-
表示第
個特征圖中,
位置處的像素值
然后再求得所有的特征圖對應(yīng)的類別的權(quán)重后進(jìn)行加權(quán)求和,這樣便可以得到最后的熱力圖,求和公式如下:
代碼實現(xiàn)
參考
- spytensor的博客:“卷積可視化”:Grad-CAM
- global-average-pooling-layers-for-object-localization
- 《Grad-CAM:Visual Explanations from Deep Networks via Gradient-based Localization》
- https://bindog.github.io/blog/2018/02/10/model-explanation/
- Grad-CAM: Why did you say that? Visual Explanations from Deep Networks via Gradient-based Localization