Grad-CAM:Visual Explanations from Deep Networks via Gradient-based Localization
1.Abstract
我們提供了一種方法(Grad-CAM)高亮圖片中對預測產生影響的重要區域:
1.在CNN的模型家族里適用范圍廣:image classfication,image captioning,VOA。
2.提供對CNN失敗樣例的觀察(顯示看似不合理的預測的合理解釋)。
3.在 ILSVRC-15弱監督定位任務上比以往的方法表現更好。
4.更忠實於底層模型。
5.通過辨認數據集的偏移來實現模型泛化。
6.幫助未經訓練的用戶成功地區分“更強”的網絡和“更弱”的網絡,即使兩者做出的預測完全相同。
2.Introduction
-
卷積神經網絡在很多的任務中以及取得了重大突破,但是對於解釋它們為什么這么預測,預測了什么是必須的是很有必要的。Consequently, when today’s intelligent systems fail, they fail spectacularly dis-gracefully, without warning or explanation, leaving a user staring at an incoherent output, wondering why. 摘選自原論文。
-
Class Activation Mapping(CAM)這個方法提供了一種在圖像分類任務上識別 discriminative regions的方法(我的理解是將圖片中對分類發揮作用的區域找出來),但是這個方法移除了CNN網絡的全連接層( Section Approach會介紹這個方法)。論文中提出的方法Grad-CAM並沒有修改模型結構,是CAM的泛化,並且能夠應用在更大范圍的CNN模型家族(mage classfication,image captioning,VOA)。
-
進行了幾種可視化方法的優缺點介紹對比
-
Guided Back-propagation 和 Deconvolution是高分辨率的並且高亮了細粒度的細節,但是並不能區分類別。如圖1b,1h,Guided Backprop只提取出了圖片中的貓與狗的所有紋理。
-
CAM,Grad-CAM具有很高的類別區分性。如圖1c,1i and 1f,1l。其實這里也能看出來,ResNet比VGG16更優一些,以貓為例子,1c(VGG16)的注意力在身體上,1f(ResNet)在頭部區域,ResNet關注的位置要比VGG16更符合人類的直覺。
-
將上面二者的優點進行結合,得到了Guided Grad-CAM,如圖1d,1j,
-
論文還指出了,Grad-CAM得到的結果,與遮擋敏感性的實驗結果非常類似。
-
需要額外指出的是:Grad-CAM, CAM得到的localization map的尺寸與最后一個卷積層得到的feature maps的高寬相同,小於原始輸入圖片的分辨率。因此1c,1i,1f,1l是localization map進行上采樣(雙線性差值)並且與輸入圖片疊加得到的。在 Section Approach有Grad-CAM, CAM的實現方法介紹。
-
3.Approach
- Grad-CAM實現方法,
論文中給出的圖是這樣的,筆者單獨把Image Classification的實現方法畫了出來,可以結合原論文去理解。當然也可以自行忽略我畫的,,,,
將Localization Map上采樣(雙線性差值)之后,再與Guided Backprop得到的結果點乘,就得到了Guided Grad-CAM。
同時,論文指出Deconvolution得到的高分辨率圖片有偽影,Guided Backprop得到的結果具有更少的噪聲。
-
CAM實現方法
CAM的思想是去掉全連接層,加一層GAP,然后通過論文中的這個公式:
求出每個類別對應的分數。模型訓練完之后,又可以通過論文中的這個公式得到\(L^c_{CAM}\)
圖片描述更加好懂一些:
4.Evaluating Localization
4.1. Weakly-supervised Localization
這小節主要介紹了Grad-CAM在弱監督的定位任務上的表現。筆者對弱監督學習還不是很了解,因此不介紹太多。
4.2 Weakly-supervised Segmentation
使用Grad-CAM作為的弱監督定位種子,在VGG16網絡上,達到的IoU(一個指標)比CAM要高。
5.Evaluating Visualizations
5.1 Evaluating Class Discrimination
作者在PASCAL VOC 2007中選擇了一部分圖像(每個圖像包含兩個注釋的類別)進行驗證,他Deconvolution、Guided Backpropagation和Grad-CAM分別結合這兩個方法得到Deconvolution Grad-CAM和Guided Grad-CAM一共四個方法去對待測樣本進行可視化分析,然后在自己的組織Amazon Mechanical Turk (AMT)抽選志願者進行人為的識別,通過人和機器的對比觀察在前向過程中哪一種方法對於類別分類可解釋有較好的結果。其實驗結果如下:
這一小節讀得有點磕磕絆絆。
5.2 Evaluating Trust
Grad-CAM可以更好地評判模型的可信度。作者讓54個AMT workers進行如下圖這樣的打分,使用Grad-CAM進行的可視化在評判模型的可信度上表現更好。
5.3 Faithfulness vs. Interpretability
這一小節是比較可視化方法對模型的忠實度。是通過遮擋實驗進行評估的,發現Grad-CAM的可視化區域的遮擋敏感性更高,說明該方法更加忠實於模型。
文中提到了一個 rank correlation(秩相關)。
6.Diagnosing image classification CNNs with Grad-CAM
6.1 Analyzing failure modes for VGG-16
一些錯誤的預測,通過Grad-CAM進行觀察后,似乎有了合理的解釋。從上圖也可以看出,作者認為CNN模型將樣本分類錯誤是有依據的,比如說對於第一列的樣本,CNN模型將其分類成sandbar,但是實際上groundtruth為volcano,因為CNN模型的分類過程他的注意力主要集中在了sandbar的這個目標上,所以對於最終的分類過程顯示sandbar更加容易被預測作為結果。
6.2 Effect of adversarial noise on VGG-16
在給神經增添一些不可感知的擾動之后,使得神經網絡預測出現失誤,但是以類別cat或者dog進行Grad-CAM時依然可以很好地標記出二者的位置,關於神經網絡在對抗樣本的脆弱性方面的知識挺有意思的好像,讀者想了解更多https://cloud.tencent.com/developer/article/1119884
6.3 Identifying bias in dataset

對於一個判斷是醫生還是護士的任務,有偏置的訓練集里醫生主要是男性,護士主要是女性,模型學會了關注hairstyle,face去進行預測。而當把訓練集進行調整之后,醫生類別里添加更多的女醫生,護士類別里添加更多的男護士,模型學會了從服飾,聽診器來進行預測。同時論文作者還提了一句對於科學和社會公平的思考:“ This experiment demonstrates a proof-of-concept that Grad-CAM can help detect and remove biases in datasets, which is important not just for better generalization, but also for fair andethical outcomes as more algorithmic decisions are made in society.”
7. Grad-CAM for Image Captioning and VQA
這一節作者又介紹了Grad-CAM在 Image Captioning and VQA 上的良好表現,筆者在這個方面知識不是很全面,因此只通讀了一下,暫不做總結。
What if
首先需要記住的是,這個方法最本初的用途是:找到圖片中使得神經網絡做出預測的區域。
當我理解了Grad-CAM的實現方法之后:
有了一個疑惑一直縈繞在心頭,為什么不直接反向傳播,然后得到預測分類c的分數score關於輸入圖片的像素值pixel的導數 $\partial score^c \over \partial pixel $,這樣不就找到了哪些像素最能影響神經網絡做出這個決策。但實際上,這個叫做Vanilla backpropagation的方法可視化效果不好:
圖片引自:https://github.com/kazuto1011/grad-cam-pytorch
那為什么這個原始的方法效果不好呢?問題似乎出現在relu函數這里,引用了這篇博客里的示意圖,\(f\)是前向傳播時經過relu函數的矩陣,\(R^{l+1}_i\)是上游傳下來的梯度值,\(R^{l}_i\)是經過relu函數反向傳播得到的梯度值。
可以看到,反向傳播時,上游梯度很多的正值丟失了,同時一些負值傳了下來。但正值是對最終結果做出“促進”作用的,反之亦然。或許是因為這個原因吧。
所以出現了Guided Backpropagation,這個方法對梯度反向傳播通過relu節點時的計算方法做了修改:
得到的可視化結果好了許多:
圖片引自:https://github.com/kazuto1011/grad-cam-pytorch
但也發現了Guided Backpropagation的類區分性差了一些,比如第二列的貓和狗,不如Grad-CAM,感興趣的讀者可以去上面的github鏈接查閱更多可視化結果。
至此,從Vanilla backpropagation -->Guided Backpropagation-->CAM-->Grad-CAM介紹完畢。
8.Summary
昨天一篇公眾號發了一篇文章,有一句話另外印象深刻:作為一名工科學生,光有天馬行空的想法還不夠,還得具備實現想法的能力。
這不說的就是我自己,花了一天時間嘗試去搭deconvnet,還失敗了,接下來准備把pytorch系統學一遍,對里面的各種常用操作有個大致了解,這樣做實驗應該順暢一些。
總結的一些點:
-
Grad-CAM的實現方法,及其更好的效果(更高的類區分性,不用修改模型結構等)
-
Grad-CAM可以幫助觀察數據集的偏移,6.3護士和醫生的例子。
-
論文涉及了到的還不甚了解的概念,需要填坑
- 秩相關
- 雙線性差值
- 神經網絡關於對抗樣本的脆弱性
-
Deconvlution得到的結果有偽影,因此作者使用了Grad-CAM + Guided Backpropagation得到 Guided Grad-CAM
-
Google in English,一些內容,中文網上沒有好的闡述,但是有些外國友人的博客寫得很明白。