一、两种类型的分类模型

为了更好的解释CAM和Grad-cam,这里先介绍两种类型的分类模型。feature extraction+Flatten+softmax和feature extraction+GAP+softmax。

以VGG16为例,在做完卷积**池化操作后,每张图像特征提取可得到7x7x512大小的特征图,为了在全连接层作分类,需要将提取的特征图(三维)转化成一维的特征。这两种类型分类模型的唯一差异就在将三维特征转化成一维特征的方式,

1、特征提取(feature extraction)+flatten+softmax

这种方式使用keras的flatten层将三维特征直接从左向右排列成一维向量(类似于np.flatten())。例如将7x7x512的特征图flatten后拉成了25088长的一维向量。然后接全连接层(FCN,可看到多层感知机分类器),最后经过softmax层输出每类的概率。

keras CAM和Grad-cam原理简介与实现

2、 feature extraction+GAP+softmax

Global average pooling(GAP)是论文Network In Network[1]提出的,主要为了解决全连接层参数过多,不易训练且容易过拟合等问题,例如VGG16网络模型的参数90%左右的参数是全连接层的参数。用GAP替换flatten操作将三维特征转化成一维向量。GAP层实现非常简单,就是一个与特征图大小相同的平均池化层。例如7x7x512的特征图,使用7x7大小的平均池化层,池化后可得到512长的一维向量。这里可以对比一下这两种方式的参数量,假设全连接层节点个数1024个,flatten的参数量是25088x1024。而GAP的参数量是512x1024。这个差异还是很大的。

思考一个问题,经过GAP层后7x7x512的参数只有512个,会不会参数个数太少而导致分类效果不好,效果肯定很好这是不可能的,毕竟gap也不是万金油。只能说对大多数分类任务来说有提升。GAP层可以看做是一个非线性操作,这512个特征相当于是从7x7x512经过非线性变化选择出来的强特征,而并非是直接从7x7x512拿出512个特征。

keras CAM和Grad-cam原理简介与实现

二、CAM

CAM方法要求模型必须使用GAP层。 因为使用GAP具有更强的可解释性,可把特征图GAP后的值作为该张特征图对应的权重,CAM的具体做法是,提取图像特征得到7x7x512的特征图后,将每张特征图的均值

keras CAM和Grad-cam原理简介与实现