计算机视觉方向小白 纯属分享学习心得 若有理解不当欢迎交流
第一次接触Class Activation Mapping这个概念是在论文《Learning Deep Features for Discriminative Localization 》(2016CVPR)中。
简单来说,这篇文章主要介绍了两个核心技术:
GAP(Global Average Pooling Layer)和CAM(Class Activation Mapping)
GAP(全局平均池化层)
在说全局平均池化之前,我想先谈一谈池化层。我们都知道,池化层的作用是正则化。比如说,这是一个VGG-16的模型。
我们可以直观的看到,从卷积层到池化层,深度不变,尺寸变小了。我们使用更小尺寸的特征图来表示输入,虽然会丢失一些信息,但是池化层可以防止过拟合,降低维度,保留主要特征的同时减少计算量,减少了参数数量。
全局平均池化也一样,可以用来正则化。让我们来看一个容易的例子,我想这个相信可以帮助我们理解全局平均池化。
首先是Max pooling(最大池化)。如图所示,最大池化是选择每个子区域的最大值,然后使用子区域的最大值表示该子区域。
Average pooling(平均池化)是指计算出子区域的平均值,用一个平均值来分别表示子区域子区域。
与平均池化类似,Global Average Pooling(全局平均池化)是指计算整个区域的平均值,仅用一个值来表示整个区域。通过下面这个图,我想我们可以更直观的理解GAP。
左边是一个特征图。高度为6,宽度为6,深度为3。当它经过GAP,我们把每一层的参数用一个值表示,这个特征图就变成一个1*1*3的特征向量。
第一个提出GAP这个想法的,是一篇叫做《Network in Network》的论文。这篇论文发现用GAP代替全连接层,不仅可以降低维度,防止过拟合,减少大量参数,网络的性能也很不错。
GAP怎么代替全连接层呢?让我们回到一开始的例子。
如果我们使用GAP,我们必须改变网络的结构。首先我们把最大池化层和全连接层扔掉,只需要将其换成一个尺寸为1*1*512的GAP,之后和原网络一样接一个softmax层就可以了。当然这只是我从理论出发举的一个小小的例子,性能是否改变还没有做