CAM:https://arxiv.org/abs/1512.04150
Grad-CAM:https://arxiv.org/pdf/1610.02391v1.pdf
Grad-CAM++:https://arxiv.org/abs/1710.11063
最近看了網上很多關於這三篇解讀的文章,但是對於一個“CAM新人“來說,還是遇到了很多疑惑。
下面總結幾點:
1.CAM能讓我們對CNN網絡有很好的解釋作用,利用特徵圖權重疊加的原理,獲得熱圖,主要公式如下:
在說明上述公式前,先來了解一下GAP(注意GAP是沒有權重可言的):GAP就是對特徵圖的均值化,例如輸入一個維度爲 5*5*10特徵圖,其中10代表通道,那麼經過GAP輸出後,維度大小則爲1*1*10,也就是把每一張特徵圖全局做了一個均值,得到一個值。GAP相比與原有FC層大大減少了參數,但是缺點是網絡收斂比較慢。在CAM中主要是就是利用GAP+“小的FC層”,代替了原有的分類層。但是其實在維度上看起來就是相當於一個FC層。
上述公式中A表示網絡最後的卷積層輸出大小爲w*h*n,其中w則爲最後那個“小的FC”層的權重,C爲類別數。現在來重新推導一下這個過程:
最後一層的卷積輸出:w*h*n,然後經過一個GAP得到:1*n,然後經過一個權重爲n*c的小fc層,得到大小爲1*c的分類向量。
整個過程如下圖:
那麼這時候我會想,引用GAP究竟是爲了什麼,我可不可以不用GAP算出熱圖,從維度關係上分析:對一般網絡而言最後一層卷積層假如輸出大小爲5*5*256這種形式,那麼FC層權重維度肯定是[256*5*5,C],但是這時候注意 也就是對於一個類別來說有256*5*5個權重,這時候這個權重大小是無法和256想對應的,也就是W和A是對應不上的,故不能得到熱圖。。。
2.爲了解決CAM必須插入GAP,修改原始網絡,需要重新訓練模型的問題,Grad-CAM其基本思路是對應於某個分類的特徵映射的權重可以轉換爲 利用反傳梯度來表達這個權重。
概述圖:
然後列出兩個關鍵公式: 從公式1可以看出直接把GAP當做了一次均值計算,並沒有直接在網絡中引入GAP層,Z表示每張特徵圖的像素點總數。
(1)
(2)之所以使用ReLU激活函數,是因爲我們只關注對於類別有關的區域,即特徵圖取值大於0的部分
3 ,grad_cam++:
相比grad_cam,定位更準確,能夠適用於一張圖片中的同類多目標的情況
主要公式:主要的變動是在對應於某個分類的特徵映射的權重表示中加入了ReLU和權重梯度。
以上三種方法的概述圖: