本文首发于:行者AI
在整篇文章论述开始之前,我们先做一些概念性的讲解铺垫。卷积神经网络的各层卷积单元在模型网络中实际上有充当了目标检测器的作用,尽管没有提供对目标位置的监督。虽然其拥有在卷积层中定位对象的非凡能力,但当使用全连接层进行分类时,这种能力就会丧失。基于此,提出了CAM(类激活映射)的概念,采用全局平均池化,以热力图的形式告诉我们,模型通过哪些像素点得知图片属于某个类别,使模型透明化和具有可解释性,如下图所示:
1. Global Average Pooling的工作机制
这里我们假设最后的类别数为n,最后一层含有n个特征图,求每张特征图所有像素的平均值,后接入一个有n个神经元的全连接层。要有n个特征图的原因在于,每个特征图主要提取了某一类别相关的某些特征。
2. 什么是CAM?
CNN最后一层特征图富含有最为丰富类别语意信息(可以理解为高度抽象的类别特征),因此CAM基于最后一层特征图进行可视化。CAM能让我们对CNN网络有很好的解释作用,利用特征图权重叠加的原理获得热图,详细工作原理如下图所示。
设最后一层有n张特征图,记为 A 1 , A 2 , . . . A n A^1,A^2,...A^n A1,A2,...An,分类层中一个神经元有n个权重,一个神经元对应一类,设第 i i i个神经元的权重为 w 1 , w 2 , . . . w n w^1,w^2,...w^n w1,w2,...wn,则第c类的CAM的生成方式为:
L C A M c = ∑ i = 1 n w i c A i ( 式 1 ) L_{CAM}^c = \sum_{i=1}^n w_i^cA^i (式1) LCAMc=i=1∑nwicAi(式1)
生成的CAM大小与最后一层特征图的大小一致,接着进行上采样即可得到与原图大小一致的CAM。
2.1. 为什么如此计算可以得到类别相关区域
用GAP表示全局平均池化函数,沿用上述符号,第c类的分类得分为 S c S_c Sc