CNN模型可視化

1 引言

  要說起深度學習中最爲常用和廣爲人知的網絡模型,就要數卷積神經網絡(Convolutional Neural Networks, CNN)了。CNN目前在語音識別,圖像分類,圖像分割,自然語言處理等領域都取得了巨大的成功,雖然這些領域的問題並不相同,但CNN可以自動從大規模數據中提取特徵,從而幫助完成圖像分類、文本分類等問題。
  人們常常說深度學習是一個黑盒,是因爲我們雖然知道CNN從數據中提取了特徵,但並不清楚提取到的特徵具體是什麼,模型又是如何根據這些特徵完成數據的分類等後續問題的。如果不清楚CNN模型的內在判斷機理,僅僅根據在當前的測試集上得到了很好的結果就斷定這是個成功的模型,有時候會鬧出笑話來。
  舉個例子,小明同學想完成一個鑑黃模型,首先他需要收集正常圖片和黃色圖片兩類圖片數據。小明在自己的硬盤中挑選了一些黃色視頻,從中進行截幀,篩選出了一些黃色圖片作爲訓練數據,並從Imagenet訓練集中挑選了一些正常圖片也加入訓練集。小明同學訓練了一個resnet模型來識別這兩類圖片,模型在測試集上效果拔羣,達到了99%的準確率。他很高興,又用這個模型在黃色圖片網站上進行測試,竟發現模型行不通了,這些圖片竟然都被判定爲正常圖片。小明同學百思不得解,後來,在經過模型可解釋性的研究後,小明才發現,原來黃色訓練數據中都帶有視頻網站的logo,因此CNN模型在訓練的過程中出現了過擬合,將該logo當作了黃色圖片的特徵。雖然小明的收集了15萬張黃色圖片作爲訓練數據,數量已經很大,但卻沒料到存在這樣的問題。
  當我們訓練了一個準確率達到了99%的模型,我們卻無法確定這個模型可靠不可靠。好在針對這個問題,過去幾年研究人員除了從理論層面去尋找解釋外,也提出了一些可視化的方法直觀地理解CNN的內部機理。

2 CAM

  那麼小明是如何實現CNN模型的可視化的呢?這就要從一篇論文《Learning Deep Features for Discriminative Localization》講起了。這篇論文中提出了CAM(Class Activation Mapping),它以類似熱力圖的形式展示模型的決策依據,如同在黑夜中告訴我們哪有發熱的物體。我們首先來看看CAM模型可視化的效果。
  作者訓練了一個五分類CNN模型,這個模型共劃分了dome、palace、church、altar、monastery五個類別,作者在原圖上進行了這個五分類模型的可視化,分別得到了五種類別在該圖片上的分類依據。可以很直觀的觀察到,模型把該圖片劃分爲palace的主要依據特徵是圖片中建築的圓形拱門部分,而模型把該圖片劃分爲dome的主要依據特徵則是圖片中的圓形塔建築。CAM可以很直觀地幫助我們瞭解模型把一張圖片劃分爲某一類別的依據是什麼,於是我們就可以結合生活中的經驗來判斷這個模型到底靠不靠譜啦。
在這裏插入圖片描述
  下面我們對CAM進行一個詳細的介紹。
  我們知道,一個卷積神經網絡常常由卷積層、池化層和全連接層構成,全連接層前的最後一層池化層包含了豐富的語義信息和空間信息,全連接層對這些信息重新進行加權組合,用於最終的模型決策。由於全連接層中的信息組合難以用可視化的方法展現出來,因此我們將目光聚焦於最後一層卷積池化層。
在這裏插入圖片描述
  論文Network in Network中提出了GAP(Global Average Pooling)。GAP(Global Average Pooling),顧名思義,全局平均池化層,是一個特殊的池化層。GAP採用取平均值法作爲池化方法,採用一張feature map的長寬作爲池化區域,一個原本大小爲h×w×channels的特徵圖經過全局平均池化之後大小就變成爲了1×1×channels。說白了,GAP就是計算了每一張feature map所有像素的均值。

在這裏插入圖片描述
論文中解釋了GAP的優點:

  • GAP可以更充分的利用空間信息。如果不引入GAP,直接在最後一層池化層後接全連接層,會丟棄目標的空間位置信息;
  • GAP具有更好的魯棒性;
  • 加入GAP後,根據全連接層的權重,可以得到每一張feature map對最終模型決策的重要性;

GAP將每一張feature map都壓縮爲了一個值,一個N通道feature map就被壓縮成了1×1×N的特徵序列。GAP後緊接的是全連接層,全連接層的輸入是特徵序列,輸出是分類結果。下圖很清楚地顯示了GAP和全連接層之間的連接結構。
在這裏插入圖片描述
  從圖中可以看到,GAP的每一個通道的值與每一種類別都有其對應的權重,我們把權重值記爲 wkcw_{k}^{c},這個權值就代表了這個通道的特徵圖對於該類別的貢獻。當我們完成模型訓練,就得到了全連接層的權值,也就是得到了每一張feature map對最終模型決策的重要性,這個重要的特性幫助我們進行CNN的決策可視化。
  依然以上面的五分類模型爲例,如果我們想要解釋模型是根據什麼特徵將一張圖片分類爲dome,首先把dome這個類別對應的所有全連接層上的權重取出來,計算它們與對應特徵圖的加權和,就得到了一個大小與最後一層feature map長寬相同的圖像。由於這張圖象的大小和原圖不一致,我們需要對它進行上採樣,擴大到原圖大小,再疊加到原圖上去,如此就得到了一張可視化的分類圖像,如下所示。
在這裏插入圖片描述
  如果你瞭解resnet的結構,會發現resnet模型中就使用了GAP結構。如果你使用resnet模型進行分類任務,可以很方便地直接使用cam來幫助你更加深入地瞭解你的模型。
下面提供了CAM的tensorflow實現:CAM實現

4 grad-cam

  上述的CAM是一種很好的分析思路,但是卻存在一個問題,我們需要通過重新訓練模型來得到全連接層的權重值,這對於已經上線或存在一定訓練成本的模型來說是很不實用的,因此我們需要另外的方法來計算全連接層的權重值。這就提出了Grad-CAM模型。Grad-CAM來自論文:“Visual Explanations from Deep Networks via Gradient-based Localization”。
該模型具有以下優點:

  1. 使現有的深層模型能夠在不改變其架構的情況下進行解釋,從而避免了可解釋性與準確性之間的平衡;
  2. 可以應用於任何基於CNN的體系結構;

  Grad-CAM可以看作是CAM的提升版,它與CAM的基本思路一致:求得特徵圖對應的權重,對特徵圖計算加權和。它們的區別在於計算特徵圖所對應的權重的過程。
  Grad-CAM提出一種計算特徵圖重要性的新方法。該方法可以簡要描述如下:針對所要預測類別,計算最後一層特徵圖上每一個像素的梯度,並對梯度計算平均值,就得到了該類別對該層特徵圖的權重。得到權重之後的計算方法與CAM相同,並且最終得到的結果與cam的結果是等價的。
  作者提供了兩者的等價性證明,這時一個很容易理解的證明,感興趣的讀者可以閱讀一下。
在這裏插入圖片描述
在這裏插入圖片描述
Grad-CAM的github代碼:Grad-CAM的tensorflow實現

5 總結

  瞭解了上面這些知識,你就可以很容易地得知你的CNN模型到底是依據什麼特徵在進行分類,是否靠譜了。深度學習的模型可解釋性研究是一項非常有價值的任務,在這裏我們也只是介紹了其中一部分的內容。歡迎在評論區共同討論學習~

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