论文链接
Learning Deep Features for Discriminative Localization (arxiv.org)
CAM简介
Class Activation Mapping(CAM)是一种用于可视化和解释卷积神经网络(CNN)对于输入图像中不同类别的关注程度的方法。
在传统的CNN中,我们通过多个卷积层和池化层,最后通过全连接层进行分类。CAM的思想是,通过观察卷积层的特征图,可以了解到哪些区域对于分类结果的贡献更大。
特征图
在讲具体的数学推导以前,我们先看一下resnet50的卷积特征图:
原图[1,3,224,224]
conv1 [1,64,112,112]
bn1_relu [1,64,112,112]
maxpool [1,64,56,56]
layer1 [1,256,56,56]
layer2 [1,512,28,28]
layer3 [1,1024,14,14]
layer4 [1,2048,7,7]
avgpool [1,2048]
layer4的输出是这样的的特征图,总而言之,我们在resnet50最后一个卷积层出来的结果就是个的图像。
我们用来表示第张图的图像矩阵。
在经过了一系列卷积层的特征提取以后,resnet50会将这些图片进行全局平均池化(GlobalAvgPool)
这样我们就得到了一个的特征向量(我们先这么称呼它),最终我们通过一个全连接层,进行分类。
数学推导
对于一个分类问题,给定一个类A,我们希望找到对于类A而言,哪一部分的图像对类A的得分贡献最大。
对于类A而言,其全连接层的输出为类A的得分,将代入进去,有
定义类激活图函数:
这里的是一个的图像矩阵,空间网格的值越大,就说明该网格对应的部分区域对的贡献越大,换句话说,在分类任务中,这片区域经过卷积提取的特征对A而言更重要。
一般来说,我们只需要找到我们要关注的那个类,找到它的类激活函数,最后我们插值resize回去,再叠加在原图上就能得到一个类激活热图了。