探討 CNN 的視角__part1

Class Activation Mapping

Kinna Chen
Oct 1 · 8 min read

近年來,深度學習造成了科學界的研究翻了好幾圈,但我們到底從哪時候開始關注深度學習的咧?就從西元 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),就像是在做邊緣偵測
2. 當模型看到許多由線提取的特徵,會發現其實就是在做圖案偵測,此一行為發生在模型的中斷(Mid-Level Feature)
3. 最後最後,會發現越靠近 output 之 convolution layer 的 filter 做卷積(High-Level Feature),其實就是針對整張影像是否具有某些類別之特徵在進行偵測的。
我們透過推算 Receptive Field,可以知道在每個 Level 的每一個 pixel ,包含多少 input image 之 pixels 的特徵訊息。這是在 2013 由 Matthew D. Zeiler 和 Rob Fergus 所提出的觀察。

Visualizing and Understanding Convolutional Networks by Zeiler

有了 Receptive Field 的概念,我們就這樣往下走囉!!!

介紹 Class Activation Mapping (CAM)

正式進到我們今天的主題 — CAM,如果你懂了上述的觀念,底下這張圖會讓你秒懂 CAM 的核心理論。

Learning Deep Features for Discriminative Localization by Zhou etc.

簡單來說,一般的 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

Taiwan AI Academy

news, tech reviews and supplemental materials

Kinna Chen

Written by

Taiwan AI Academy

news, tech reviews and supplemental materials

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade