Learning Deep Features for Discriminative Localization
摘要:
重新审视《 Network in network》中提出的全局平均 池化层(global average pooling),并阐明了它是如何通过图片标签就能让卷积神经网络具有卓越的定位能力。虽然这项技术以前被当做正则化训练的一种方法,但是我们发现它实际构建了一种通用的适用于各种任务的能定位的深度表示。尽管global average pooling很简单,我们仍然能够在2014年的ILSVRC物体定位比赛中得到37.1%的top-5错误率,与CNN的34.2%top-5错误率非常接近。我们证明了我们的网络能在各种任务中区分图像区域进行定位,尽管没有经过(定位)训练。
1 Introduction
《Object detectors emerge in deep scene cnns》表明CNN的各个层的卷积单元实际上是物体检测器,尽管没有对物体的位置进行监督。尽管卷积层定位物体的能力很出色,但当用全连接层进行分类时,这种能力会丧失。最近,一些流行的全连接层和卷积层的神经网络,比如Network in Network(NIN)和GoogLeNet,已经提出通过避免使用全连接层的方式来最小化参数并且保持高性能的方法。
为了实现这一目标,NIN使用global average pooling来做正则化,避免训练过程中的过拟合。在我们的实验中,发现global average pooling的优势远不止正则化——实际上,只需要稍微调整一下,网络就可以保持卓越的定位能力,直到最后一层。这样的微调使辨别图像区域变得十分简单,即使对那些最初没训练的网络也是如此。如图1(a)所示,在物体分类上训练的CNN能够成功的将动作分类的区分区域定位为与人类交互的物体而非人类本身。
尽管我们的方法显得很简单,在ILSVRC的弱监督物体定位比赛中,我们最好的网络在测试集中达到了37.1%的top-5错误率,这与全监督的AlexNet达到的34.2%top-5错误率极其接近。此外,我们还证明所提方法中的深度特征可以很容易地用于其他数据集的分类、定位和概念发现(concept discovery)。
1.1 Related Work
卷积神经网络在视觉识别任务中有着令人印象深刻的表现。近期的研究表明,尽管在图片级的标签上训练,CNN在定位上也有着卓越的能力。本文中,我们证明了只要使用正确的架构,就能将这种能力泛化到不仅仅是定位物体,而是标定图片中具体哪一个区域正在用于分辨物体。这里,我们讨论与这些研究最相关的两条主线:弱监督对象定位和可视化CNN的内部表示。
弱监督物体定位(Weakly-supervised object localization)
与我们的方法最相近的是Oquab提出的基于global max pooling的方法。不同于global average pooling,他们用global max pooling来定位物体的点。但是,它们的定位局限于物体边缘的点,而不是确定物体的全部范围。我们认为虽然max和average很相似,但是平均池化更鼓励网络识别完整的物体区域。背后的原理是average pooling网络相比于max pooling识别整个物体的辨别性区域的损失更小。在3.2部分有详细的说明及验证试验。此外,不同于Oquab,我们证明了这种定位能力能够泛化,甚至能用于侦测网络没有训练过的数据。
【GAP 与 GAM 的区别】
我们使用class activation map来代表每个图中的激活图的权重,如第2部分所述。我们想要强调的是,global average pooling不是我们提出来的新技术,我们的创新点在于用它来精确定位区别性区域(discriminative localization)。我们相信,这种简单的技术可移植性很好,能应用于快速精确地解决很多计算机视觉中的定位问题。
可视化卷积神经网络: 最近有很多关于可视化卷积神经网络内部的研究,试图对其属性有更好的表现。Zeiler等人用反卷积网络来可视化激活每个单元的模式。Zhou等人发现CNNs被训练识别场景时会学习物体侦测,并证明了统一网络既能进行场景识别,又能进行物体定位。这些研究都只分析了卷积层,忽略了全连接层,因此是不全面的。通过移除全连接层并尽可能保持性能,能从头到尾更好的了解我们的网络。 Mahendran等人和Dosoviskiy等人通过转化不同层的深度特征分析了CNN的可视化解码。虽然这些方法可以转化全连接层,但是只展示了深层特征中什么信息被保留,并没有凸显出这些信息的相对重要性。不同于Mahendran和Dosoviskiy,我们的方法你能凸显出图片的那个区域是区别性区域。总的来说,我们的方法是对CNN的另一种深入呈现。
2 Class Activation Mapping
这一部分,我们描述了用CNN的global average pooling(GAP)生成class activation maps(CAM)的过程。某一确切分类的CAM代表了CNN用于做分类时所看的区别性区域的位置(如图3)。生成CAM的过程如图2。
我们使用了与Network in Network和GoogLeNet相似的网络结构——网络的大部分都是卷积层,只在输出层前(用于分类的softmax)使用global average pooling层,并将它们作为得出分类的全连接层的特征。通过这种简单的连接结构,我们可以把图片中的重要区域用输出层权重映射回卷积层特征的方式标记出来,我们称这种技术为类激活映射(CAM)。
如图2所示,全局平均池化层输出最后一个卷积层的每个单元的特征图(feature map)的平均值。这些值的加权总和用于生成最后的输出。也可以说,我们计算最后一个卷积层特征图的加权总和来获得我们的CAM。我们在下面用更规范的方式描述softmax的情况。同样的技术可以用于其他的回归函数或损失函数。
全局平均池化层(GAP)VS全局最大池化层(GMP):鉴于之前有的研究使用GMP做弱监督物体定位,我们认为很有必要直观地对比一下GAP和GMP的高亮区域的不同。比起GMP的鼓励网络只关注1个discriminaltive part,GAP更鼓励网络识别对象的整个范围。因为当求平均数时,这个值可以通过找所有discriminative part来最大激活而低激活减少了特定的输出。另一方面,对于GMP,所有图的低分区域(除了最有区分力的一个),都不会对得分有影响,因为你只取了max。我们在第三部分用ILSVRC数据集验证了此想法:GMP的分类性能与GAP相当,GAP的定位能力要强于GMP。
3 Weakly-supervised Object Localization
在这一部分,我们在ILSVRC2014数据集上评估了CAM的定位能力。我们先描述了实验的设置和用到的CNN网络,见3.1部分。然后在3.2部分验证了我们的技术不会在学习定位时对网络产生不利影响,并详细给出了弱监督对象定位的结果。
3.1 Setup
我们用下面这些流行的CNN网络评估CAM的影响:AlexNet,VGGnet和GoogLeNet。通常来讲,我们把这些网络的全连接层全部移除,替换为GAP,然后接一个softmax全连接层。 我们发现GAP前的最后一个卷积层有较高空间分辨率时网络的定位能力可以得到改善,我们之称为图分辨率(mapping resolution)。为了做到这一点,我们移除了一些网络的卷积层。具体来说,我们做了下面改动:对AlexNet,我们移除conv5之后的卷积层(pool5到prob),得到图分辨率(mapping resolution)为13x13。对VGGnet,我们溢出了conv5-3后的所有卷积层(pool5到prob),得到14x14的图分辨率。对GoogLeNet,我们溢出了inception4e后的卷积层(pool4到prob),得到14x14的图分辨率。对上述的每个网络,我们都添加一个3x3,步长为1,padding为1,1024个单元的卷积层,然后接一个GAP层和一个softmax层。最后对每个网络在ILSVRC的1.3M张要分成1000类的训练图片进行精调(fine-tuned),分别产生我们最终的AlexNet-GAP,VGGnet-GAP和GoogLeNet-GAP。 对于分类,我们与原始的AlexNet,VGGnet和GoogleNet与做了比较,也提供了Network in Network的结果。对于定位,我们与原始的GoogLeNet和NIN进行了比较,还用反向传播代替了CAM。此外,为了比较average pooling和max pooling,我们也提供了用max pooling训练的GoogLeNet的结果(GoogLeNet-GMP)。 我们使用一样的误差矩阵(top-1,top-5)作为ILSVRC对分类和定位的评估指标。对于分类,我们对ILSVRC的验证集进行了评估,对于定位,我们在验证集和测试集上都做了评估。
3.2 Results
我们先提供了在分类上的结果,以证明我们的方法没有对分类性能产生明显的不良影响。然后我们有证明了我们的方法在弱监督物体定位上十分有效。 *分类:**Tb.1总结了原始网络与我们的GAP网络的分类性能。我们发现多数情况下从各个网络中移除多余的网络层使分类性能下降了1%~2%。我们观察到AlexNet是移除全连接层后分类性能受影响最大的网络。作为补偿,我们在它的GAP层前添加了两个卷积层,得到AlexNet*-GAP网络。我们发现AlexNet*-GAP与AlexNet的性能相当。因此,总体而言,我们的GAP网络很大程度地保留了网络的分类性能。此外,与预期的一样,我们观察到GoogLeNet-GAP和GoogLeNet-GMP的分类性能相似。注意,为了在定位上得到好的表现,网络的分类性能很重要,因为它决定了网络是否能准确地分类和定位的边界。
定位:为了做定位,我们需要生成一个边界框及其关联的物体类别。为了生成CAM的边界框,我们使用简单阈值来划分热力图。我们先用大于CAM最大值的20%的值做一个边框,然后我们再用覆盖分割图中最大连通分量做一个边框。我们把预测的top-5全部如此标记出来。图6(a)展示了用这项技术生成的示例边框。在ILSVRC验证集上的定位性能见Tbl2,输出示例图见图5。
我们观察到我们的GAP网络表现最优是GoogLeNet-GAP的方法,达到了top-5上最低定位错误率43%,没有用任何一个带标注的边界框上训练就能达到这样表现的网络是前所未有的。我们也可以看到CAM方法明显优于反向传播的方法(比较结果见图6(b))。此外,我们发现GoogLeNet-GAP比GoogLeNet的定位性能更好,尽管得到的分类没有GoogLeNet好。我们是认为GoogLeNet(7x7)的低分辨率导致它丢失了精确地定位能力。最后,我们发现GoogLeNet-GAP比GoogLeNet-GMP表现更杰出,它的合理范围说明了average pooling在识别物体范围上比max pooling更重要。
为了进一步比较我们的方法与现有的弱监督和全监督CNN方法,我们评估了GoogLeNet-GAP在ILSVRC的测试集上的表现。使用一个稍微不同于以上的边界框选择策略:我们选择两个边界框(一松一紧),一个从top 1st和2nd预测类的CAM中选择,一个从top 3rd预测类的CAM中选择。我们发现这种启发式方法对改善验证集表现很有帮助,表现在表3种陈列。启发式的弱监督GoogLeNet-GAP在达到top-5错误率37.1%,与全监督的AlexNet(34.2%)十分接近。虽然令人印象深刻,但如果想用同样的结构得到与全监督的网络相同的性能,还有的路要走(如,弱监督的GoogLeNet-GAP vs 全监督的GoogLeNet)。
4 Deep Features for Generic Localization
CNN的更高层(比如AlexNet的fc6,fc7)已经被证明能提取到很有效的通用特征(generic features),其在各种个图片数据集上都有极好的性能。这里,我们证明了我们的GAP CNN学到的特征可以很好地作为通用特征,识别出用于分类的区别性区域,尽管没有针对这些特定任务进行训练。为了得到与softmax层相似的权重,我们在GAP的输出上简单训练了一个SVM。
表5对比了我们最好的网络GoogLeNet-GAP提取的特征与AlexNet的fc7提取的特征和GoogLeNet的ave pool提的特征比较。
与预期一样,GoogLeNet-GAP和GoogLeNet的表现明显优于AlexNet。同时,我们也发现GoogLeNet-GAP和GoogLeNet表现相近,尽管前者含有更少的卷积层。总的来说,我们发现GoogLeNet-GAP的特征与最先进的技术提取的特征不相上下。
更重要的是,我们想探究使用我们的CAM技术生成的定位图是否比GoogLeNet-GAP更具有信息性,即使在这种情况下也是。图8展示了各种数据集下生成的例图。我们发现所有数据中大多数区别性区域都被高亮标出。总体来说,我们的方法在一般任务中可以有效地生成能定位的深度特征。 在4.1部分,我们将探索鸟类的更细粒度的识别,并展示我们如何评估定位能力,使用它进一步提高性能。4.2部分证明了GoogLeNet-GAP可以用于从图片中提取通用视觉模式。
4.1 Fine-grained Recognition
在这一部分,我们将提取到的通用定位深度特征用于在CUB-200-2011数据中识别200种鸟类。这个数据集包含11788张图片,5994张训练集,5794张测试集。我们选择这个数据集是因为它也包含边界框注解,能让我们评估我们定位的能力。表4总结了结果。
我们发现,GoogLeNet-GAP与现有方法表现相当,在没有用任何带边界标记的数据训练过的情况下得到了全图(full-image)63%的准确率。使用边界框训练时,准确率增加至70.5%。现在,给出我们网络的定位能力,可以用3.2部分(即阈值)的方法先标出训练集和测试集中鸟的边界框,然后我们用GoogLeNet-GAP从边界框内提取特征来训练和测试。我们发现性能提高至了67.8%。在细粒度识别中,定位能力非常重要,因为类别之间的差别是极细微的,如果有更集中的裁剪区域,则会带来更好的区分度。 此外,我们发现GoogLeNet-GAP能准确定位41%的交并比为0.5(IoU,两个边界框的重叠度)的鸟,其他的只有5.5%(不确定翻译,原文为as compared to a chance performance of 5.5%)。我们在图7中足了一些可视化,进一步验证了我们方法的定位能力。
4.2 Pattern Discovery
这一部分,探索我们的技术是否能识别一般元素或出物体外的图片模式,比如文本或者更高维的概念。给一些包含普通概念的图片,我们想确定网络认为哪些区域是重要的,以及是否符合输入模式。我们使用了与以前相似的方法:在GoogLeNet-GAP网络的GAP层训练了一个线性SVM,并使用CAM技术识别重要区域。我们用我们的深度特征做了三个模式的实验,结果在下方总结。注意在这种情况下,我们不需要拆分训练集和测试集——只用CNN做视觉模式探索。 发现场景中信息丰富的物体:我们从SUN数据集[27]中抽取10个包含至少200个完全注解图像的场景类别,从而产生总共4675个完全注解的图片。我们针对每个场景类别训练一对一线性SVM,并使用线性SVM的权重计算CAM。图9绘制了预测风景类别的CAM,并列出了两个场景类别的CAM高激活区域中高频覆盖的前6个物体。我们发现高激活区域经常对应于指示特定场景类别的物体。
弱标记图像的概念定位:使用B. Zhou, V. Jagadeesh, and R. Piramuthu. Conceptlearner:Discovering visual concepts from weakly labeled image collections.Proc. CVPR, 2015中的hard-negative mining方法学习概念检测器并用我们的CAM技术定位图片概念。为了训练一个短语的概念检测器,positive set由包含文本标题中的短语的图片组成,negative set由随机选择的图片组成,文本标题中没有任何相关词语。图10,我们可视化了排名最高的图片以及两个概念检测器的CAM图。注意,即使这些短语比典型的物体名更抽象,CAM也会将这些概念的信息区域进行定位。
弱监督文本检测器:我们用350个Google Street View图片训练弱监督文本检测器,positive set包含SVT数据集的文本,negative set包含从SUN数据集种随意采样的室外风景图片。如图11所示,我们的方法没使用边界框注解就准确地标出了文本区域。
视觉问题回答:(Interpreting visual question answering)我们用我们的方法标出与B. Zhou, Y. Tian, S. Sukhbaatar, A. Szlam, and R. Fergus.Simple baseline for visual question answering. arXivpreprint arXiv:1512.02167, 2015.中提出的视觉问题答案相关的深度特征。在Open-Ended track中,整体准确率为55.89%。如图12所示,我们的方法标出了与预测答案相关的图像区域。
5 Visualizing Class-Specific Units
Zhou等人展示了CNN不同层的卷积单元可以作为视觉概念检测器,识别诸如纹理和材质之类的low-level concepts和物体或者场景这些high-level concepts。深入神经网络,这些单元变得越来越有识别能力。但是,很多网络由于全连接层,变得很难确定识别不同类的不同单元起到的重要性。这里,使用GAP和排序的softmax权重,可以直接可视化这些单元对给定类的识别的重要性。这里我们将其称为CNN的指定类单元(class-specific units)。 图13展示了AlexNet*-GAP的指定类单元,分别在ILSVRC数据集做物体识别(top)和Places Database做风景识别(bottom)。我们使用与Zhou等人相似的处理估计接收区域和分割最后一个卷积层的每个单元的激活图。然后我们简单地使用softmax的权重来对每个单元做指定类的排序。从图中我们可以看出到底是哪个单元将物体分类的区别性区域标记了出来。例如,检测狗脸和体表皮毛的单元对分类湖地猎犬很重要,检测沙发、桌子和壁炉的单元对分类客厅很重要。 因此我们可以推断CNN实际上学习了一个单词包,每个单词都是一个特定类区别性区域的单元。 这些特定于类的单元的组合可以指导CNN对每个图像进行分类。
6 Conclusion
本文针对使用GAP的CNN网络提出了一个叫做CAM的通用技术,这个技术可以让做过分类训练的CNN网络学会进行物体定位,不需要进行额外的边界框注解训练。CAM可以可视化预测类在任何给定图片上的得分,标出CNN检测到的物体的区别性区域。我们在ILSVRC上评估了我们的方法,进行了弱监督物体定位,证明了我们的全局平均池化层的CNN可以进行准确的物体定位。此外,我们证明了CAM定位技术可以推广到其他视觉识别任务中,也就是说,我们的技术可以生成通用的用于定位的深层特征,可以帮助其他用CNN做任务的研究人员,作为他们理解区别性区域的基础。
但是这个方法也有一个致命的缺点:它只能找出物体的一些突出特征的区域,比如狗的头部,这样就导致在定位的时候,容易只定位到物体的一部分。
参考链接:
论文翻译参考:
https://cloud.tencent.com/developer/article/1390900
https://zhuanlan.zhihu.com/p/27587399
https://www.jianshu.com/p/1a207e7ca460
https://blog.csdn.net/Dominic_S/article/details/81209887?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param
代码解释及修改参考:
https://cloud.tencent.com/developer/article/1370937
CAM实现过程讲解(代码讲解很详细):
https://blog.csdn.net/weixin_41735859/article/details/106384563
CAM的其他理解;
https://blog.csdn.net/dhaiuda/article/details/102937760
https://blog.csdn.net/yaoqi_isee/article/details/62214648