【学习打卡03】可解释机器学习笔记之CAM类激活热力图

news2024/9/25 21:24:53

可解释机器学习笔记之CAM类激活热力图

文章目录

  • 可解释机器学习笔记之CAM类激活热力图
    • CAM介绍
    • CAM算法原理
    • GAP全局平均池化
    • GAP VS GMP
    • CAM算法的缺点及改进
    • CAM可视化
      • 同张图,不同类别
      • 不同图,同个类别
    • CAM弱监督定位
    • 用语义特征编码进行分类
    • CAM各种有意思的应用
      • 发现场景中有意义的物体
      • 定位比较抽象的概念
      • 弱监督文字检测
      • VQA任务
    • 显著性分析的意义
    • 总结和思考
    • 参考阅读

首先非常感谢同济子豪兄拍摄的可解释机器学习公开课,并且免费分享,这门课程,包含人工智能可解释性、显著性分析领域的导论、算法综述、经典论文精读、代码实战、前沿讲座。由B站知名人工智能科普UP主“同济子豪兄”主讲。 课程主页: https://github.com/TommyZihao/zihao_course/blob/main/XAI 一起打开AI的黑盒子,洞悉AI的脑回路和注意力,解释它、了解它、改进它,进而信赖它。知其然,也知其所以然。这里给出链接,倡导大家一起学习, 别忘了给子豪兄点个关注哦。

学习GitHub 内容链接:
https://github.com/TommyZihao/zihao_course/tree/main/XAI

B站视频合集链接:
https://space.bilibili.com/1900783/channel/collectiondetail?sid=713364

CAM介绍

一直以来,深度神经网络的可解释性都被大家诟病,训练一个神经网络被调侃为“炼丹”。所得的模型也像一个“黑盒”一样,给它一个输入,然后得到结果,却不知道模型是如何得出结论的,究竟学习到了什么知识。如果能将其训练或者推理过程可视化,那么可以对其更加深入的理解,目前深度神经网络可视化可以分为:

  • 可视化卷积核;

  • 可视化特征图;

  • 可视化激活热力图,也就是不同位置像素点对得出结果的影响程度

img

图 神经网络可视化汇总

其中,可视化卷积核 (a) 的方法最早出现,早在 2012 年的 AlexNet 就借助它来帮助解释 CNN 中卷积核的作用。

可视化特征图 (b) 方法出自 2014 年的《Visualizing and Understanding Convolutional Networks》一文,也就是上一期的学习的ZFNet的方法,这种方法通过反卷积和反池化对特征图进行了可视化,对于浅层网络的可视化效果良好。

可视化类激活热力图(Class Activation Map, CAM),也就是本文的主角,提出自 2015 年,它能够更进一步地可视化神经网络在预测某一类别时,具体关注了图像的哪些像素。在此基础上,近年来也一直有改进的方法被提出,比如Grad-CAM,ScoreCAM等等

在这里插入图片描述

image from woopets(activation maps created with a pretrained Resnet-18)

简单总结:

  1. 对深度学习实现可解释性分析、显著性分析

  2. 可扩展性强,后续衍生出各种基于CAM的算法

  3. 每张图片、每个类别,都能生成CAM热力图

  4. 弱监督定位:图像分类模型解决定位问题

  5. 潜在的“注意力机制"

  6. 使得Machine Teaching成为可能

CAM算法原理

首先我们可以看到,他的过程实际上就是一个新的CNN网络,从输入图像,到CNN网络,再到一个全局平均池化GAP。从最后一个GAP中我们可以得到512个平均值,得到512个feature之后,最后的线性层实际上就是对得到的512个feature让神经网络去学习哪个的权重更大,最后得到最后的预测结果。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XVyeC6Em-1671287938136)(C:\Users\86137\AppData\Roaming\Typora\typora-user-images\image-20221217192550608.png#pic_center)]

GAP全局平均池化

在常见的卷积神经网络中,全连接层之前的卷积层负责对图像进行特征提取,在获取特征后,传统的方法是接上全连接层之后再进行激活分类,而GAP的思路是使用GAP来替代该全连接层(即使用池化层的方式来降维),更重要的一点是保留了前面各个卷积层和池化层提取到的空间信息\语义信息,所以在实际应用中效果提升也较为明显!最早是在 Network In Network 中提出的。

这个全局平均池化,其实是对512x14x14的feature map进行做平均,这样就得到了512个平均值。实际上,GAP直接从 feature map 的通道信息下手,比如我们现在的分类有N种,那么最后一层的卷积输出的 feature map 就只有N个通道,然后对这个 feature map 进行全局池化操作,获得长度为N的向量,这就相当于直接赋予了每个通道类别的意义。

2540794-b4259c2d80371154.jpg

用GAP代替线性层是很有意义的,比如在VGG中,线性层的参数几乎占据所有参数的90%,所以进行替换是很有必要的;除此之外,我们会看到ResNet也有全局池化层。因为线性层不是起主要作用的,但是却占据了很多的参数,在ZFNet中也已经探究过了最后一层了,所以替换为GAP层既能减少参数,也不会太对模型造成影响。

2540794-056655bd58670994.png

GAP简单总结

  • 取代全连接层,避免使用全连接层导致参数量爆炸

  • 全局平均池化 (GAP) 减少参数量、防止过拟合

  • 而且每个GAP平均值,间接代表了卷积层最后一层输出的每个channel

GAP VS GMP

这里面作者讲了一下GAP和GMP,那为什么不用GMP呢,实际上GAP对关键区域范围内的特征都有影响,但在GMP中,非最大值的特征不影响模型分类性能,虽然GAP和GMP分类性能接近,但定位性能不同,所以最后还是选择了GAP。

CAM算法的缺点及改进

CAM算法确实很不错,但是他也存在一部分的缺点

1.必须得有GAP层,否则得修改模型结构后重新训练

2.只能分析最后一层卷积层输出,无法分析中间层

所以在后续的Grad-CAM中,针对这两个问题就进行了改进,利用求梯度的方法,这样就不需要对模型重新训练,并且也可以对每一层卷积层都能进行分析,得到最后的激活图,后续会对Grad-GAM进行学习。

CAM简单概括即为:修改网络全连接为GAP形式,利用GAP层与全连接的权重作为特征融合权重,对特征图进行线性融合获取CAM。

CAM可视化

通过线性分类权重,间接反映了类别对通道(channel)的关注程度,最后一层卷积层既保留了语义信息,又保留了位置信息。将某一类的线性分类权重与最后一层卷积层进行对应相乘,可得到该类的CAM类激活热力图。

假设 f k ( x , y ) f_k(x, y) fk(x,y) 表示最后一层卷积层输出的feature map中第 k k k 个channel上坐标为 ( x , y ) (x, y) (x,y) 的值,将 F k F^k Fk 记为全局平均池化GAP值,即:
F k = ∑ x , y f k ( x , y ) F^k=\sum_{x, y} f_k(x, y) Fk=x,yfk(x,y)
对于某一类 c c c , softmax层的输入值记为 S c S_c Sc ,即:
S c = ∑ k w k c F k S_c=\sum_k w_k^c F_k Sc=kwkcFk
其中, w k c w_k^c wkc 表示第 k k k 个channel的类 c c c 的权重。最后softmax层的输出值记为 P c P_c Pc ,即
P c = exp ⁡ ( S c ) ∑ c exp ⁡ ( S c ) P_c=\frac{\exp \left(S_c\right)}{\sum_c \exp \left(S_c\right)} Pc=cexp(Sc)exp(Sc)
M c M_c Mc 为类 c c c 的CAM值,记为:
M c ( x , y ) = ∑ k w k c f k ( x , y ) M_c(x, y)=\sum_k w_k^c f_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 M_c Mc,按照权重,最后进行上采样回原图的shape,最后就可以得到我们的类激活热力图。

同张图,不同类别

除此之外,由于因为CAM基于分类,所以被激活的区域是根据分类决定的,即同一个特征图,只更新不同的权重。所以即使我们使用同一张input,就像下面这个例子,这一同一张图,查看不同的类别

img

示例图片的地面真值是圆顶。五张类激活映射分别是前五名预测类别和得分。我们可以看到如果输出是宫殿,网络关注的是整块区域的。如果输出是圆顶,网络只是关注宫殿顶部。

不同图,同个类别

我们还可以查看,不同图,同个类别的可视化,从中我们会发现,实际上抓取的信息都是类别的主要特征,比如狗主要的是头的特征等的,这些也可以体现出CAM的重要意义

img

CAM弱监督定位

所谓的弱监督定位,实际上是用图像分类标注训练定位、检测、分割。

在早期的方法中,有一些比如可使用图像遮挡测试进行定位,可使用重叠图块进行预测,但是这些工作需要多次前向预测,并且是非端到端的;也可使用全局最大池化,导致只能获得边缘点,而非物体范围。

但是提出了CAM之后,这个方法可以使用GAP全局平均池化后进行绘制CAM热力图,并进行物体定位,只需要取连通图的20%的区域画出框,就可以得到结果。

直观上来说,CAM表示出了神经网络较为关注的区域,并且确定了类别,所以我们就可以认为,神经网络关注的区域按理来说,应该是类别的区域,在下图,我们也可以看到出来的他的表现,可以看出来,表现的还是比较好的,论文中认为IOU的阈值为0.5,最后的准确率大概能达到41%以上,比随机框的0.5%好很多。

img

用语义特征编码进行分类

由于我们的GAP层后,学习到了一部分有用的特征,所以在这个时候,我们就可以取出这一部分语义特征,对语义特征进行分类,其实简单来说,就是把训练好的模型的GAP层的输出,放到SVM线性层进行分类,判断是否能学到知识,其实我觉得这个和线性层是类似的,是相同的。除此之外,作者还在很多数据集上进行了测试,都得到了不错的结果,也侧面说明,实际上GAP从中还是学习到了很多的知识的。

img

CAM各种有意思的应用

CAM还可以利用在很多有意思的区域,这里面列了几种,还是非常有意思有意义的,也侧面展示了CAM是非常非常有用的,让我也个人感觉是非常make sense的。

发现场景中有意义的物体

我们可以用CAM可以看到场景中的一些物体,我们可以看到CAM关注的区域,实际上就是,对于场景有重要意义的位置。

img

定位比较抽象的概念

还可以通过一个短语训练一个网络,通过检测文字的信息,这样可以得出图像和短语中有意义判断的区域

img

弱监督文字检测

还可以进行文字检测,进行文字检测,我们可以看到CAM图关注的还是文字的区域

img

VQA任务

我们还可以做VQA任务,我们可以对得到结果在图像中表现出来,比如brown是哪一部分,在图像中也会展示出来。

img

显著性分析的意义

在学习过程中,我发现很有意思的一个东西,就是从Machine Learning到Machine Teaching,在视频中讲解了一个博士做的一个工作的结果,在一定的训练和学习的时候,AI已经能够达到远超人类的能力了,这个时候,AI已经可以可以教一些工人去学习,告诉他们哪一部分是比较重要的了,去teach和帮助人类去学习了。

包括还有一篇比较有意思的论文,Making a Bird AI Expert Work for You and Me,AI已经可以教你去识别各种鸟类了,他可以帮助你成为专家,教你去学习

在这里插入图片描述

其实听到这一部分,我觉得很有意思,实际上AlphaGo不就是在做这样的事情么,包括腾讯的绝艺机器人成为国家的陪练,这时候AI已经超过了人类的,他可以反过来去教人类怎么下围棋,怎么跳出一个已有的框,得到更好的结果。

但是,有些人说的也对,这有什么意义呢,如果AI已经表现的很好,那我们的钻研可能就变成了没什么意义了,有些人苦练围棋三十载,准备一鸣惊人的时候,AI已经双手插兜,找不到对手了,那他可能苦练的意义就不大了,这也是一种悲哀。不过在某一方面,AI在学习,我们人也在学习,科技的进步一定是有意义的,一定会对我们的生活带来好处。

总结和思考

  • 为什么要对深度学习模型做可解释性分析和显著性分析?
  • CAM有哪些应用场景?
  • CAM方法,与基于梯度和反向传播的显著性分析方法,有什么区别?
  • 原始的CAM方法有什么缺点?后续有哪些算法做了什么样的改进?
  • 论文中,如何用CAM热力图实现物体的定位?这种定位方法的巧妙之处是什么?
  • 如何理解CAM的“弱监督定位” ?
  • 哪些经典的图像分类网络中用到了GAP层?
  • GAP层在普通卷积神经网络中的作用是什么?
  • GAP层在CAM中的作用是什么?
  • 原生CAM仅用于图像分类,针对目标检测、图像分割、关键点检测等涉及位置坐标的Dense Prediction任务,如何进行可解释性分析和显著性分析?
  • CAM方法有哪些缺点?如何改进?

对于CAM中的弱监督的物体定位,其实是用图像分类标注训练定位、检测、分割,可使用图像遮挡测试进行定位,可使用重叠图块进行预测,这些工作需要多次前向预测,并且是非端到端的;也可使用全局最大池化,导致只能获得边缘点,而非物体范围。可以使用GAP方式进行绘制CAM热力图,并进行物体定位,只需要取连通图的20%的区域画出框,就可以得到结果。

与反向传播的显著性分析方法来比,实际上CAM生成是一个粗粒度的矩阵,而基于反向传播的方法实际上生成的比较细粒度的矩阵,在CAM的附件中有,他的方法实际上是求了对于每一个像素的梯度,所以是比较细粒度的,这两者是不同的,从下图我们也可以看到一些比较。

img

在论文中,实际上是通过对CAM热力图的连通性进行操作,取最大值的20%的区域进行画框,这样就可以完成定位,这样定位的巧妙之处在于,实际上不需要通过更多的任务,我们只通过有图像分类的数据集就可以实现物体的定位,非常巧妙。

在一些经典的图像分类网络中,我所知道的Inception和ResNet其实就用到了GAP层,这其实极大的减少了参数,也提高了网络的泛化性,是一个很好的尝试和改进。

读了这篇论文后,让我知道,CAM 可视化可以帮助我们理解模型原理,分析预测错误的原因。但是需要注意的是,CAM 的可视化只能解释模型在分类时关注的区域;除此之外,CAM使得弱监督学习发展成为可能,可以慢慢减少对人工标注的依赖,能降低网络训练的成本。通过可视化,就像往黑箱子里打了一个手电筒,让人们可以尝试去理解网络,是非常好的一篇论文。

参考阅读

  • 可以根据按照代码教程:https://github.com/TommyZihao/Train_Custom_Dataset,用pytorch训练自己的图像分类模型,基于torch-cam实现各个类别、单张图像、视频文件、摄像头实时画面的CAM可视化

  • torch-cam库的github https://github.com/frgfm/torch-cam

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统中DDR3硬件初始化实验

大家好,我是ST。 今天的话,主要和大家聊一聊,如何使用Cortex-A芯片自带的RAM,很多时候要运行Linux的话是完全不够用的,必须要外接一片RAM芯片,驱动开发板上的DDR3。 目录 第一:何为RAM和ROM …

为什么要学习Python爬虫与数据可视化?

提到Python爬虫与数据可视化,我们都不陌生。因为我们早已身在大数据驱动的时代,数据分析已然成为了一项必备技能。可能有人会问,为什么要学习Python爬虫与数据可视化? 答案是显而易见的,无论是出于时代发展的要求&…

redis之如何支持秒杀场景

写在前面 本文一起看下Redis在秒杀场景中的应用。 1:秒杀都有哪些阶段 redis并非在秒杀的所有阶段都需要使用到,为了更好的了解redis在秒杀场景中的应用,我们先来看下秒杀的不同阶段,基本可以分为秒杀前,秒杀进行时&…

什么是用户增长? (超详细)

一.概况 原因:随着人口红利的衰减,互联网流量红利的马太效应显现,这意味着成本的大幅度增加,企业必须改变过去粗放型的营销和运营方式,用更高效更低成本实现快速增长 定义:通过实验和数据驱动&#xff0c…

5.Linux实用操作

文章目录零、学习目标一、软件安装1、Linux系统的应用商店2、yum命令3、apt命令 - 扩展二、systemctl命令三、软连接四、下载和网络请求1、ping命令2、wget命令3、curl命令五、端口1、概念2、查看端口占用六、进程管理1、概念2、查看进程3、查看指定进程4、关闭进程七、主机状态…

SAP ABAP 开发管理 代码增强标记 位置使用清单(Mark of enhancement)

SAP ABAP 开发管理 代码增强标记 位置使用清单(Mark of enhancement) 引言: 代码增强标记 (Mark of enhancement)是我在 ABAP 开发中对增强管理的方法之一,是对 SAP 系统增强管理工具的补充。通过对代码增…

自学Python找不到工作?只要掌握这七大块,月薪15K轻轻松松

1. 开发环境和开发工具 python3.6下载 Download Python sublime Text 3 Sublime Text - Download pycharm下载 PyCharm :: Download Latest Version of PyCharm 2. python语法知识 个人推荐《Python从入门到实践》、《Python编程快速上手》 3. web框架 djangoh中文文档 D…

九、Docker 复杂安装之mysql主从复制

前面我们介绍了Docker 安装单机版mysql,如果没有看可以先看下:https://blog.csdn.net/u011837804/article/details/128315385 本篇学习的前提是懂得mysql主从复制的原理,话不多说,我们开始。 1、下载mysql5.7镜像 涉及命令: 查看本地镜像命令:docker images拉取mysql5…

最近邻 M 点

一 问题描述 在 K 维空间中有很多点,给定一个点,找出最近的 M 个点。点 p 和点 q 之间的距离是连接它们的直线段的长度。 二 输入和输出 1 输入 有多个测试用例。第 1 行包含两个非负整数 n 和 k ,分别表示点数和维数,1≤n≤5…

Python: unittest框架

目录 1.0 接口自动化框架设计 2.0 分层设计框架 3.0 接口配置文件 3.1 测试用例数据 4.0 框架执行入口 4.1 测试函数 4.1.1 参数替换 4.1.2 发送请求处理 4.1.3 响应断言 4.1.4 提取全局变量 4.1.5 数据库断言 5.0 工具类 5.1.1 excel文件处理 5.1.2 数…

直呼内行阿里离职带出内网专属“高并发系统设计”学习笔记

前言 我们知道,高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能操纵流量,让流量更加平稳得被系统中的服务…

python 之 pandas数据处理

目录 一:读取文件 二:查看数据 三:获取数据 四:按标签选择 五:按照位置选择 六:布尔索引 七:缺失值 一:读取文件 read_csv 加载文件 df pd.read_csv("classify.csv&quo…

SPRING-了解2-XML

两种bean Spring中有两种bean:一种普通bean,另外一种工厂bin (Factory Bin&#xff0c;注意不是前面说的BeanFactory类) 普通Bean:xml中定义什么类型返回的就是什么类型 <bean id"book" class"com.i7i8i9.spring5.collectiontype.Book"> xml中clas…

Linux 应用基础 Framebuffer应用编程

文章目录前言一、了解Framebuffer二、了解LCD1.LCD的操作原理2.LCD坐标三. Framebuffer 程序分析1. 打开设备&#xff1a;&#xff08;open&#xff09;2. 获取LCD参数 : ( ioctl )3. 映射 framebuffer: ( mmap )四. 描点函数&#xff1a; &#xff08; lcd_put_pixel &#xf…

【OpenFOAM】-olaFlow-算例3- currentWaveFlume

算例路径&#xff1a; olaFlow\tutorials\currentWaveFlume 算例描述&#xff1a; 波流耦合模拟&#xff0c;该算例提供了四种工况&#xff1a;(1) Waves and forward current&#xff0c;(2) Waves and backward current&#xff0c;(3) Forward current only&#xff0c;(4) …

【LSTM预测】基于卷积神经网络结合双向长短时记忆CNN-BiLSTM(多输入单输出)数据预测含Matlab源码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

【云服务器 ECS 实战】一文掌握负载均衡服务原理及配置方法

一、负载均衡基本原理概述协议/端口轮询策略会话保持二、云服务器 ECS 负载均衡相关配置协议&监听配置后端服务器配置健康检查配置测试在上期文章中&#xff0c;介绍了负载均衡的概述及优势&#xff0c;并详细演示了阿里云服务器负载均衡服务的选型与购买配置。本期文章我们…

字节最新秋招面试题泄露,“背完”这些你也可以拿到字节offer

Java 一面基本上都是基础题&#xff0c;同样是 CURD 的活&#xff0c;谁更熟练要谁&#xff0c;比如下面这些面试题&#xff0c;八股文越熟练越容易通过 Java 面试。下面会给大家详解的介绍一下每个技术点的必问问题&#xff01; 一、Java 基础 1.JDK动态代理和CGLIB动态代理的…

12月18日第壹简报,星期日,农历十一月廿五

12月18日第壹简报&#xff0c;星期日&#xff0c;农历十一月廿五1. 官方&#xff1a;预计我国今年经济总量超过120万亿元&#xff0c;明年经济有望总体回升。2. 多地血库告急&#xff0c;两部门修改“指引”&#xff1a;最后一次新冠核酸或抗原阳性结果7天后可献血。3. 北京&am…

Wireshark 实验

本部分按照数据链路层、网络层、传输层以及应用层进行分类&#xff0c;共有 10 个实验。需要使用协议分析软件 Wireshark 进行&#xff0c;请根据简介部分自行下载安装。 准备 请自行查找或使用如下参考资料&#xff0c;了解 Wireshark 的基本使用&#xff1a; 选择对哪块网…