本文首發於:行者AI
在整篇文章論述開始之前,我們先做一些概念性的講解鋪墊。卷積神經網絡的各層卷積單元在模型網絡中實際上有充當了目標檢測器的作用,盡管沒有提供對目標位置的監督。雖然其擁有在卷積層中定位對象的非凡能力,但當使用全連接層進行分類時,這種能力就會喪失。基於此,提出了CAM(類激活映射)的概念,采用全局平均池化,以熱力圖的形式告訴我們,模型通過哪些像素點得知圖片屬於某個類別,使模型透明化和具有可解釋性,如下圖所示:
1. Global Average Pooling的工作機制
這里我們假設最后的類別數為n,最后一層含有n個特征圖,求每張特征圖所有像素的平均值,后接入一個有n個神經元的全連接層。要有n個特征圖的原因在於,每個特征圖主要提取了某一類別相關的某些特征。
2. 什么是CAM?
CNN最后一層特征圖富含有最為豐富類別語意信息(可以理解為高度抽象的類別特征),因此CAM基於最后一層特征圖進行可視化。CAM能讓我們對CNN網絡有很好的解釋作用,利用特征圖權重疊加的原理獲得熱圖,詳細工作原理如下圖所示。
設最后一層有n張特征圖,記為\(A^1,A^2,...A^n\),分類層中一個神經元有n個權重,一個神經元對應一類,設第\(i\)個神經元的權重為\(w^1,w^2,...w^n\),則第c類的CAM的生成方式為:
生成的CAM大小與最后一層特征圖的大小一致,接着進行上采樣即可得到與原圖大小一致的CAM。
2.1. 為什么如此計算可以得到類別相關區域
用GAP表示全局平均池化函數,沿用上述符號,第c類的分類得分為\(S_c\),GAP的權重為\(w_i^c\),特征圖大小為\(c_1*c_2\),第\(i\)個特征圖第\(k\)行第\(j\)列的像素值為\(A_{kj}^i\),則有:
特征圖中的一個像素對應原圖中的一個區域,而像素值表示該區域提取到的特征,由上式可知\(S_c\)的大小由特征圖中像素值與權重決定,特征圖中像素值與權重的乘積大於0,有利於將樣本分到該類,即CNN認為原圖中的該區域具有類別相關特征。式1就是計算特征圖中的每個像素值是否具有類別相關特征,如果有,我們可以通過上采樣,看看這個像素對應的是原圖中的哪一部分。GAP的出發點也是如此,即在訓練過程中讓網絡學會判斷原圖中哪個區域具有類別相關特征,由於GAP去除了多余的全連接層,並且沒有引入參數,因此GAP可以降低過擬合的風險。可視化的結果也表明,CNN正確分類的確是因為注意到了原圖中正確的類別相關特征。
2.2. CAM缺陷
需要修改網絡結構並重新訓練模型,導致在實際應用中並不方便。
3. Grad-CAM
3.1. Grad-CAM結構
Grad-CAM 和 CAM 基本思路一樣,區別就在於如何獲取每個特征圖的權重,采用了梯度的全局平均來計算權重。定義了Grad-CAM中第\(\kappa\)個特征圖對應類別c的權重:
其中,Z表示特征圖像素個數,\(y^c\)表示第c類得分梯度,\(A_{ij}^k\)表示第\(k\)個特征圖中,\((i,j)\)位置處的像素值。然后再求得所有的特征圖對應的類別的權重后進行加權求和,這樣便可以得到最后的熱力圖,求和公式如下:
3.2. Grad-CAM效果
4. 結論
可視化可以進一步區別分類,准確地更好地揭示分類器的可信賴性,並幫助識別數據集中的偏差。真正的AI應用,也更應該讓人們信任和使用它的行為。
5. 代碼實現
https://github.com/jacobgil/keras-cam
參考文獻
-
B. Zhou, A. Khosla, A. Lapedriza, A. Oliva, and A. Torralba. Object detectors emerge in deep scene cnns. International Conference on Learning Representations, 2015.
-
Computers - Computer Graphics; Investigators from Georgia Institute of Technology Have Reported New Data on Computer Graphics (Grad-CAM: Visual Explanations from Deep Networks via Gradient-Based Localization). 2020, :355-.
PS:更多技術干貨,快關注【公眾號 | xingzhe_ai】,與行者一起討論吧!