Learning Deep Features for Discriminative Localization -CAM方法帮助若监督学习研究实现物体定位论文阅读笔记

作者:18届会长崔云龙

时期: 2020-9-11

论文《Learning Deep Features for Discriminative Localization》

期刊:2016CVPR

一、简单介绍:

  • 是2016年CVPR上的一篇文章。对后来的弱监督学习的研究有很大的启发。

  • 本文针对使用全局平均池化(GAP)的CNN网络提出了一个叫做class activation map(CAM)的技术,这个技术可以让CNN网络在没有边框标注的数据下进行图片识别和物体定位。

  • 在监督学习中,分类问题需要带类别标签的数据集,定位问题需要带BBox(BoundingBox)标签的数据集,分别计算预测与真值之间的loss并进行优化,达到网络训练的目的。

  • 而对于只提供分类标签的数据集,但需要完成分类和定位两个功能的网络训练时,就属于弱监督学习问题。

二、问题陈述

  1. 卷积神经网络在视觉识别任务中有着令人印象深刻的表现,一些研究还发现其在定位上也有着卓越的能力。
  2. 而这种定位能力在使用FC全连接层进行分类的时候会丧失。
  3. 我们发现使用GAP(global average pooling)替代全连接层,可以保持网络定位物体的能力,又不降低网络的分类能力,且相对于全连接网络而言参数更少。
  4. 于是本文提出一种CAM(Class Activation Mapping)方法,可以针对使用GAP的CNN网络,根据图片分类时使用的分类依据(图中对应的类别特征)在原图的位置进行可视化,并绘制成热力图,以此作为物体定位的依据。

三、怎么做的

1、类激活图Class Activation Mapping CAM

CAM主要是通过GAP(Global Average Pooling)来实现。

全局平均池化Golbal Average Pooling GAP:

GAP不是由本文提出,Golbal Average Pooling 第一次出现在论文Network in Network中,主要是用来regularizing training。后来又很多工作延续使用了GAP,实验证明,Global Average Pooling确实可以提高CNN效果。
在这里插入图片描述
平均池化:在feature map上以窗口的形式进行滑动(类似卷积的窗口滑动),操作为取窗口内的平均值作为结果,经过操作后,feature map降采样,减少了过拟合现象。
在这里插入图片描述
全局平均池化GAP:不以窗口的形式取均值,而是以feature map为单位进行均值化。即一个feature map输出一个值。
在这里插入图片描述
一般来说,GAP在最后一个卷积层后面,在GAP之后通常是softmax层。
以前的卷积神经网络,卷积层通过池化层(一般是 最大池化)后总是要一个或n个全连接层,最后在softmax分类。缺点是全连接层的参数超多,使模型本身变得非常臃肿,且容易过拟合。
将softmax层之前的全连接层替换为GAP可以弥补这些缺点。具体操作为,最后一层的卷积输出的 feature map 有N个通道,然后对这个 feature map 进行全局池化操作,可以获得长度为N的向量。

正式定义:

下面来重点讲解怎么通过GAP,来生成CAM(CAM有时候指Class Activation Mapping这个过程,有时候指生成的结果Class Activation Map,这里指后者)。

全局平均池化层输出最后一个卷积层的每个单元的特征图(feature map)的平均值。这些值的加权总和用于生成最后的输出。也可以说,我们计算最后一个卷积层特征图的加权总和来获得我们的CAM。

对于一张给定的图,f_k (x,y) 表示最后一个卷积层输出的第k个通道的特征图上(x,y)位置的激活值。运用GAP,可以得到结果在这里插入图片描述

那么对于某个类别c,softmax的输入值为在这里插入图片描述

最后类别c的值为 .
通过上面的公式,我们可以将S_c展开,如下所示:
S_c=∑_k▒w_kc  F_k=∑_k▒w_kc  ∑_(x,y)^▒f_k (x,y)=∑_(x,y)▒∑_k▒w_k^c  f_k (x,y)

我们定义属于某个类别c的CAM为:
M_c (x,y)=∑_k▒w_kc  f_k (x,y)

简单来讲就是:
M=w_1·f_1+w_2·f_2+...+w_n·f_n

让我们用wn表示连接Flatten层的第k个节点和对应预测图像类别的输出节点的权重。
在这里插入图片描述
计算过程如图所示。
最后将生成的CAM图进行上采样到原图的大小就可以了。
在这里插入图片描述
上图展示了两类图像的CAM图。高亮了图像分类的判别区域,比如松狮狗的头部以及杠铃片。
在这里插入图片描述
展示了特定图像的top5分类的CAM图像。

为什么用GAP而不是GMP来做?

因为GMP鼓励我们的网络只关注1个discriminaltive part,GAP更鼓励网络识别对象的整个范围。我们在第三部分用ILSVRC数据集验证了此想法:GMP的分类性能与GAP相当,GAP的定位能力要强于GMP。

二、关于弱监督物体定位的实验

setup:

以AlexNet,VGGnet和GoogLeNet的主要的网络架构,分别在后面加入一个卷积层,GAP和softmax层,再适当增减卷积层的数量(因为我们发现当GAP之前的最后一个卷积层具有更高的空间分辨率时我们网络的定位能力更好),生成三种网络,AlexNet-GAP, VGGnet-GAP, GoogLeNet-GAP。

实验结果: 评估了CAM的定位能力

分类:

如下图所示,除了AlexNet外,与对应的网络相比,* -GAP的的分类效果只下降了1~2个百分点。 由于Alex分类准确率下降较多,所以构建了Alex* -GAP网络,即在原AlexNet加入两个卷积层,而不是一个。现在Alex*-GAP和原来的AlexNet的分类准确度差不多了。

在这里插入图片描述

定位:

为了做定位,我们需要生成一个边界框及其关联的物体类别。为了生成CAM的边界框,我们使用简单阈值来划分热力图。我们先用大于CAM最大值的20%的值做一个边框,然后我们再用覆盖分割图中最大连通分量做一个边框。

结果如下两表所示, GoogLeNet-GAP的准确率和全监督的AlexNet的准确度差不多(37.1 V.S. 34.2 ),但是和对应的网络相比,差距还是很大。所以说,在weakly supervised的路上,还有一段很长的路要走。


在这里插入图片描述
image-20200825221807055
在这里插入图片描述
两张图片在不同网络下的CAM图和saliency map展示。
在这里插入图片描述
四个图片在GoogleNet-GAP模型中的定位示例,真实框为绿色,预测的框为红色。

在这里插入图片描述
使用CAM图的定位(上面两个)与使用saliency map定位比较,真实框为绿色,预测的框为红色。

三、定位特征的通用性实验

结论:我们的网络即使在陌生数据上(不训练)也能定位
在其他数据集上使用我们提取的特征进行分类,结果如下所示,可以看出,普通GoogLeNet特征提取能力和GoogLeNet-GAP的 特征提取能力差不多。这说明*-GAP并没有降低特征提取能力,当然也没有提高。
在这里插入图片描述
下面来看看它的Localization能力,部分实验结果如下所示。可以看出,虽然没有用这些数据集训练,但是它还是能够定位图中物体的突出特征区域。
在这里插入图片描述

结论

总结:
文章通过CAM,可以通过不使用位置标记,来定位要识别物体的位置。这个技术为很多弱监督学习提供了启发。
缺点:
它只能找出物体的一些突出特征的区域,比如狗的头部,这样就导致在定位的时候,容易只定位到物体的一部分。这也是弱监督学习方法一个亟待解决的问题。

猜你喜欢

转载自blog.csdn.net/cyl_csdn_1/article/details/109061460