https://github.com/adityac94/Grad_CAM_plus_plus
https://github.com/frgfm/torch-cam
Grad-CAM++: Improved Visual Explanations for Deep Convolutional Networks
Abstract
在過去的十年中,卷積神經網絡(CNN)模型在解決復雜的視覺問題方面取得了巨大的成功。然而,考慮到缺乏對其內部功能的理解,這些深層模型被視為“黑盒”方法。最近,人們對開發可解釋的深度學習模型產生了濃厚的興趣,而本文正是朝着這個方向努力的成果。在最近提出的Grad-CAM方法基礎上,我們提出一種廣義的方法,稱為Grad-CAM++,與當前最先進的方法相比,其可以對CNN模型的預測提供更好的視覺解釋,給出更好的對象定位以及解釋在單個圖像中多個對象實例的出現。我們為所提出的方法提供了一個數學推導,該方法使用最后一個卷積層特征圖對特定類得分的正偏導數的加權組合作為權重,為相應的類標簽生成一個可視化的解釋。我們在標准數據集上進行了大量的主觀和客觀的實驗和評估,結果表明Grad-CAM++為一個給定的CNN架構提供了很有前途的人類可解釋的視覺解釋,涉及多個任務,包括分類、圖像標題生成和3D動作識別;還可以使用在新的環境下,如知識蒸餾。
1 INTRODUCTION
與之前可視化CNNs的努力一致,我們也進行了人體研究來測試我們的解釋的質量。這些研究表明,與Grad-CAM生成的相應可視化相比,Grad-CAM ++生成的可視化在底層模型(對於人類用戶)中注入了更多的信任(即更可信)。
通過可視化的例子和客觀的評估,我們還表明,在給定圖像中對象類的弱監督定位方面,Grad-CAM++比Grad-CAM有所改進。
一個好的解釋應該能夠有效地蒸餾知識。這方面的可解釋AI在最近的工作中很大程度上被忽略了。我們表明,在有約束的teacher-student環境中,可以通過使用一個特定的損失函數來提高學生的表現,這個損失函數的靈感來自Grad-CAM++生成的解釋圖。我們為實現這一目標引入了一種訓練方法,並展示了使用我們的方法訓練的學生模型所取得的良好效果。
最后,我們展示了Grad-CAM++在其他任務(除了識別任務以外的其他任務)中的有效性,特別是圖像字幕和3D動作識別。到目前為止,CNN決策的可視化在很大程度上局限於二維圖像數據,這是視頻理解的3D-CNNs的可視化解釋中為數不多的努力之一(最近[8]也是類似的努力)。
2 RELATED WORK
在本節中,我們對近年來在理解CNN預測方面所做的相關努力進行了調查。如前所述,Zeiler和Fergus[1]提出了在這一領域理解深度CNN的第一個努力,並開發了一種deconvolution方法,以更好地理解給定網絡的上層已經學會了什么。“Deconvnet”使數據從高層的神經元激活流向圖像。在這個過程中,圖像中強激活的部分的神經元被突出顯示。Springenberg等人[7]將這項工作擴展到guided backpropagation,幫助理解深度網絡中每個神經元對輸入圖像的影響。這些可視化技術在[9]中進行了比較。Yosinski等人[10]提出了一種方法,通過合成輸入圖像,使神經網絡中的特定單元高度激活,以可視化單元的功能。Simonyan等人在[11]中提出了一種更有指導性的方法來合成最大程度激活一個神經元的輸入圖像。在這項工作中,他們通過在像素空間中進行梯度上升以達到最大值來生成特定類的顯著maps。這個合成的圖像可以作為特定類的可視化結果,並幫助理解給定的CNN是如何建模類的。
從另一個角度,Ribeiro等人[12]引入了LIME(Local Interpretable Model-Agnostic Explanations),這種方法使用更簡單的可解釋分類器(如稀疏線性模型或淺決策樹)對任何深度模型的復雜決策表面進行局部逼近。對於每一個測試點,分析稀疏線性模型的權值給了一個非專家的關於該特征在特定預測中的相關性的直覺。Shrikumar等人[13]最近提出了DeepLift,通過用離散梯度近似instantaneous梯度(相對於輸入的輸出的梯度)來評估每個輸入神經元對特定決策的重要性。這樣就不需要訓練可解釋分類器來解釋每個測試點的每個輸入-輸出關系(如LIME)。在另一種方法中,AI-Shedivat等人[14]提出了 Contextual Explanation Networks(CENs),這是一類共同學習預測和解釋其決策的模型。與現有的posthoc模型解釋工具不同,CENs將深層網絡與特定環境的概率模型結合起來,並以局部正確假設的形式構建解釋。Konam[15]開發了一種算法來檢測負責網絡決策的特定神經元,並額外定位輸入圖像中最大程度激活這些神經元的patches。Lengerich等人[16]提出了一種完全不同的方法,在這種方法中,他們不是用輸入來解釋決策,而是開發了統計度量來評估網絡中隱藏的表示與其預測之間的關系。最近的另一項工作是[17],專注於自動駕駛汽車的可解釋性,訓練了一個視覺注意力模型,然后再訓練一個CNN模型,以獲得潛在的顯著圖像區域,並應用causal filtering來找到真正影響輸出的輸入區域。
盡管最近有了這些發展,但我們離可解釋深度學習模型的期望目標還很遠,我們仍然需要開發算法來生成跨領域使用的可解釋深度學習模型的結果。這些努力的一個關鍵目標是在將這些系統集成到我們的日常生活中時建立對它們的信任。我們在本文的工作主要是受兩種算法的啟發,即CAM [2]和Grad-CAM [6],這兩種算法是目前[18]中廣泛使用的。在CAM中,作者展示了盡管沒有經過明確的訓練,具有全局平均池化(GAP)層的CNN具有定位能力。在一個帶GAP的CNN中,對於一個特定的類c,最終的分類分數Yc可以寫成它經過全局平均池化的最后一個卷積層特征映射Ak的線性組合。
然后特定類的顯著map Lc的每個空間位置(i,j)可以被計算為:
Lcij與特定類c的特定空間位置(i, j)的重要性直接相關,因此可以作為網絡預測的類的可視化解釋。CAM通過使用為給定圖像生成的最后一個卷積層的激活映射,為每個c類訓練一個線性分類器來估計這些權重wkc。但這將其解釋能力限制在具有GAP倒數層的CNN上,並且需要在初始模型訓練后再訓練多個線性分類器(每個類一個)。
Grad-CAM就是為了解決這些問題而建立的。該方法[6]將特定feature map Ak和類c的權重wkc定義為:
其中Z為常數(即激活map中的像素數量)。因此,Grad-CAM可以與任何深度CNN一起工作,其中最終的Yc是激活map Ak的可微函數,而無需任何再訓練或架構修改。為了獲得細粒度的像素尺度表示,Grad-CAM顯著maps被上采樣,並通過點乘與Guided Backpropagation[7]生成的可視化結果融合。這種可視化被稱為 Guided Grad-CAM。
然而,這種方法有一些缺點,如圖1所示。如果圖像包含多個相同的類,Grad-CAM就不能正確地定位圖像中的對象。這是一個嚴重的問題,因為在現實世界中,同一對象在圖像中多次出現是非常常見的。偏導數的非加權平均值的另一個后果是,定位通常不對應整個對象,而是它的位和部分。這可能會妨礙用戶對模型的信任,並妨礙Grad-CAM使深度CNN更加透明的前提。
在這項工作中,我們提出了一種對Grad-CAM的推廣方法,它解決了上述問題,因此可以作為一個給定CNN架構的更好的解釋算法,因此我們將所提出的方法命名為Grad-CAM ++。我們推導出該方法的closed-form解,並精心設計實驗,以客觀和主觀地評價Grad-CAM++的能力。在我們的所有實驗中,我們將我們的方法與Grad-CAM的性能進行了比較,因為它被認為是目前最先進的CNN判別(class specific saliency maps)可視化技術[18]。下面就開始介紹我們提出的方法,從它的直覺開始。
3 GRAD-CAM++: PROPOSED METHODOLOGY
3.1 Intuition
考慮一個顯著map Lc(如等式2中定義的,其中i和j是map 像素上的迭代器)和一個二進制對象分類任務,如果對象不存在,輸出為0,如果存在,輸出為1。(對於圖2中的圖像I,網絡輸出為1)Ak表示第k個feature map的可視化結果。根據之前的工作[1],[19],每個Ak都是由一個抽象的視覺模式觸發的。在本例中,如果檢測到視覺模式,則Akij = 1,否則為0。(圖2中,暗的區域對應Akij = 1)。希望對於導致物體存在的feature map像素來說,導數是高的。假設導數map為:
代入等式4中的值到等式3中,我們將獲得Grad-CAM實例中給定圖像I的feature map權重,三個feature map的權重分別為。這里Z = 80,即feature map的像素數量。Grad-CAM的顯著map Lcgrad-cam可以使用等式2得到(參考圖2)。與輸入圖像I相比,很明顯,圖像中物體的空間足跡對於Grad-CAM的可視化很重要。因此,如果一個有略微不同的方向或視圖的對象(或激發不同feature map的部分對象)多次出現,不同的feature map可能會被不同的空間足跡激活,而具有較小足跡的feature map會在最終的顯著map中消失。
這個問題可以通過對像素級梯度求加權平均來解決。因此,通過顯式編碼權重wck的結構來重構等式3:
其中relu是Rectified Linear Unit activation function。這里是類c和卷積feature map Ak的像素梯度的加權系數:
出現在所有feature maps的對象使用相等的重要性,即相等的來強調。
在等式5中只考慮正梯度的想法類似於Deconvolution [1] 和Guided Backpropogation [7]。wck抓住了一個特定的激活圖Ak的重要性,我們傾向於認為正梯度指示增加輸出神經元的激活的視覺特征,而不是指示抑制輸出神經元的激活。對於這一“正梯度”假設的實證驗證將在7.1節后面進行。
我們現在介紹所提出的方法。
3.2 Methodology
我們提出一個方法去獲得一個特定類c和激活map k的梯度權重。Yc是一個特定類c的分數。將等式1和等式5結合在一起,得到:
其中,(i,j)和(a,b)是相同激活map Ak的迭代器,用來避免混亂。為了不失一般性,我們在推導中去掉了relu,因為它僅作為允許梯度回流的閾值。等式兩邊求關於Akij的偏導數:
再進一步求Akij的偏導數:
然后得到:
將該值代入等式5,得到Grad-CAM++的權重:
明顯,與等式3對比,如果,則Grad-CAM++就等價為Grad-CAM。因此Grad-CAM++可以認為是Grad-CAM的廣義形式。
原則上,類分數Yc可以是任意預測;唯一的約束條件是Yc必須是光滑函數。由於這個原因,與Grad-CAM(它采用倒數第二層表示作為它們的類分數Yc)不同,我們通過指數函數傳遞倒數第二層分數,因為指數函數是無限可微的。
在圖1中,我們可視化地顯示了Grad-CAM++相對於Grad-CAM的優勢。三種方法CAM、Grad-CAM和Grad-CAM++的對比可見圖3:
3.3 Computation Analysis
計算高階導數的時間開銷與Grad-CAM保持相同的階數,因為只使用對角項(沒有交叉高階導數)。如果我們通過指數函數傳遞倒數第二層分數,而最后一層只有線性或ReLU激活函數,那么高階導數的計算就變得微不足道了。設Sc為c類的倒數第二層分數。
值可以使用能夠實現自動微分的機器學習庫TensorFlow和Pytorch得到。
現在,假設一個ReLU激活函數,f(x) = max(x,0),其導數為:
等式16在激活函數是線性函數時都是成立的。將其代入等式14,得到:
將等式17和18代入等式10,得到:
使用計算圖中的一個后向傳播就能夠計算得到所有梯度權重(等式5)。為了簡化,我們使用的指數函數。其他光滑函數,如softmax激活函數,也可以帶着對應的closed-form表達式來使用,以計算權重。softmax的梯度權重的導數在Section 3.4給出。
給定圖像的顯著maps Lc 以前向激活maps的線性組合計算得到,后面跟着relu層:
與Grad-CAM類似,為了生成最終的顯著maps,我們將上采樣(到圖像分辨率)的顯著maps Lc與Guided Backpropagation生成的像素空間可視化結果進行點乘。因此,生成的表示被稱為Guided Grad-CAM++。
3.4 Gradient Weights for Softmax Function
和指數函數一樣,softmax函數是平滑的,而且經常在分類場景中使用來獲得最后的類概率輸出。在這種情況下,最后類分數Yc為:
其中索引k遍歷所有輸出類,而Sk是倒數第二層中與輸出類k相關的分數。
如果神經網絡只有線性或ReLU激活函數,那么為0(等式16)
將等式23、24代入等式10,得到梯度權重。注意,盡管在softmax函數的情況下評估梯度權重比指數函數的情況更復雜,它仍然可以通過計算項的計算圖的一次后向傳遞來計算。
4 EXPERIMENTS AND RESULTS
5
6
省略
7 DISCUSSION
7.1 Why only Positive Gradients in Grad-CAM++?
在3.2節中,我們假設正梯度關於激活maps Ak中每個像素的加權組合與給定類c(等式5)的激活map的重要性強相關。在這一節中,我們通過放松梯度的約束來測試這種假設的正確性。我們采用與我們對Pascal VOC 2007 val集進行客觀評價研究時使用的相同的VGG-16模型(章節4.1),並使用略有不同的wck重新做實驗:
可見移除了relu函數。如等式10中計算得到,不同之處是,這里對於負梯度,
的值不為0,而是:
我們將其稱為Grad-CAM++的修改版,表示為,其沒有和Grad-CAM++一樣只使用正梯度。表7可見
的效果沒有Grad-CAM好。該結果支持了我們關於正梯度對於決定給定類c的激活map Ak的重要性是十分重要的假設。
7.2 Does Grad-CAM++ do well because of larger maps?
人們可能會質疑Grad-CAM++做得很好是否是因為每張圖片中都有更大的解釋maps。一般來說,對於給定的圖像I和類c,如果提供給模型作為輸入的解釋圖區域面積更大,我們預計分類分數下降的幅度更小。我們繪制ROC曲線去分別測量Grad-CAM和Grad-CAM++中,遮擋map的空間區域和遮擋后類的相應置信度之間的權衡(即數量, 其中OcI是遮擋圖像的新分數,YcI是使用整張圖作為輸入的原始分數)。閾值參數θ由0到1以等間隔的離散間隔變化以生成曲線。對於給定的θ,遮擋圖像分數為
。k、j為像素上的迭代器,γ為每個解釋區域像素值經驗分布的θ-quantile。
。每個圖像的經驗分布分別計算,然后在數據集上求平均。圖10顯示了結果。我們可以觀察到,在每一個quantile(θ),無論空間范圍如何,Grad-CAM++突出顯示的區域與Grad-CAM一樣忠實或更忠實於基礎模型。
8 CONCLUSION
在這項工作中,我們提出了一種基於CNN架構的可視化解釋的通用方法,Grad-CAM++。我們為我們的方法提供了一個推導,並表明它是早期廣泛使用的基於梯度的視覺解釋方法的一個簡單但有效的推廣版本。我們的方法解決了Grad-CAM的缺點——特別是圖像中類的多次出現和對象定位不佳。我們使用著名的標准CNN模型和數據集(ImageNet和Pascal VOC),客觀地(對被解釋的模型的忠實性)和主觀地(調用人類信任)驗證了我們的方法的有效性。我們還證明了Grad-CAM++在圖像標題生成和視頻理解(動作識別)等任務上也有優勢。在第5節中,我們提出了一個研究方向,深度網絡的解釋不僅用於理解模型決策背后的推理,還用於訓練較淺的學生網絡。學生網絡在運用解釋方法提取知識時,比原來的教師網絡學習了更好的表示(較低的測試錯誤率)。未來的工作包括在teacher-student場景中細化損失公式,以便更有效地通過Grad-CAM++的解釋提取知識。我們也希望在一張圖中有多個類的情況下更詳細地研究該方法,以及探索擴展我們的算法來解釋由其他神經網絡架構,如遞歸神經網絡、short-term memory網絡和生成對抗網絡,產生的決策的可能性。