原理分析-CAM模型可視化(可解釋)

> 前言:模型在訓練的時候,你不知道模型到底學到了什麼,就像是你教一個孩子學習東西,最終你給一兩個示例,孩子分對了,但是孩子真的學習到你想要的區分特徵了麼,也就是說 get 到你的點了麼?模型可視化就是做的這件事情

模型有很多的可視化方案:

直接可視化:最容易被想到的一種方式就是對特徵圖進行可視化,想法是對的,直接對 feature map 進行粗暴的 resize, 或者更爲精細點的操作是進行反捲積,將 feature map 放大至和原圖一樣的大小,但是這樣智能算是 特徵圖的可視化,並非模型的可視化,模型的可視化要求其對分類有一定的解釋性或者說依據。

CAM可視化:所以目前所說的模型可視化或者模型可解釋說到是對某一類別具有可解釋性,直接畫出來特徵圖並不能說明模型學到了某種特徵,這時候就用到了CAM(Class Activation Mapping)

對一個深層的卷積神經網絡而言,通過多次卷積和池化以後,它的最後一層卷積層包含了最豐富的空間和語義信息,再往下就是全連接層和softmax層了,其中所包含的信息都是人類難以理解的,很難以可視化的方式展示出來。所以說,要讓卷積神經網絡的對其分類結果給出一個合理解釋,必須要充分利用好最後一個卷積層。在這裏插入圖片描述
CAM借鑑了很著名的論文Network in Network(https://arxiv.org/abs/1312.4400)_中的思路,利用GAP(Global Average Pooling)替換掉了全連接層。可以把GAP視爲一個特殊的average pool層,只不過其pool size和整個特徵圖一樣大,其實說白了就是求每張特徵圖所有像素的均值。

在這裏插入圖片描述
GAP的優點在NIN的論文中說的很明確了:由於沒有了全連接層,輸入就不用固定大小了,因此可支持任意大小的輸入;此外,引入GAP更充分的利用了空間信息,且沒有了全連接層的各種參數,魯棒性強,也不容易產生過擬合;還有很重要的一點是,在最後的 mlpconv層(也就是最後一層卷積層)強制生成了和目標類別數量一致的特徵圖,經過GAP以後再通過softmax層得到結果,這樣做就給每個特徵圖賦予了很明確的意義,也就是categories confidence maps。如果你當時不理解這個categories confidence maps是個什麼東西,結合CAM應該就能很快理解。

我們重點看下經過GAP之後與輸出層的連接關係(暫不考慮softmax層),實質上也是就是個全連接層,只不過沒有了偏置項,如圖所示:

在這裏插入圖片描述
從圖中可以看到,經過GAP之後,我們得到了最後一個卷積層每個特徵圖的均值,通過加權和得到輸出(實際中是softmax層的輸入)。需要注意的是,對每一個類別C,每個特徵圖k的均值都有一個對應的,記爲。CAM的基本結構就是這樣了,下面就是和普通的CNN模型一樣訓練就可以了。訓練完成後纔是重頭戲:我們如何得到一個用於解釋分類結果的熱力圖呢?其實非常簡單,比如說我們要解釋爲什麼分類的結果是羊駝,我們把羊駝這個類別對應的所有取出來,求出它們與自己對應的特徵圖的加權和即可。由於這個結果的大小和特徵圖是一致的,我們需要對它進行上採樣,疊加到原圖上去,如下所示。

在這裏插入圖片描述
這樣,CAM以熱力圖的形式告訴了我們,模型是重點通過哪些像素確定這個圖片是羊駝了。

那麼改進版的 Grad-CAM 是幹什麼的?

前面看到CAM的解釋效果已經很不錯了,但是它有一個致使傷,就是它要求修改原模型的結構,導致需要重新訓練該模型,這大大限制了它的使用場景。如果模型已經上線了,或着訓練的成本非常高,我們幾乎是不可能爲了它重新訓練的。於是乎,Grad-CAM橫空出世,解決了這個問題。
Grad-CAM的基本思路和CAM是一致的,也是通過得到每對特徵圖對應的權重,最後求一個加權和。但是它與CAM的主要區別在於求權重的過程。CAM通過替換全連接層爲GAP層,重新訓練得到權重,而Grad-CAM另闢蹊徑,用梯度的全局平均來計算權重。事實上,經過嚴格的數學推導,Grad-CAM與CAM計算出來的權重是等價的。

非常好的一個資料: https://mp.weixin.qq.com/s/4Tq43DEaUk_rtLubcztyNw

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章