Class Activation Mapping (CAM)


Zhou B., Khosla A., Lapedriza A., Oliva A. and Torralba A. Learning Deep Features for Discriminative Localization. CVPR, 2016.

Selvaraju R., Das A., Vedantam R>, Cogswell M., Parikh D. and Batra D.Grad-CAM: Why did you say that? Visual Explanations from Deep Networks via Gradient-based Localization. ICCV, 2017.

Chattopadhyay A., Sarkar A. and Balasubramanian V. Grad-CAM++: Improved Visual Explanations for Deep Convolutional Networks. IEEE Winter Conference on Applications of Computer Vision (WACV), Lake Tahoe, 2018.

Wang H., Wang Z., Mardziel P., Hu X., Yang F., Du M., Ding S. and Zhang Z.Score-CAM: Score-Weighted Visual Explanations for Convolutional Neural Networks. CVPR, workshop, 2020.

CAM (class activation mapping) 是一種非常實用的可視化方法, 同時在弱監督學習中(如VQA)起了舉足輕重的作用.

主要內容

CAM的概念, 用於解釋, 為什么神經網絡能夠這么有效, 而它究竟關注了什么?

符號 說明
\(f(\cdot)\) 網絡
\(X\) 網絡輸入
\(A_l^k\) \(l\)層的第\(k\)張特征圖(特指在卷積層中)
\(w\) 權重
\(c\) 所關心的類別
\(\alpha\) 用於CAM的權重

CAM

image-20210411175256145

最開始的CAM僅用於特殊的CNN: 卷積層 + AvgPool + FC的結構,
設最后一層卷積層的特征圖為\(A_L\), 則

\[f_c(X) = {w^c}^T GP(A_L), [GP(A_L)]_k = \frac{1}{HW}\sum_i^H \sum_j^W [A_L^k]_{ij}, k=1,\cdots, K. \]

進一步可以注意到,

\[f_c(X) = \frac{1}{HW} \sum_i^H \sum_j^W [\sum_{k=1}^K w_k^c [A_L^k]_{ij}]. \]

於是可以定義:

\[[L_{CAM}^c]_{ij} = \sum_{k=1}^K \alpha_k^c [A_L^k]_{ij}, \quad i=1,\cdots H, j=1,\cdots, W. \]

這里, \(\alpha = \frac{w}{HW}\).

\[L_{CAM}^c = \sum_{k=1}^K \alpha_k^c A_L^k. \]

一般, 這種score會最后加個relu:

\[L_{CAM}^c = \mathrm{ReLU}(\sum_{k=1}^K \alpha_k^c A_L^k). \]

Grad-CAM

普通的CAM有限制, Grad-CAM在此基礎上進行擴展.

\[L_{Grad-CAM}^c = \mathrm{ReLU}(\sum_{k=1}^K \alpha_k^c A_l^k), \]

\[\alpha_k^c = GP(\frac{\partial f^c}{\partial A_l^k})=\frac{1}{HW}\sum_i \sum_j \frac{\partial f_c}{\partial [A_l^k]_{ij}}. \]

注意: \(L \rightarrow l\).

Grad-CAM++

作者認為, Grad-CAM++不能很好應對多個目標的情況, 應該進一步加權:

\[\alpha_k^c = \frac{1}{HW} \sum_i \sum_j \alpha_{ij}^{kc} \mathrm{ReLU}(\frac{\partial f_c}{\partial [A_{l}^k]_{ij}}), \]

\[\alpha_{ij}^{kc}=\frac{\frac{\partial^2 f_c}{(\partial[A_{l}^k]_{ij})^2}}{2\frac{\partial^2 f_c}{(\partial[A_{l}^k]_{ij})^2}+\sum_i\sum_j[A_l^k]_{ij}\frac{\partial^3 f_c}{(\partial[A_{l}^k]_{ij})^3}}. \]

Score-CAM

作者認為, 利用梯度計算score並不是一個很好的主意.

\[\alpha_k^c = f_c(X \circ H_l^k) - f(X_b), \]

這里\(X_b\)是一個固定的基准向量, 作者直接取\(f(X_b)=\mathbb{0}\),

\[H_l^k = s(Up(A_l^k)), \]

為將\(A_l^k\)上采樣至和\(X\)相同大小, 並標准化:

\[s(M) = \frac{M - \min M}{\max M - \min M}, \]

使其落於\([0, 1]\).

最后

\(L^c_*\)最后也只是\(H\times W\)的, 需要上采樣到和\(X\)一樣的大小.

代碼

Pytorch-GradCAM

GradCAM

GradCAM++

ScoreCAM


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM