探討 CNN 的視角__part1
Class Activation Mapping
近年來,深度學習造成了科學界的研究翻了好幾圈,但我們到底從哪時候開始關注深度學習的咧?就從西元 2012 這個世紀爆發點開始說起吧!怎麼說呢?因為 2012 AlexNet 這個類神經網絡架構,在 ImageNet 這個影像視覺比賽的表現好到讓大家吃手手,於是從影像視覺出發,遍及到科學的每一個領域都有了新的航線可以探索,這樣強大的模型架構,大家的內心一定閃過「深度學習模型到底如何學習這些事的?」因此,在深度學習的領域裡,默默的就跑出個新領域 — 「Explainable AI(XAI)」。當然今天不是要帶大家學習 XAI ,那可能先得說上個三天三夜了,我們就介紹一小角吧!!!
從這裡開始,我們要跟大家介紹的是「CNN 模型架構學習到什麼,所以能夠辨識物品的特徵」,這個問題聽起來有些不可思議,大多數的人想知道的是「模型是如何學習的」,但在這邊我們並沒有要聚焦在「如何學習」,在 XAI 目前的研究主軸上,我們也並非要知道「如何學習」,而是想了解「到底模型看到了什麼影像特徵,所以能夠辨識出對應的類別呢?」我們不是要去探討如何做到的過程,而是要知道訓練完模型後的結果和原因。
接下來,要切入本篇的重點,看到標題大家一定知道有 part,就不會是一下子就講完的,我們要循序的介紹幾個方法來思考「CNN 的視角」。
.part1 — Class Activation Mapping (CAM)
.part2 — Guided Gradient-CAM (Grad-CAM)
.part3 — Guided Gradient-CAM++ (Grad-CAM++)
回憶 CNN
這篇就先跟大家介紹 CAM 啦!
在說 CAM 之前,先複習個 CNN 的觀念,如下圖….
一張二維影像 input image 和一個 3×3 的 filter 作卷積,就像圖中所示 Output_conv1 這張 feature map 中的每一個 pixel,代表了input image 中對應的 3×3 pixels 一個特徵提取( feature extraction )。
如果再和一個 3×3 的 filter 做一次卷積,就理所當然地知道,Output_conv2 的每一個 pixel 代表的是和前一層的 Output_conv1 中對應的 3×3 pixels 做特徵提取。
如果再往前看呢?會發現這個 Output_conv2 中每一個 pixel 涵蓋了 input image 對應的 5×5 pixels 的特徵提取範圍。我們把上述這種影像做卷積後,feature map 之每一個 pixel 對應到的視角,稱之為「Receptive Field」。
底下用一張從 Alexnet 做的 feature 來做分析,在圖中會很清楚的看到,原始 convolution 在影像上的意義就是做邊緣偵測(edge detection),因此如果我們有一個辨識度很好的模型,就可以看到底下幾個小發現。
1. 靠近 input image 之 convolution layer 提取的特徵(Low-Level Feature),就像是在做邊緣偵測,圖中將第一層 layer 之 filter,印上 color map,做視覺化的呈現。
2. 當模型看到許多由線提取的特徵,會發現其實就是在做圖案偵測,此一行為發生在模型的中段(Mid-Level Feature),圖中是將過完此中段層之每一個 filter 和 input image 做梯度,得到每個 pixel 之權重,對應到 color map 的視覺化結果。
3. 最後最後,會發現越靠近 output 之 convolution layer 的 filter 做卷積(High-Level Feature),其實就是針對整張影像是否具有某些類別之特徵在進行偵測的,視覺化方式如中段層的視覺化呈現。
我們透過推算 Receptive Field,可以知道在每個 Level 的每一個 pixel ,包含多少 input image 之 pixels 的特徵訊息。這是在 2013 由 Matthew D. Zeiler 和 Rob Fergus 所提出的觀察。
有了 Receptive Field 的概念,我們就這樣往下走囉!!!
介紹 Class Activation Mapping (CAM)
正式進到我們今天的主題 — CAM,如果你懂了上述的觀念,底下這張圖會讓你秒懂 CAM 的核心理論。
簡單來說,一般的 CNN 模型架構,大致上會做幾次的卷積,當特徵提取的差不多了,我們可能會做最直接 Flatten,或是 GlobalAveragePooling(GAP)、GlobalMaxPooling (GMP)等等,然後接 Fully-Connected Layer (fcn) 進行分析,但我們不在此考慮 Flatten ,本篇我們用論文當中所提到的 GlobalAveragePooling 進行討論。
如左圖,不知道大家是否想過,一張 feature map (w × h × c),如果進行 GAP 後之一維向量為 F,其中 F 的每一個元素 Fₖ 代表的意義是最後一層 feature map 之每一個 channel 的平均值。如果我們從影像視野的角度出發,那麼每一元素,就是代表了某一個針對類別提取出的特徵,然後進行 fcn 的加乘到對應的類別上。
fcn 的所有權重加乘,因此我們可以看成最後一層 feature map 之每一個 channel 乘上一個權重做加乘。
那麼就會有人問,那權重怎麼來的?那個權重就是沿著 input image 所對應到的類別 c 的位置回推後,加乘而來。怎麼做到回推呢?那就是過 softmax 前的分數 S 之對應到的類別 Sᶜ,對 F 做微分。一定會有人問為什麼要 softmax 之前的呢?本篇認為,因為 softmax 可想像乘只是對分數做一個 0 到 1 之間的平移,平移成相對的機率值,已結果來思考,只是多成一個 softmax 的微分值,沒有太大的差別,加乘要觀察的是一個相對權重關係。
所以說…回到最一開始的那張圖,我們可以知道….「其實 CAM 只是把 feature map 乘以對應到的類別權重,然後做 heat-map 轉換和 resize 成 input 大小」就結束了。
Question 問問題舉手
底下就簡單列出幾個有關 CAM 常有的疑慮….
Q1:
如果不是 GAP 可以做到嗎?例如,Flatten 和 GMP….
A1:
一個很核心的觀念,我們直接使用 feature map 之 channel 和 fcn 的加權關係,所以必須使用針對整張 feature map 之 channel 的特徵提取方式來做加權分析,因此,最好的選擇是 GAP 或者是 GMP 是目前最佳的使用方式。至於 Flatten 不適合的原因,是因為他是針對整張 feature map 之 pixel 做加權,所以不納入分析的範圍。
Q2:
為什麼一定是分析最後一層 feature map,倒數第二層或其他層不行嗎?
A2:
只有最後一層才能藉由 fcn,計算出和類別之間特徵直接表現的相對強弱關係,其他層只能直接算類別對於 S 的梯度 gradient,沒辦法用視覺化的方式來呈現。
Q3:
最後一層 layer ,如果用影像大小 224×224 的 input image ,然後使用 VGG16 ,會發現過 5 層後,影像大小只剩下 7×7, 不過上面的論文附圖,好像可以看到 224×224 的 heat-map,步驟中說到「直接 resize」這樣合理嗎??
A3:
當然合理呀!還記得我們回憶那麼多 CNN 的概念嗎?因為 CAM 的每一個 pixel 表現出對應的 Receptive field 的特徵提取,所以從將 7×7 resize 成 224×224,其實是可以表示 input image 所對應區域之特徵強弱的。
CAM 的實際操作將會放在下一篇和 Grad-CAM,一起帶著大家手刻,敬請期待吧!!!><
Reference:
(1) Learning Deep Features for Discriminative Localization
(2) Visualizing and Understanding Convolutional Networks