天天看點

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

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

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

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

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

對一個深層的卷積神經網絡而言,通過多次卷積和池化以後,它的最後一層卷積層包含了最豐富的空間和語義資訊,再往下就是全連接配接層和softmax層了,其中所包含的資訊都是人類難以了解的,很難以可視化的方式展示出來。是以說,要讓卷積神經網絡的對其分類結果給出一個合了解釋,必須要充分利用好最後一個卷積層。

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

CAM借鑒了很著名的論文Network in Network(https://arxiv.org/abs/1312.4400)_中的思路,利用GAP(Global Average Pooling)替換掉了全連接配接層。可以把GAP視為一個特殊的average pool層,隻不過其pool size和整個特征圖一樣大,其實說白了就是求每張特征圖所有像素的均值。

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

GAP的優點在NIN的論文中說的很明确了:由于沒有了全連接配接層,輸入就不用固定大小了,是以可支援任意大小的輸入;此外,引入GAP更充分的利用了空間資訊,且沒有了全連接配接層的各種參數,魯棒性強,也不容易産生過拟合;還有很重要的一點是,在最後的 mlpconv層(也就是最後一層卷積層)強制生成了和目标類别數量一緻的特征圖,經過GAP以後再通過softmax層得到結果,這樣做就給每個特征圖賦予了很明确的意義,也就是categories confidence maps。如果你當時不了解這個categories confidence maps是個什麼東西,結合CAM應該就能很快了解。

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

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

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

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

這樣,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

繼續閱讀