卷积神经网络模型解释性调研

前言

最近在训练一个鉴黄模型,模型训练出来之后发现模型对粉色背景的图片、人体占图片大面积比例的图片十分敏感,导致这些正常图片容易被误判为黄图,因此,需要进行模型解释性方面的研究,来看看模型究竟是根据什么来进行图片分类的。

这里主要会介绍三篇论文,分别是:

  • Visualizing and Understanding Convolutional Networks
  • Learning Deep Features for Discriminative Localization
  • Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization

论文阅读部分

1 Visualizing and Understanding Convolutional Networks

这篇论文的主要思想是:
1 在每一次卷积操作后我们都可以得到相应的特征图,这些特征图中包含了对图像分类有帮助作用的特征,但是这些特征图我们难以直接进行可视化,因此作者提出了反卷积网络的思路.
2 将得到的特征图通过反卷积网络(一层反卷积网络可以看作是一层卷积网络的逆过程),将特征图逆映射为输入的信号,这个逆映射的结果实际上展示了这一层卷积神经网络提取到的用于分类的主要特征。

一些实现细节:

这里的两个反卷积和反池化的操作具体是如何完成的呢?
1 反卷积
这里用反卷积来描述其实是不严谨的,确切来说是转置卷积。
首先先介绍卷积是怎么计算的。我们常常在学习卷积计算时,看到如下的示例图像,这是一个很形象的介绍。

在这里插入图片描述

但是在实际计算时,为了方便计算,我们将需要卷积的图像,比如说是4×4的,按行展开,展开成了16×1的矩阵,相应的卷积核我们也需要进行展开操作,将这些卷积核合并到了一个矩阵中,下面这个图像就是一个3×3的卷积核展开的例子:
在这里插入图片描述
记这个4×16的矩阵为W,16×1的图像矩阵为x,实际卷积操作的时候就是Wx,得到4×1的卷积结果,然后我们将这个卷积的结果按行展开,就得到了上图中2×2的卷积结果。在实际运算时,由于常常还需要进行下一步的卷积操作,实际上是不需要再展开的。

那么反卷积又是如何操作的呢?
我们将反卷积看作是卷积的逆过程,也就是我们想要将一个卷积后的结果(假设与上面相同,特征图为一个1×4的矩阵),反卷积得到与原始图像相同大小的矩阵(也就是1×16的矩阵),很自然地我们能够想到,用原卷积核矩阵的转置来进行计算。

原本的卷积过程是:(4×16)×(16×1)= 4×1
转置卷积的过程是:(16×4)×(4×1)= 16×1

如此,我们就得到了与原始图像大小相同的图像,这个不能完全说是逆过程,因为得到的16×1的矩阵与原始图像不是完全相同的,可以说是一个近似过程吧。

2 反池化
这篇论文里的反池化是指反最大池化。池化操作本身是不可逆的,但这里多了一个步骤,就是在模型训练池化时记录最大值的位置。这样就可以进行反池化了。
首先在模型训练进行池化操作时记录下每个池化区域内的最大值的位置,在进行反池化时,将该位置的值置为池化后的这个最大值,其余位置置为0.

文章的结论
上面描述了文章的主要思想和一些具体的实现细节,下面描述该文章运用以上思路做的一些实验。
作者主要是针对Imagenet数据集,运用了一个比较简单的卷积神经网络结构:
在这里插入图片描述
可以看到这里一共有5层卷积层,作者在此对5层卷积层得到的特征图都进行了反向操作,结果展示如下:

layer2
在这里插入图片描述在这里插入图片描述
这里就不做全部展示了,根据逆特征图得到了以下结论:
1 前两层主要提取了颜色信息、边角的纹理等
2 第三层主要提取了图像中的纹理特征
3 第四、五层相比于第三层更多地提取了纹理的细节,信息比较丰富

根据以上结论我们可以大概观察到卷积神经网络内部是如何进行信息提取的,这对我们增加对网络的了解有一定的指导意义。

1 作者根据对以上逆特征图的观察,发现第一层的部分卷积核没有激活,作者据此修改了网络结构,并取得了更好地效果。
2 作者在模型分布训练了 epochs [1,2,5,10,20,30,40,64]时,对特征图进行了逆卷积操作来进行观察,可以对比发现不同层的收敛速度不同。
3 作者对图像中的不同部位进行了遮挡来观察结果受不同部位的影响。

总结
虽然作者用的这个网络结构比较简单,但是作者的思路和一些对比试验对我们的学习都是有指导意义和借鉴意义的。

仍然存在的问题:
1 借助反卷积我们看到了卷积神经网络提取到了哪些特征,但是却不能完全拿来解释模型分类的结果;
2 最终的分类结果要通过全连接层对特征进行加权组合之后得到的,但这里只分析了卷积层,忽略了全连接层;
3 只展示了深层特征中什么信息被保留,但没有凸显出这些信息的相对重要性。
因此我们需要继续阅读下面的两篇论文,看这些问题是如何被解决的。

2 Learning Deep Features for Discriminative Localization

论文的主要思想比较简单,概括来说就是:
1 计算最后一层的每张特征图对最终分类结果的影响权重,这个影响权重代表了不同特征图,也就是不同识别区域对最终分类结果的重要性;
2 针对预测的类别根据该权重对最后一层特征图进行加权求和,得到可视化结果(文中称为CAM图,也就是class activation maps)。这个可视化结果中显示了原图中CNN用来判断类别的具有判别性的区域。
在这里插入图片描述
论文的实现细节:
1 如何计算每张特征图对最终分类结果的影响权重?
在这里插入图片描述
如上图所示:
1 在最后一层特征图后添加一个全局平均池化层(global average pooling),将原本为w×h×c的特征图映射为了1×c的矩阵。
2 再通过一个全连接层,将这个1×c的矩阵映射为了1×class num的矩阵,最后通过softmax得到最终的分类概率。

这里的从GAP层到分类层的权重矩阵就是我们想要得到的每张特征图对最终分类结果的影响权重。针对一张图片,我们首先可以计算出它的分类结果,再根据分类结果所对应的权重矩阵,计算加权特征图,就得到了CAM图。
不同的分类结果我们可以得到不同的CAM图,比如对下图我们可以发现当我们针对palace这个类别计算CAM图时,特征图的主要激活就是这个建筑物的主体部分,当针对dome这个类别计算CAM图时,特征图的主要激活就是这个建筑物的塔顶部分,不同的类别有相应不同的激活部位。
在这里插入图片描述
针对模型解释部分就主要是以上内容了,论文中作者还提出了利用这个方法进行弱监督物体定位,感兴趣的可以继续阅读。

仍然存在的问题:
论文中提出了一种很好的分析思路,但是却存在一个很大的问题,就是我们需要通过重新训练模型来得到全连接层的权重值,这对于已经上线或存在一定训练成本的模型来说是很不实用的,因此我们需要另外的方法来计算全连接层的权重值。下面这篇论文解决了这个问题。

3 Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization

优点
1 使现有的深层模型能够在不改变其架构的情况下进行解释,从而避免了可解释性与准确性之间的平衡;
2 可以应用于任何基于CNN的体系结构;
论文的主要思想
这个论文可以看作是cam的提升版,由于cam在计算全连接层的权重时,需要重新训练模型,grad-cam针对这个问题提出了解决的办法。
grad-cam提出计算预测类别对最后一层特征图上每一个像素的梯度并计算平均,就得到了该类别对该层特征图的权重。这个计算得到的结果与cam的结果是等价的,下面是等价性的证明,是一个比较简单的证明。
在这里插入图片描述
在这里插入图片描述

文中提出:好的视觉解释由什么组成?在图像分类问题中 ,一个用于证明目标类别的“良好”的视觉解释应该是由两部分组成:
(a)即图像中的类别定位
(b)高分辨率(即捕获细粒度细节)

Grad-CAM图可以提供图中的类别定位,Guided Backprop可以提供较高分辨率的目标细节。因此作者将Guided Backprop的结果与得到的CAM图点乘,以获得更精确的视觉效果。下图是文中提供的一个例子:
最左侧是原图,其中有两个分类目标,分别是猫和狗。
(b)图显示了Guided Backprop的结果,可以看到该图像对不同的类别没有区分度,都提供了一个细粒度目标图像。
(c)图显示了Grad-CAM的结果,可以看到针对不同的分类结果给出了不同的定位。
(d)图显示了Grad-CAM与Guided Backprop结合后的结果,可以看到图中不仅提供了定位信息也给出了较细粒度的目标结果。
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章