【原理】CAM(類激活映射)模型可視化

前言

深度學習如火如荼,神經網絡的可解釋性一直是討論的熱點,其實可解釋性常和模型的可視化聯繫在一起,模型可視化或者模型可解釋說到是對某一類別具有可解釋性,直接畫出來特徵圖並不能說明模型學到了某種特徵。這裏主要講一下基於類激活映射(Class Activation Mapping)的可視化。這個技術其實提出時間比較早,但是效果較好,如果希望做模型可視化,推薦大家研究一下,近期我也是用到了這個模型可視化,所以這裏主要先針對原理進行簡要的闡述,希望可以加深自己的認識。

可視化方法

其實可視化有很多方法:
1 直接可視化:最容易被想到的一種方式就是對特徵圖進行可視化,想法是對的,直接對 feature map 進行粗暴的 resize,或者更爲精細點的操作是進行反捲積,將 feature map 放大至和原圖一樣的大小,但是這樣智能算是特徵圖的可視化,並非模型的可視化,模型的可視化要求其對分類有一定的解釋性或者說依據,而且特徵圖可視化,由於特徵圖的通道數比較多且複雜,不同的特徵圖學習到的特徵是不一樣的,我們如果只對特徵圖進行可視化,檢查的時間比較長,你要人眼遍歷所有可視化的結果,所以比較麻煩。
2 反捲積(Deconvolution):能夠一定程度上“看到”CNN模型中較深的卷積層所學習到的一些特徵,當然,目前此技術在分割領域經常用到,利用反捲積進行可視化,其實重要的部分是最大池化,池化操作通過成倍的縮小feature maps的尺寸(高、寬),使得一個特徵可覆蓋的原圖的範圍(感受野Receptive Field)成倍的增大,這樣高層的特徵可以更快地表徵圖片的宏觀信息。而將卷積操作的步幅(stride)設置爲大於1的值,理論上可以獲得與池化操作相同的效果,但是在反捲積可視化時,需要用到最大池化的索引,由於不同圖片的池化索引各不相同,這樣,即使是相同位置的特徵通過反捲積網絡後,可視化結果也完全不同(池化索引相當於給了不同圖片獨特的身份標識)。如果去掉池化層,圖片的身份標識沒有了,自然無法生成與原圖對應的可視化結構。
3導向反向傳播(Guided-backpropagation):這個主要是解決網絡中沒有池化層的可視化,就是通過反向傳播,計算該特徵值相對於該輸入圖片的梯度。反向傳播和反捲積最大的不同,就是數值通過通過ReLU時計算方式的不同。而導向反向傳播可視化方法,是兩者的結合。導向反向傳播(Guided-Backpropagation)相當於對普通的反向傳播加了指導,限制了小於0的梯度的回傳,而梯度小於0的部分對應了原圖中 削弱了我們想要可視化的特徵 的部分,這些部分正是我們不想要的。還記得我們的目標嗎,找出最大化激活某個特徵的圖片部分。
下圖是在解釋三者的不同:
在這裏插入圖片描述在這裏插入圖片描述
使用普通的反向傳播得到的圖像噪聲較多,基本看不出模型的學到了什麼東西。使用反捲積可以大概看清楚貓和狗的輪廓,但是有大量噪聲在物體以外的位置上。導向反向傳播基本上沒有噪聲,特徵很明顯的集中貓和狗的身體部位上。
下面講一下CAM可視化

CAM可視化

對一個深層的卷積神經網絡而言,通過多次卷積和池化以後,它的最後一層卷積層包含了最豐富的空間和語義信息,再往下就是全連接層和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。
在這裏插入圖片描述
從圖中可以看到,經過GAP之後,我們得到了最後一個卷積層每個特徵圖的均值,通過加權和得到輸出(實際中是softmax層的輸入)。需要注意的是,對每一個類別C,每個特徵圖k的均值都有一個對應的,記爲。CAM的基本結構就是這樣了,下面就是和普通的CNN模型一樣訓練就可以了。訓練完成後纔是重頭戲:我們如何得到一個用於解釋分類結果的熱力圖呢?其實非常簡單,比如說我們要解釋爲什麼分類的結果是羊駝,我們把羊駝這個類別對應的所有取出來,求出它們與自己對應的特徵圖的加權和即可。由於這個結果的大小和特徵圖是一致的,我們需要對它進行上採樣,疊加到原圖上去,如下所示。
在這裏插入圖片描述

Grad-CAM可視化

CAM的解釋效果已經很不錯了,但是它有一個致使傷,就是它要求修改原模型的結構,導致需要重新訓練該模型,這大大限制了它的使用場景。如果模型已經上線了,或着訓練的成本非常高,我們幾乎是不可能爲了它重新訓練的。於是乎,Grad-CAM橫空出世,解決了這個問題。
Grad-CAM使用流入CNN最後一層卷積層的梯度信息來理解每個神經元對於目標決定的重要性。
在這裏插入圖片描述
給定一個圖像和一個目標類(例如,'虎貓’或任何其他類型的可微分輸出)作爲輸入,我們將圖像傳播通過模型的CNN部分,然後通過特定任務的計算來獲得該類別的原始分數。對於所有類,除了所需的類(虎貓)的梯度設置爲1,其餘的梯度設置爲零。然後將該信號反向傳播到所關注的整形卷積特徵圖,其中我們結合起來計算粗糙的Grad-CAM定位(藍色熱力圖),它表明了模型需要看哪裏去做出精確決定。最後,我們將熱力圖與導向反向傳播逐點相乘,獲得高分辨率和特定概念的Guided Grad-CAM可視化。注意這裏和CAM的另一個區別是,Grad-CAM對最終的加權和加了一個ReLU,加這麼一層ReLU的原因在於我們只關心對類別c有正影響的那些像素點,如果不加ReLU層,最終可能會帶入一些屬於其它類別的像素,從而影響解釋的效果
在這裏插入圖片描述

Grad-CAM++可視化

GradCAM++ vs GradCAM 優點
1 定位更準確
2 更適合同類多目標的情況
在這裏插入圖片描述

文獻:

【1】Learning Deep Features for Discriminative Localization
【2】Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization
【3】Grad-CAM++: Generalized Gradient-based Visual Explanations for Deep Convolutional Networks

參考

【1】點擊
【2】【論文翻譯】Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization ICCV 2017
【3】2019-09-03 Grad-CAM++ 原理及實現
【4】專欄

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