概
CAM (class activation mapping) 是一種非常實用的可視化方法, 同時在弱監督學習中(如VQA)起了舉足輕重的作用.
主要內容
CAM的概念, 用於解釋, 為什么神經網絡能夠這么有效, 而它究竟關注了什么?
符號 | 說明 |
---|---|
\(f(\cdot)\) | 網絡 |
\(X\) | 網絡輸入 |
\(A_l^k\) | 第\(l\)層的第\(k\)張特征圖(特指在卷積層中) |
\(w\) | 權重 |
\(c\) | 所關心的類別 |
\(\alpha\) | 用於CAM的權重 |
CAM
最開始的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\)一樣的大小.