Press "Enter" to skip to content

探讨 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),就像是在做边缘侦测

 

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

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注