https://github.com/frgfm/torch-cam
Smooth Grad-CAM++: An Enhanced Inference Level Visualization Technique for Deep Convolutional Neural Network Models
abstract
了解深度卷積神經網絡模型是如何執行圖像分類的,以及如何解釋它們的輸出,一直是計算機視覺研究人員和決策者關心的問題。由於對深度模型內部工作的理解不深,這些深層模型通常被稱為黑盒子。為了開發可解釋的深度學習模型,人們提出了幾種方法,如尋找相對於輸入圖像的類輸出的梯度(靈敏度maps)、類激活映射(class activation map,CAM)和基於梯度的類激活映射(Grad-CAM)。當定位到同一類物體多次出現時,這些方法將被執行,但並不適用於所有的CNN。此外,在使用單目標圖像時,Grad-CAM不能完整地捕獲整個目標,這影響識別任務的性能。為了在視覺清晰度、對象定位和解釋單一圖像中多次出現的對象三方面創建一個更強的視覺解釋,我們提出了Smooth Grad-CAM++ ,這是一種結合了來自另外兩種最新技術——SMOOTHGRAD和Grad-CAM++方法的技術。我們的平滑的Smooth Grad-CAM++ 技術提供了在推理級別(模型預測過程)的每個實例上可視化 層、特征圖子集或特征圖中的神經元子集的能力。經過對少量圖像的實驗,與其他方法相比,Smooth Grad-CAM++ 生成了視覺上更清晰的maps,在給定的輸入圖像中具有更好的對象定位結果。
1 Introduction
如今,許多深度學習模型在諸如目標檢測、語音識別、機器翻譯等任務中表現良好。據[2]介紹,在圖像分類[3]、目標檢測[6]、語義分割[7]、圖像字幕[4]、視覺問答[5]等計算機視覺任務上取得了明顯的突破。盡管這些復雜模型的性能得到了改善,但傳統智能模型的有效性仍存在局限性,因為它們缺乏向人類用戶解釋其決策的能力。在安全、健康和自主導航[1]等風險規避領域,這是一個不容忽視的問題。
更多可解釋的模型可以揭示數據中重要但令人驚訝的模式,但其被復雜的模型忽略了[8]。這一點在[9]的肺炎風險預測病例研究中得到了證實。人工智能代理比人類弱,而且還不完全可靠。因此,透明性和可解釋性是神經網絡模型識別故障模式[10]的關鍵。縮小到圖像分類,很少有技術被提出來理解圖像分類模型的決定。一種常用的方法通常被稱為顯著性(saliency,靈敏度或像素屬性),即通過模型找到對最終分類特別有影響的圖像像素區域或像素子集[11,12,13]。這種方法,包括在定位同類多次出現時執行的常規類激活映射(CAM)方法。此外,基於梯度的CAM (Grad-CAM)不能完整地捕獲整個目標,這影響識別任務的性能。盡管Grad-CAM++技術傾向於處理這些限制,但是在類對象捕獲、定位和視覺吸引方面還需要改進。此外,當前可視化技術的實現沒有考慮到特征圖中單個或神經元子集的可視化,僅停留在特征圖層次上。
在本文中,我們將梯度平滑引入到Grad-CAM++中,由此產生的技術使得卷積層、特征圖子集和神經元子集在特征圖中可視化,提高了視覺吸引、定位和類對象捕獲能力。平滑需要對感興趣的樣本圖像添加噪聲,並對每幅噪聲圖像生成的所有梯度矩陣取平均值。Grad-CAM++根據CNN最終卷積特征圖中的特定空間位置的輸出的梯度按像素進行加權。這為feature map中每個像素對於CNN整體決策的重要性提供了一個度量。
2 Background
在本節中,我們將討論之前為理解CNN輸出所做的努力。理解深度CNN的最早努力之一是被稱為Deconvnet的反卷積方法。在這種方法中,數據從較高層的神經元激活流向較低層,然后在處理[14]過程中突出顯示對該神經元有高度影響的圖像部分。這導致了guided backpropagation 的想法。[15]引入了一種新的反卷積方法,稱為引導反向傳播(guided backpropagation),用於將CNN學習到的特征可視化,與現有方法相比,它可以應用於更廣泛的網絡結構。[16]提供了一個可視化工具箱來合成輸入圖像,使神經網絡中的特定單元具有高激活,這有助於可視化單元的功能。工具箱可以顯示來自webcam或圖像文件的輸入圖像的激活,並直觀地了解每個過濾器在每一層做了什么。[17]提出了特定類saliency maps,它是通過在像素空間中進行梯度上升達到最大值而生成的。這被證明是一種更有指導意義的用來合成輸入圖像方法,最大限度地激活一個神經元,並有助於更好地解釋給定的CNN是如何建模一個類[1]的。其他有趣的方法被提出,如Local Interpretable Model-Agnostic Explanations(LIME) [18], DeepLift [19], 和Contextual Explanation Networks (CENs) [20].。
最近的可視化技術有類激活映射(CAM)、梯度加權類激活映射(Grad-CAM)和稱為Grad-CAM++的Grad-CAM的泛化。在CAM中,[11]給出了一個具有全局平均池化(GAP)層的CNN,說明了即使是經過圖像級標簽的訓練,也具有顯著的定位能力。CAM適用於不包含全連接層的改進圖像分類CNN。Grad-CAM是任何基於CNN架構的CAM的一般化方法。CAM局限於狹窄的一類CNN模型,但Grad-CAM廣泛適用於任何基於CNN的架構,不需要再訓練。
計算類分數(Yc)關於最后一個卷積層特征map的梯度:
梯度流后跟着全局平均池化去獲得權重wck:
其中wck捕獲了一個目標類c的特征map K的重要性
Grad-CAM的熱圖是特征maps的權重結合,后面跟着relu函數:
在Grad-CAM++,[1]提出了使用最后一個卷積層的特征maps關於一個特定類分數的正偏導數的權重結合結果作為權重去生成某個類標簽的視覺解釋。作者使用的公式為:
wck用來獲取特定激活map Ak的重要性:
其中用來捕獲關於目標類c的激活map Ak位置(i,j)上的重要性
使用上面的wck替換基礎CAM(這里沒有顯示)假設中的wck,得到:
上面式子左右兩邊求關於Aki,j的偏導數,然后得到每個激活map的每個位置上的重要性:
[8]引入了SMOOTHGRAD,這是一個通過使用輸入x鄰近的隨機樣本和對得到的敏感maps求均值去提高基於梯度的敏感maps的清晰度的簡單方法。計算方法為:
其中n是樣本的數量,表示標准差為 的高斯噪聲。為了提供更強的可視化maps,我們將該光滑技術應用到Grad-CAM++如上所示的梯度計算中。最后的梯度被應用到Grad-CAM++算法中。其為深度CNNs提供了更好的maps(在視覺吸引、定位和捕捉方面)。
3 Method
在這一節我們討論平滑過程(輸入噪聲)和梯度平均。我們還將討論如何使用API來生成結果,以及其他用戶隨后如何使用它。這包括模型、卷積層、feature map和神經元選擇。
3.1 Noise Over Input
通過在原始輸入中加入高斯噪聲,我們將產生的噪聲樣本圖像數目設為n。設置輸入平均值的標准差,從而提供要添加的噪聲程度。我們提供了與算法交互的API。所提供的API使用0作為默認情況下生成的噪聲樣本圖像的數目。這意味着使用的原始輸入的梯度沒有噪聲。默認的標准差值設置為0.15。這些值可以不斷變化,直到產生一個滿意的可視map。
3.2 Gradients Averaging
我們取所有n個噪聲輸入的所有一階、二階和三階偏導數的平均值,並將所得的平均導數應用於計算和
wck。
設Dk1、Dk2、Dk3分別表示feature map k的一階、二階、三階偏導數矩陣,計算出map k的坐標為:
(感覺這式子不對,分子應該是二階的????)
用於替換等式3中的平均梯度,Grad-CAM++權重wck變為:
將該wck代入等式2中,就能夠得到最后的類判別顯著矩陣,其可以用matplotlib或任何其他圖像繪圖庫繪制。這將作為最后的顯著map;該修改后的Grad-CAM++被稱為Smooth Grad-CAM++
3.3 Choosing a Model
任何可學習的深度CNN模型都可以選擇用於可視化。在該論文中,我們使用VGG-16預訓練模型,然后探索其最后一個卷積層
3.4 Choosing Layer
在每個實例中,只有一個卷積層可以被可視化。要可視化的層的名稱被傳遞給API。名稱默認有一個特定的約定,然而,查看訓練模型的摘要將揭示每個卷積層的名稱或唯一標識符。每一層包含K個特征圖,通常維數約為
其中H為輸入高度,W為輸入寬度,P為添加的零padding,Fh為核高度,Fw為核寬度,Sw和Sh分別為卷積的水平和垂直步長。如果沒有提供padding,那么尺度大約為:
ceil()表示向上取整
3.5 Choosing Feature Maps
要指定要可視化的feature map,必須設置filter參數,filter參數是一個整數列表,指定在指定的卷積層中要可視化的feature map的索引。如果為filter參數設置n值,則對應每個feature map生成n個map。例如,如果filter值為:0,1,2,3,則表示各方程中k的取值界線為[0,3]。
回想一下,feature map的數量對應於內核的數量。
3.6 Choosing Neurons
這項工作的主要貢獻之一是我們的技術能夠在特征圖中可視化神經元的子集。當對單個神經元的激活感興趣時,可視化神經元是有用的。例如,[21]使用子集掃描算法來識別卷積神經網絡中的異常激活。平滑的Grad-CAM++將有助於在神經元水平上提供解釋。當region參數設置為true時,我們的API提供了一個選項來可視化指定坐標邊界內的神經元區域。當region參數設置為false並提供一個坐標子集時,只有這些坐標中的神經元被可視化,而其他激活被裁剪為零。平滑的Grad-CAM++可能是一個非常靈活的工具,用於調試CNN模型。
3.7 API Call
必要的參數在API調用期間被傳遞,如下所示:
如果將region參數設為true,則將子集中的兩個坐標作為神經元的邊界值進行可視化處理(即這個為一塊區域)。因此,集合范圍內的所有神經元都被可視化。如果region為false,則會可視化子集列表中指定的每個坐標(這個為幾個點)。
4 Results
從圖1中可以看出,Smooth Grad-CAM++對所學模型的特殊特性給出了更清晰的解釋。例如,在圖1中,Smooth Grad-CAM能夠突出水鳥腿的較大部分。而且,Smooth Grad-CAM++捕獲了更多的類對象(如圖1中的dog圖像所示),並進行了很好的定位。圖2為隨機選取的3張feature map的可視化圖,分別是feature map 10、32和3。每個feature map學習特殊的特征,有些可能是空白的,如圖2所示。圖4和圖5,並顯示了標簽中標注的特定特征圖在神經元水平上的顯著map。這項技術是深入了解CNN模型實際學習內容的一個步驟。
5 Conclusion
一個增強的視覺顯著map可以幫助我們在推理階段加深對深度卷積神經網絡模型內部工作的理解。在本文中,我們提出了Smooth Grad-CAM++,一個增強的用於深度卷積神經網絡的視覺map方法。我們的結果揭示了與現有方法相比,生成的可視化maps的改進。這些maps是通過對給定圖像的許多小擾動進行梯度平均(即類分數關於輸入的導數),並將產生的梯度應用到通用的Grad-CAM算法(Grad-CAM++)中生成的。Smooth Grad-CAM++在對象定位和同類對象的多次出現方面都有很好的表現。它能夠創建特定層、特定特征maps和特定感興趣神經元的maps。這將為機器學習研究者提供關於機器學習模型的解釋性的更好的理解。未來的工作需要進一步的研究來擴展這個技術來處理多個類的場景,以及將其使用在除了CNNs之外的不同的網絡架構。