CNN模型可视化

1 引言

  要说起深度学习中最为常用和广为人知的网络模型,就要数卷积神经网络(Convolutional Neural Networks, CNN)了。CNN目前在语音识别,图像分类,图像分割,自然语言处理等领域都取得了巨大的成功,虽然这些领域的问题并不相同,但CNN可以自动从大规模数据中提取特征,从而帮助完成图像分类、文本分类等问题。
  人们常常说深度学习是一个黑盒,是因为我们虽然知道CNN从数据中提取了特征,但并不清楚提取到的特征具体是什么,模型又是如何根据这些特征完成数据的分类等后续问题的。如果不清楚CNN模型的内在判断机理,仅仅根据在当前的测试集上得到了很好的结果就断定这是个成功的模型,有时候会闹出笑话来。
  举个例子,小明同学想完成一个鉴黄模型,首先他需要收集正常图片和黄色图片两类图片数据。小明在自己的硬盘中挑选了一些黄色视频,从中进行截帧,筛选出了一些黄色图片作为训练数据,并从Imagenet训练集中挑选了一些正常图片也加入训练集。小明同学训练了一个resnet模型来识别这两类图片,模型在测试集上效果拔群,达到了99%的准确率。他很高兴,又用这个模型在黄色图片网站上进行测试,竟发现模型行不通了,这些图片竟然都被判定为正常图片。小明同学百思不得解,后来,在经过模型可解释性的研究后,小明才发现,原来黄色训练数据中都带有视频网站的logo,因此CNN模型在训练的过程中出现了过拟合,将该logo当作了黄色图片的特征。虽然小明的收集了15万张黄色图片作为训练数据,数量已经很大,但却没料到存在这样的问题。
  当我们训练了一个准确率达到了99%的模型,我们却无法确定这个模型可靠不可靠。好在针对这个问题,过去几年研究人员除了从理论层面去寻找解释外,也提出了一些可视化的方法直观地理解CNN的内部机理。

2 CAM

  那么小明是如何实现CNN模型的可视化的呢?这就要从一篇论文《Learning Deep Features for Discriminative Localization》讲起了。这篇论文中提出了CAM(Class Activation Mapping),它以类似热力图的形式展示模型的决策依据,如同在黑夜中告诉我们哪有发热的物体。我们首先来看看CAM模型可视化的效果。
  作者训练了一个五分类CNN模型,这个模型共划分了dome、palace、church、altar、monastery五个类别,作者在原图上进行了这个五分类模型的可视化,分别得到了五种类别在该图片上的分类依据。可以很直观的观察到,模型把该图片划分为palace的主要依据特征是图片中建筑的圆形拱门部分,而模型把该图片划分为dome的主要依据特征则是图片中的圆形塔建筑。CAM可以很直观地帮助我们了解模型把一张图片划分为某一类别的依据是什么,于是我们就可以结合生活中的经验来判断这个模型到底靠不靠谱啦。
在这里插入图片描述
  下面我们对CAM进行一个详细的介绍。
  我们知道,一个卷积神经网络常常由卷积层、池化层和全连接层构成,全连接层前的最后一层池化层包含了丰富的语义信息和空间信息,全连接层对这些信息重新进行加权组合,用于最终的模型决策。由于全连接层中的信息组合难以用可视化的方法展现出来,因此我们将目光聚焦于最后一层卷积池化层。
在这里插入图片描述
  论文Network in Network中提出了GAP(Global Average Pooling)。GAP(Global Average Pooling),顾名思义,全局平均池化层,是一个特殊的池化层。GAP采用取平均值法作为池化方法,采用一张feature map的长宽作为池化区域,一个原本大小为h×w×channels的特征图经过全局平均池化之后大小就变成为了1×1×channels。说白了,GAP就是计算了每一张feature map所有像素的均值。

在这里插入图片描述
论文中解释了GAP的优点:

  • GAP可以更充分的利用空间信息。如果不引入GAP,直接在最后一层池化层后接全连接层,会丢弃目标的空间位置信息;
  • GAP具有更好的鲁棒性;
  • 加入GAP后,根据全连接层的权重,可以得到每一张feature map对最终模型决策的重要性;

GAP将每一张feature map都压缩为了一个值,一个N通道feature map就被压缩成了1×1×N的特征序列。GAP后紧接的是全连接层,全连接层的输入是特征序列,输出是分类结果。下图很清楚地显示了GAP和全连接层之间的连接结构。
在这里插入图片描述
  从图中可以看到,GAP的每一个通道的值与每一种类别都有其对应的权重,我们把权重值记为 w k c w_{k}^{c} wkc,这个权值就代表了这个通道的特征图对于该类别的贡献。当我们完成模型训练,就得到了全连接层的权值,也就是得到了每一张feature map对最终模型决策的重要性,这个重要的特性帮助我们进行CNN的决策可视化。
  依然以上面的五分类模型为例,如果我们想要解释模型是根据什么特征将一张图片分类为dome,首先把dome这个类别对应的所有全连接层上的权重取出来,计算它们与对应特征图的加权和,就得到了一个大小与最后一层feature map长宽相同的图像。由于这张图象的大小和原图不一致,我们需要对它进行上采样,扩大到原图大小,再叠加到原图上去,如此就得到了一张可视化的分类图像,如下所示。
在这里插入图片描述
  如果你了解resnet的结构,会发现resnet模型中就使用了GAP结构。如果你使用resnet模型进行分类任务,可以很方便地直接使用cam来帮助你更加深入地了解你的模型。
下面提供了CAM的tensorflow实现:CAM实现

4 grad-cam

  上述的CAM是一种很好的分析思路,但是却存在一个问题,我们需要通过重新训练模型来得到全连接层的权重值,这对于已经上线或存在一定训练成本的模型来说是很不实用的,因此我们需要另外的方法来计算全连接层的权重值。这就提出了Grad-CAM模型。Grad-CAM来自论文:“Visual Explanations from Deep Networks via Gradient-based Localization”。
该模型具有以下优点:

  1. 使现有的深层模型能够在不改变其架构的情况下进行解释,从而避免了可解释性与准确性之间的平衡;
  2. 可以应用于任何基于CNN的体系结构;

  Grad-CAM可以看作是CAM的提升版,它与CAM的基本思路一致:求得特征图对应的权重,对特征图计算加权和。它们的区别在于计算特征图所对应的权重的过程。
  Grad-CAM提出一种计算特征图重要性的新方法。该方法可以简要描述如下:针对所要预测类别,计算最后一层特征图上每一个像素的梯度,并对梯度计算平均值,就得到了该类别对该层特征图的权重。得到权重之后的计算方法与CAM相同,并且最终得到的结果与cam的结果是等价的。
  作者提供了两者的等价性证明,这时一个很容易理解的证明,感兴趣的读者可以阅读一下。
在这里插入图片描述
在这里插入图片描述
Grad-CAM的github代码:Grad-CAM的tensorflow实现

5 总结

  了解了上面这些知识,你就可以很容易地得知你的CNN模型到底是依据什么特征在进行分类,是否靠谱了。深度学习的模型可解释性研究是一项非常有价值的任务,在这里我们也只是介绍了其中一部分的内容。欢迎在评论区共同讨论学习~

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值