【论文阅读】Learning Deep Features for Discriminative Localization

2023-05-16

Abstract

研究了全局平均池化(global average pooling, GAP),分析了它如何仅仅使用图像级标签训练就能使CNN具有出色的定位能力(localization ability)。作者发现,尽管GAP若为一种正则化手段被提出(来自Network in Network),但它其实建立了一种具有定位能力的表示 ,可以显示出CNN在一张图片中关注到的区域。作者仅使用GAP和图像级标签(即仅使用图像标签进行弱监督语义分割),在ILSVRC2014的目标检测任务上取得了37.1%的top-5错误率。

Introduction

先前的工作表明CNN具有类似目标检测的定位能力(文章题目:Object detectors emerge in deep scene cnns.),即可以定位到图片中的物体,但一旦后面接全连接层进行分类,这种能力就消失了。许多卷积网络如NiN和GoogLeNet没有使用全连接层。

Global average pooling最初是在NiN中作为一种正则化方法提出的(避免过拟合)。但在作者本文的实验中,发现GAP层不仅有这个作用,而且可以保存CNN的这种localization ability。如图所示,仅使用分类标签训练的CNN就可以定位到图像中最discriminative的区域(即对分类最重要的,最具判别力的区域)。

在这里插入图片描述

作者仅使用GAP和图像级标签(即仅使用图像标签进行弱监督语义分割),在ILSVRC2014的目标检测任务上取得了37.1%的top-5错误率,接近当时的全监督方法。

Method

Class Activation Mapping

提出Class Activation Map(CAM)。某一类的CAM指出了CNN识别此类时最重要(discriminative)的图像区域。

作者使用类似NiN和GoogleNet的网络结构,即包含若干卷积层,在最后的输出层(如分类用的softmax层)之前,在最后一个卷积层的feature map上使用global average pooling,并将输出通过一个全连接层获取分类预测。

可以通过将输出层的权重投影回卷积层feature map来获取不同图像区域(region)的重要性,这就是class activation mapping。

在这里插入图片描述

如图2所示,GAP将最后一个卷积层的feature map在空间上取平均。然后人通过对GAP后的向量元素进行加权求和(即一个全连接层)获取分类logit。与这个过程类似,可以通过计算最后一个卷积层的feature map的加权和来获取class activation maps

f k ( x , y ) f_k(x,y) fk(x,y)表示最后一个卷积层中的第k个通道在位置 ( x , y ) (x,y) (x,y)的激活值(即最后一层feature map中通道k、位置 ( x , y ) (x,y) (x,y)处的值)。经过GAP后的输出为 F k = ∑ x , y f k ( x , y ) F_k=\sum_{x,y}f_k(x,y) Fk=x,yfk(x,y)。所以对于一个给定的分类c,softmax层的输入(class score) S c = ∑ k w k c F k S_c=\sum_kw_k^cF_k Sc=kwkcFk,其中 w k c w_k^c wkc是权重。可以认为 w k c w_k^c wkc表示了 F k F_k Fk对分类c的重要性。最终再经过softmax得到类别c的分类概率: P c = e x p ( S c ) ∑ c e x p ( S c ) P_c=\frac{exp(S_c)}{\sum_cexp(S_c)} Pc=cexp(Sc)exp(Sc)。这里没有考虑偏置项,或者可以认为偏置项为0。

S c S_c Sc可以进行如下变换:

S c = ∑ k w k c F k = ∑ k w k c ∑ x , y f k ( x , y ) = ∑ x , y ∑ k w k c f k ( x , y ) S_c=\sum_kw_k^cF_k=\sum_kw_k^c\sum_{x,y}f_k(x,y)=\sum_{x,y}\sum_kw_k^cf_k(x,y) Sc=kwkcFk=kwkcx,yfk(x,y)=x,ykwkcfk(x,y)

即对每个位置先乘以权重w再求和,结果不变。于是可以定义类别c的class activation map M c M_c Mc,这个map的每个位置的值如下:

M c ( x , y ) = ∑ k w k c f k ( x , y ) M_c(x,y)=\sum_kw_k^cf_k(x,y) Mc(x,y)=kwkcfk(x,y)

因此有 S c = ∑ x , y M c ( x , y ) S_c=\sum_{x,y}M_c(x,y) Sc=x,yMc(x,y)。所以, M c ( x , y ) M_c(x,y) Mc(x,y)直接表明了位置 ( x , y ) (x,y) (x,y)处的激活值对于图像属于类别c的重要性

我们知道,feature map中每个通道都会识别一种特定的visual pattern,即 f k f_k fk表示这种visual pattern的存在性。Class activation map就是对这些不同位置的visual pattern的存在性进行加权求和。通过将class activation map上采样到输入图片相同尺寸,我们就可以得出图片中每个区域对它被分为某个分类的重要程度(即对图片中对分类贡献最大的区域进行可视化)。图3显示了每张图片中对分类最重要的区域。

在这里插入图片描述

图4显示了同一张图片对不同分类的CAMs,可以发现对不同分类重点区域也不一样。

在这里插入图片描述

Global average pooling (GAP) vs global max pooling (GMP)

作者认为,使用GAP进行训练可以鼓励网络分辨出对于分类最重要的物体范围,而使用GMP(全局最大池化,即选择feature map中最大的一个值保留)则会让网络分辨出图像中仅一个最重要的位置。这是因为,GAP后的值来自于图像中所有discriminative parts,而GMP中只关注一个最大值,其余低一点的值都被忽略了。

由于二者的这个差别,GAP和GMP在分类任务上表现相似,但在检测任务上GAP比GMP表现要好许多。

在这里插入图片描述

Experiments

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【论文阅读】Learning Deep Features for Discriminative Localization 的相关文章

随机推荐

  • 医学图像数据集的挑战

    患者数据重叠 xff1a 当患者存在多个不同数据时划分数据集应避免随机划分 xff0c 避免同一个患者的数据出现在训练集 xff0c 验证集 xff0c 测试集 使用按患者划分数据集根据合理 集采用 xff1a 测试集或者验证出现数据不平衡
  • Ubuntu 查看磁盘空间大小命令

    http blog sina com cn s blog 6432901c0100w0tz html Df命令是linux系统以磁盘分区为单位查看文件系统 xff0c 可以加上参数查看磁盘剩余空间信息 xff0c 命令格式 xff1a df
  • 蜂鸣器发声音频率

    蜂鸣器发声音频率 蜂鸣器发声音频率 1 200Hz声音很小 200 300有声音 400嘟 500滴 600音调变高 700音调变高 800音调变高 2730Hz适合做滴的一声 3000最剌耳 声音大 转载 http blog ednchi
  • 应对不明确的项目需求

    今天在Javaeye上看到一个抱怨客户的无底洞需求时 xff0c 一个网友的回复 xff0c 觉得不错 xff0c 对以后自己接项目做个警示 xff1a From http www javaeye com topic 180477 61 6
  • 基于51单片机的波形发生器(四种波形)(毕业设计资料)

    四种波形的产生 xff0c 包括锯齿波 三角波 方波 正弦波 通过LCD液晶显示当前波形以及波形的频率 可以通过按键切换波形 xff0c 并可以通过按键进行设置当前波形的频率大小 xff0c 也可以设置频率设置不步进值 资料从主页链接中进行
  • hadoop 经典入门wordcount

    hadoop经典入门wordcount 主要有三大步 1 编写mapper函数 2 编写reducer函数 3 配置 public class WordCount mapper类 这些泛型继承自hadoop自定义的序列化框架Writable
  • 穿越火线数据包的抓取和分析及服务器欺骗的实现

    几天功夫 xff0c 我们敬爱的穿越火线从2 5到2 6再到2 7再到现在的2 8 xff0c 号称全服反外挂 xff08 的确是反了的 xff09 xff0c WPE会被检测为非法模块 本人就来说一下自己关于穿越火线数据包的抓取和分析及服
  • redis核心知识点总结(超详细)

    Redis Redis的单线程和高性能 Redis是单线程吗 xff1f Redis的单线程主要是指堆命令的执行是单线程完成的 xff0c 这也是Redis对外提供键值存储服务的主要流程 但Redis的其它功能 xff0c 比如持久化 异步
  • matplotlib报错:RuntimeWarning: More than 20 figures have been opened

    RuntimeWarning More than 20 figures have been opened Figures created through the pyplot interface matplotlib pyplot figu
  • Ubuntu 20.04 LTS 安装qt4 library

    How to Install Qt4 Libraries in Ubuntu 20 04 LTS July 9 2020 3 Comments The Qt4 framework has been removed from Ubuntu 2
  • keil C51 中使用虚拟串口调试串口

    功能介绍 xff1a 在不使用51开发板下 xff0c 使用keil C51中的软件仿真 和虚拟串口软件VSPD完成串口通信的过程 类似的还有一篇关于STM32调试串口的 keil MDK 中使用虚拟串口调试串口 操作步骤如下 xff1a
  • 计网复习——数据链路层

    计网复习 数据链路层 1 数据链路层设计要点 1 1 数据链路层概述 物理层实现了比特流的传输 xff0c 数据链路层在其基础上实现 帧 xff08 frame xff09 的传输 数据链路层传输的协议数据单元 xff08 PDU xff0
  • palindrome-partitioning

    题目 xff1a 给定一个字符串s xff0c 分割s使得s的每一个子串都是回文串 返回所有的回文分割结果 例如 给定字符串s 61 aab 返回 aa b a a b Given a string s partition s such t
  • platformIO上传程序到stm32失败,Warn : UNEXPECTED idcode: 0x2ba01477

    具体报错 Processing bluepill f103c8 platform ststm32 board bluepill f103c8 framework libopencm3 V
  • 华为云计算——FusionCompute单节点部署详细安装教程(一)CNA主机的安装

    1 实验准备 xff1a xff08 1 xff09 因为实验所需的CNA VRM 操作系统IOS的压缩包比较大 xff0c 需要提前将实验所需要的下载到本地电脑中 工程中需要在U盘中备份 用兼容性较高的电脑进行操作 xff0c 例如Thi
  • 基于单片机智能电子密码锁设计(毕业设计资料)

    摘要 随着信息技术的不断发展 xff0c 信息化时代也逐步进入普通家庭 xff0c 人们对个人的信息安全以及隐私等私密信息的安全要求不断提高 xff0c 传统的机械锁已经不能满足要求 针对此现状设计一款安全可靠廉价的电子密码锁有着十分重要的
  • 阿里云ECS利用密钥对ssh登录服务器

    1 在服务机上操作 创建要远程登录的用户和密码 root 64 izwz97s23bov6qmem6poj8z useradd jundong root 64 izwz97s23bov6qmem6poj8z passwd jundong N
  • 配置VNC连接阿里云服务器

    1 安装vncserver2 安装Linux gnome界面3 修改 vnc xstartup4 使用vnc工具连接 使用VNC Viewer使用Remmina Remote Desktop Client 1 安装vncserver 阿里云
  • 判断两个IP地址是不是在同一个网段

    判断两个IP地址是不是在同一个网段 要判断两个IP地址是不是在同一个网段 xff0c 就将它们的IP地址分别与子网掩码做与运算 xff0c 得到的结果一网络号 xff0c 如果网络号相同 xff0c 就在同一子网 xff0c 否则 xff0
  • 【论文阅读】Learning Deep Features for Discriminative Localization

    Abstract 研究了全局平均池化 global average pooling GAP xff0c 分析了它如何仅仅使用图像级标签训练就能使CNN具有出色的定位能力 localization ability 作者发现 xff0c 尽管G