CAM(Class Activation Mapping)通俗篇

在Learning Deep Features for Discriminative Localization这篇文章中,作者提出了CNN网络除了具有很强的图片处理,分类能力;同时还能够针对图片中的关键部分进行定位,这个过程被称为Class Activation Mapping,简称CAM。

那么什么叫做CAM呢,如下图所示,第一组输入图片,训练的标签式刷牙,那么通过based model+CAM之后,我们可以得到如下图第二行所示的热度图,在对最后结果影响比较大的地方生成的热度就比较高,我们可以看到在这两张图片中对于嘴以及牙刷的热度都比较高,我们可以得出这两个部分对于最后刷牙的结果有着比较大的影响。对于第三列和第四列的结果,我就不多描述了,很好懂。

下面就来讲讲CAM的网络架构,如下图所示。输入一张图片,然后进过CNN网络提取出许多feature map,每个fearure map都能够表示出整个网络的部分特征。这里的CNN网络可以使用VGG啊,或者google net系列的例如inception等等,但是有这样一个问题,我们认为feature map还保留着图片的空间信息,这也是为什么最后通过ifeature map的叠加可以得到class activation map的原因。而通常的网络中会选择全连接层进行图片特征图向特征向量的转换在这个转换过程中就会丢失空间信息。

所以文中采用global average pooling(GAP)来代替fully connected。然后将生成的这个值,最后通过一个全连接层实现相应的分类结果,相应的全连接层的权重称为相应的权重w1,w2.。。。。。

我们这样想最后生成的结果分类结果,其实就是pool之后的值与相应权重的乘积,相应的这个pool值是由GAP生成的,所以最后分类的结果可以看为是特征图与权重的乘积,这时候权重就代表了每个特征图对于最后结果的贡献程度,那么假如我们将特征图乘以权重直接相加,那么对于最后结果影响大的地方因该有相对较大的值,小的地方有相对较小的值,这个过程也就是CAM的原理讲解。具体的过程可以看图二的下面部分,了解具体操作。

当然这里有几个地方需要说明,首先就是应用之前需要对模型进行预训练,才能够进行CAM接下来的操作。其次过于最后生成特征图的大小对于不同的基模型有不同的方案,比如Alexnet的13*13,vgg的14*14,Googlenet的14*14.所以对于我们所希望获得的原图,最后是需要进行resize的。

PS也许有同学要问,全局池化为什么要使用average这种方法呢,max不行嘛?

答案是有一种CAM就是基于max pooling(GMP)的,但是他存在一些问题,就是基于average的CAM可以标出重要影响的所有区域,而基于max的CAM却只能标注出ROI区域的右下方的一个关键点。这个使得基于GMP的CAM在分类效果上与基于GAM的差不多,但是在定位问题上就要显得逊色一点。

学术交流可以关注我的公众号,后台留言,粉丝不多,看到必回。卑微小钱在线祈求

你可能感兴趣的:(各种各样的网络)