主要工作
CAM與Grad-CAM用於解釋CNN模型,這兩個算法均可得出(類似於熱力圖),可用於定位圖像中與類別相關的區域(類似於目標檢測),如下圖所示:
五顏六色的區域即爲類別相關的區域,表明了CNN爲什麼如此分類,比如CNN注意到了圖中存在牙齒,因此將該圖分爲Brushing teeth。
閱讀了三篇論文,總體來說收穫有:
- 明白全局池化(Global Average Pooling)爲什麼有效
- 明白CAM與Grad-CAM可視化的原理
需注意,CAM與Grad-CAM的可視化只可以解釋爲什麼CNN如此分類,但是不能解釋CNN爲什麼可以定位到類別相關的區域
Global Average Pooling的工作機制
設類別數爲,最後一層含有個特徵圖,求每張特徵圖所有像素的平均值,後接入一個有個神經元的全連接層,這裏有兩個疑問
爲什麼要有個特徵圖
論文的解釋爲“the feature maps can be easily interpreted as categories confidence maps.”。
這麼做效果好是前提,對此的解釋便是,每個特徵圖主要提取了某一類別相關的某些特徵,例如第張特徵圖主要提取圖中與飛機相關的部分,第張特徵圖主要提取圖中與汽車相關的部分。
論文在CIFAR10上訓練完模型後,最後一層特徵圖可視化的結果如下:
從圖來看,基本滿足論文的解釋
求完平均後接入全連接,這麼做的理由亦或是好處是什麼
下一節的“爲什麼如此計算可以得出類別相關區域”部分解釋
CAM
CNN一般有特徵提取器與分類器組成,特徵提取器負責提取圖像特徵,分類器依據特徵提取器提取的特徵進行分類,目前常用的分類器爲MLP,目前主流的做法是特徵提取器後接一個GAP+類別數目大小的全連階層。
CNN最後一層特徵圖富含有最爲豐富類別語意信息(可以理解爲高度抽象的類別特徵),因此,CAM基於最後一層特徵圖進行可視化。
CAM將CNN的分類器替換爲GAP+類別數目大小的全連接層(以下稱爲分類層)後重新訓練模型,設最後一層有張特徵圖,記爲,分類層中一個神經元有個權重,一個神經元對應一類,設第個神經元的權重爲,則第類的(記爲)的生成方式爲:
圖示如下:
生成的Class Activation Mapping大小與最後一層特徵圖的大小一致,接着進行上採樣即可得到與原圖大小一致的Class Activation Mapping
爲什麼如此計算可以得出類別相關區域
用GAP表示全局平均池化函數,沿用上述符號,第類的分類得分爲,GAP的權重爲,特徵圖大小爲,,第個特徵圖第行第列的像素值爲,則有
特徵圖中的一個像素對應原圖中的一個區域,而像素值表示該區域提取到的特徵,由上式可知的大小由特徵圖中像素值與權重決定,特徵圖中像素值與權重的乘積大於0,有利於將樣本分到該類,即CNN認爲原圖中的該區域具有類別相關特徵。式1.0就是計算特徵圖中的每個像素值是否具有類別相關特徵,如果有,我們可以通過上採樣,康康這個這個像素對應的是原圖中的哪一部分
GAP的出發點也是如此,即在訓練過程中讓網絡學會判斷原圖中哪個區域具有類別相關特徵,由於GAP去除了多餘的全連接層,並且沒有引入參數,因此GAP可以降低過擬合的風險
可視化的結果也表明,CNN正確分類的確是因爲注意到了原圖中正確的類別相關特徵
Grad-CAM
CAM的缺點很明顯,爲了得出GAP中的權重,需要替換最後的分類器後重新訓練模型,Grad-CAM克服了上述缺點。
設第類的分類得分爲,GAP的權重爲,特徵圖大小爲,,第個特徵圖第行第列的像素值爲。
計算
Grad-CAM的Class Activation Mapping計算方式如下:
之所以使用ReLU激活函數,是因爲我們只關注對於類別有關的區域,即特徵圖取值大於0的部分
Grad-CAM爲什麼這麼做呢?具體的推導位於快點我,我等不及了,推導比較簡單,這裏就不敲了,直接貼圖
最後三個式子漏了符號,總的來說還是非常驚喜的,如果CAM在可視化的過程中,將特徵圖進行了歸一化,則有
Grad-CAM是CAM的一般化。