【学习打卡】CAM可解释性分析-算法讲解

news2024/9/27 5:35:50

文章目录

      • 引言
      • 该算法能做什么
        • 直观上
        • 研究上
        • 意义上
      • 精妙之处
        • 定位特点
        • 弱监督学习特点
      • 作者简介
      • CAM算法原理
        • 具体计算方法
      • 巧妙之处
      • 讨论
        • 全卷积神经网络
          • 池化简介
          • 池化的作用
        • 全局平均池化
      • CAM总结
      • SqueezeNet
      • 显著性分析的意义
        • 例1:工艺改进
        • 例2:识别鸟
        • 例3:围棋
      • 扩展阅读
        • 可视化工具
          • CAM算法介绍
          • 使用范围
      • 思考题
      • 总结

引言

  • CAM类激活热力图︰深度学习可解释性分析、显著性分析 经典之作

  • Learning Deep Features for Discriminative Localization, CVPR2016

  • 该课程由B站同济子豪兄主讲

  • 课程链接:https://www.bilibili.com/video/BV1Ke411g7gm/?vd_source=2c3e1c3086544e2bbc96712d9fb90632

该算法能做什么

直观上

利用摄像头实时交互

  • 右图:显示当前拍摄到的场景

  • 左上角:深度学习预测的类别

  • 左图:图像对应的热力图 -> 实时分析网络每 10 秒关注图像中的哪些区域

在这里插入图片描述

上图实战:torch-cam工具包:CAM热力图

研究上

  • 作为一个重要的创新点
  • 不再只是训练了一个图像分类模型而已,可以查看训练出来的分类模型的热力图的效果

意义上

  • 奠定了可解释性分析、显著性分析的基石

  • 后续衍生出了若干基于CAM的算法,如下图

  • 让图像分类不再是一个黑箱子

    在以前,往网络输入图像,然后黑箱子给我们输出预测结果,没人知道

    • 它内部的决策分布具体长什么样
    • 也根本不清楚他内部的脑回路
    • 它到底是怎么做出分类决策的
    • 它到底学习到了哪些特征
    • 是不是符合人类的常识
    • 它什么时候会work?
    • 什么时候不work?
    • 他到底有没有过拟合?
    • 该如何进一步的去改进他?

    故通过CAM热力图,可以分析它和人的直觉是不是一致的,它是不是靠谱的。

在这里插入图片描述

精妙之处

在这里插入图片描述

定位特点

同一张图像的不同类别可以产生不同的CAM热力图

根据类别的不同,网络的关注点也不同

注意,此时该神经网络是一个图像分类模型,他本应该只会干分类的事情,但是现在他有了在图像上找目标、找区域、定位、画热力图这样的能力。(潜在的注意力机制,分析出神经网络对图像上的哪部分感兴趣)

在这里插入图片描述

弱监督学习特点

用图像分类的数据及图像分类的标签数据训练出了图像分类模型,该图像分类模型不光可以分类,还可以用来定位

以下图为例

  • 孔洞 -> 福建土楼

  • 水面上枝质的木干 -> 吊脚楼

在这里插入图片描述

飞檐斗拱 -> 北京故宫

在这里插入图片描述

尖塔和穹顶 -> 拜占庭建筑

在这里插入图片描述

作者简介

  • 周博磊是汤晓鸥的学生

    • 汤晓鸥是商汤的创始人。
    • 在香港中文大学汤晓鸥成立了MMLab多媒体实验室。
      • 很多大佬啊,比如说何凯明、周博磊都是MMLab的学生
  • 周柏磊现在在UCLA(University of California, Los Angeles加利福尼亚大学洛杉矶分校)当老师

  • 周博磊先是在上海交大读了本科,又去香港中文,然后写这篇论文的时候是在MIT写的,现在在UCLA当老师。

在这里插入图片描述

周博磊b站强化学习纲要

在这里插入图片描述

CAM算法原理

预备知识

在这里插入图片描述

下图是CAM论文的核心插图

一个普通的图像分类模型,输入一张原始图像,经过若干个卷积层,最后一个卷积层输出若干个feature map。

举例:

比如说输出512个feature map,每一个feature map被称为一个channel,就是一个矩阵,每一个矩阵都是14 x14的,就是有14行14列的一个矩阵。

  • 蓝、红、绿色薄片是一个channel,有14x14个元素是一个矩阵,

  • 总共有512个薄片 -> 对应了卷积神经网络最后一层提取出来的512种特征 -> 每一个特征体现在每一个对应的薄片上

  • 把蓝色channel取一个平均值,把这14×14=196个激活值取一个平均值,得到蓝色的标量

  • 同理,512个channel / 矩阵 / feature map,共得到512个标量 / 平均数,成为全局平均池化

512个平均数会起到全连接层的作用,后面再接一层线性分类层,训练得到它对每一个类别的平均数的权重,再进行softmax操作,得到每个类别的概率

每一个概率都是0 - 1之间的,并且这每个概率求和为 1 -> 得到完整的图像分类预测结果,top 5就是图像分类的预测结果

在这里插入图片描述

具体计算方法

  • 上图中的权重 w 1 w_1 w1是该类别对蓝色平均值(蓝色圈圈)的一个关注程度

    • 蓝色平均值是由蓝色矩阵 / 蓝色channel / 蓝色feature map / 蓝色薄片计算得到的
  • 权重 w 1 w_1 w1 间接的反映了该类别对蓝色feature map的关注程度

    • feature map是卷积神经网络最后一层从图像中提取出来的某一种特征
  • 权重 w 1 w_1 w1 间接的反映了该类别对这种特征的关注程度

又因为feature map这个14 x 14的矩阵,其实是包含一些位置信息的。

举例:图上的狗在图像的右下角,那么在矩阵的右下角,如果该特征很重要,对应了狗身上的特征,那么它右下角的激活值也会很大

  • 所以蓝色矩阵既保留了语义信息,又保留了位置信息
  • 权重体现了该类别对这个矩阵的关注程度

w 1 w_1 w1 × 蓝色矩阵 + w 2 w_2 w2 x 红色矩阵 + …… + w n w_n wn​ × 绿色矩阵 -> CAM热力图

巧妙之处

全局平均池化(Global Average Pooling,GAP),把每一个channel变成了一个平均数,用该平均数的权重能间接反映出该类别对所属channel的影响程度

该权重啊,从 w 1 w_1 w1 w n w_n wn,最后一个卷积层是14 x 14的channel得到的CAM热力图,故也是14 x 14的低分辨率的矩阵。

可以用双线性插值的方法把它缩放回原图大小(类似于word和ppt里的图像缩放),变成一个高分辨率的热力图。

在这里插入图片描述

讨论

全卷积神经网络

无池化

池化简介

在这里插入图片描述

池化是把大的feature map变成小的feature map,有称为下采样

上图:3 × 3 的池化窗口

  • 最大尺化:每个窗口,只挑出最大的值,作为该池化窗口里9个数的代表。
  • 平均尺化:挑出平均值叫

一般使用最大尺化

在这里插入图片描述

池化不需要学习任何参数

池化的作用
  1. 减少计算量

    大的feature map变成了小的feature map,输给下一卷积层的的数据变少,自然计算量就小了

  2. 防止过拟合

    大的图变成一个小的图,但是核心信息仍然保留在小图上,大而化之的防止过拟合。

  3. 平移不变性

    如下图:一个人的脸偏右,一个人的脸偏左,假如一个识别眼睛特征的卷积核,它产生的feature map是眼睛区域的,那么有两块是高亮的,剩下的是低值的,眼睛不管在右还是左,得到的输出是一模一样的,这正是池化的引入使得卷积神经网络,对输入的位置不敏感,产生了平移不变性。

    卷积神经网络就是要在变化的输入中找到不变的东西,那在平移不变性这个领域,就是由池化来实现的

    缺点:平易不变性的引入也意味着丢失了空间信息。

    在这里插入图片描述

池化(下采样)引入了平移不变性,也意味着丢失了长宽方向的位置信息。因此在CAM热力图中,不使用带池化的卷积神经网络。

全局平均池化

薄片/channel -> 平均数的过程(多图预警)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

GAP这个操作,可以取代全连接层

  • 传统卷积神经网络里面,最后一层卷积层产生了若干个channel,需要把每一个channel展平成一个长向量,再把这个长向量输入给全连接层,这种操作太消耗计算量、也太消耗参数量了,参数量会爆炸,比如说在VGG中,共有100003500万个参数。第一层卷积层就消耗了1亿多个参数,网络总共才1315755692万个参数,这是非常不经济的。
  • 用全局平均池化取代全连接层能大大减少参数量,以前需要512 x 14 x 14个元素,现在只要512个元素就可以了

在这里插入图片描述

这个操作最早是在NIN network这篇论文里面,

这是一篇伟大的论文,它里面提出了两个操作,一个叫1x1卷积,一个叫全局平均池化。一直沿用到今天,很多算法都在使用

在这里插入图片描述

CAM总结

  1. 全局平均池化(GAP)取代全连接层
    • 减少参数量、防止过拟合
    • 每个GAP平均值,间接代表了卷积层最后一层输出的每个channel
  2. CAM算法中,必须有GAP层
    • 无法计算每个channel的权重
    • 如果没有GAP层,需把全连接层替换为GAP,再重新训练模型
  3. CAM算法的缺点
    1. 必须得有GAP层,否则得修改模型结构后重新训练
    2. 只能分析最后一层卷积层输出,无法分析中间层

SqueezeNet

  • 轻量化卷积神经网络
  • SqueezeNet的分类层是最后一个卷积层,输出1000个channel/薄片片,对应着1000个类别的CAM图(直接对应了类别数)
    • 对每一个channel做GAP,global average pooling,得到了该类别的logit,1000个channel变成了1000个平均值,再直接进行softmax就得到了1000个类别的softmax置信度。

优点:

  1. 一步到位,不需要再过一个线性分类层,直接GAP得到的值就是GAP分数,对于SqueezeNet而言,这个channel就是CAM热力图,只需要一次前项运算,取出最后一层卷积层对应的每一个类别的channel,就直接获得了每一个类别的CAM热力图。
  2. 用squeeze的速度很快,它本身是轻量化网络,而且它不需要进行加权求和的操作,直接一步到位的从网络输出中获取某一个类别的CAM热力图。

在这里插入图片描述

显著性分析的意义

从machine learning到machine teaching

例1:工艺改进

知乎上的一篇文章:德国的一家激光加工企业的博士,他做了一个卷积神经网络预测工艺参数的数据集,训练出了一个远超人类水平的ai,对该ai做可解释性分析显著性分析。他发现ai学到的特征,反过来可以指导普通的工人去改进工艺的参数,ai展示出它通过大量的数据学习到的特征、它在图像上关注的区域

  • 哪些特征、哪些区域是ai重点关注的区域?
  • 对某一个类别特别重要,影响特别大的区域是哪里?

在这里插入图片描述

例2:识别鸟

machine teaching教普通人去识别鸟的一个工作

一个细粒度的图像识别,因为各种鸟,都是鸟,很难学,很难判别他们的差异,都是两个翅膀、一个尾巴、一个喙、两个眼睛。有鸟类专家先标注一些权威的鸟类图像分类数据集,用它去训练一个ai,图像分类模型把它用大量数据学习到的特征以注意力图的形式显示在原图上,如右边第三行第二个,ai更关注他的喙、脑袋还有尾巴,正是这些区域使得ai预测出它是一个加利福尼亚的一个海鸥到码头整点薯条。

不光是鸟类,各种的植物、动物、甲虫、蘑菇,大自然的万事万物都可以通过这种方法让ai去教我们去识别。

在这里插入图片描述

例3:围棋

同理,AlphaGo下围棋,它远超人类水平,可以战胜人类最顶尖的职业棋手,反过来,AlphaGo也可以向我们展示它下棋的思路,这些思路可能是非常复杂、高深的。机器学习、强化学习,通过几亿轮的迭代次数学习到的特征。这是一个普通的职业棋手可能一辈子都达不到的境界,那他把这个思路展现给普通下围棋的人,是不是能够帮我们提升棋艺呢?

但是我们再怎么提升棋艺,也干不过AlphaGo了。

看到过一篇文章说AlphaGo使得围棋这项运动本身的意义受到了怀疑、受到了挑战,人工智能让很多事情变得没有意义了。一个职业棋手苦心钻研围棋几十年,像达摩组师一样,闭关修行之后发现一辈子修行的结果是下不过AlphaGo,那么他就变成了一个可笑的行为艺术,本来是受人尊敬的禅修现在变成了一个可笑的loser。

所以。不懂ai技术的人,会觉得ai特别厉害,但是实际上,我们打开ai的黑箱子,赋予它可解释性和显著性,让它展示到它学习到的特征,看看关注的区域是不是和我们人是一致的,这样我们才能改进他、了解他、信赖他,甚至把生命托付给他,

在这里插入图片描述

扩展阅读

在这里插入图片描述

可视化工具

CAM算法介绍

https://mp.weixin.qq.com/s/lOR3OQTkr1nu3ERBawZ1kw

使用范围
  • transformer的模型
  • 基于卷基神经网络CNN的模型
  • 自然源处理的模型
  • 强化学习的模型

思考题

值得思考的一些问题

在这里插入图片描述

总结

学习CAM算法的基本原理,了解其来源以及使用范围,非常期待未来它的代码实战练习

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

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

相关文章

事业编招聘:事业单位招聘136人!可免笔试!

吉林的小伙伴看过来 2023年吉林四平事业编招聘136人 本科起报名,研究生免除笔试 报名时间:12月20日至12月24日 感兴趣的宝子们别错过了哦 为深入实施“万名大学生留平计划”,持续加大我市党政干部的专业化人才储备力度,现面向…

数据治理的数据流程整合

一、核心业务流程 在企业业务整合时,根据企业对信息化的投入,避免整合对企业业务流程影响过大,按照循序渐进的方式进行整合。 核心业务流程是企业经营、存在、发展的基础。在信息整合中,要围绕这样的业务流程整合企业的信息。在…

首看世界杯

首看世界杯,不谈技术,只聊自己的几点感受,纯属个人感想。 今年是第一次关注世界杯,本来对足球是没有什么兴趣的。如果说对足球有什么了解的话,大部分还是来自小时候的动画片“足球小将”。但是看现实中的足球比赛&…

Java项目:SSM酒吧后台管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 管理员角色包含以下功能: 管理员登录,桌位信息查看,查看账单,日常维护,酒水库存管理等功能。 环境需要 1.运行环境:最…

桌面壁纸实时展示粉丝数(CSDN)

最近csdn偶尔就又有几个同学关注我,觉得很有动力!于是我想能在任何时候的桌面壁纸,都能看到csdn粉丝数以及显示他们的昵称,我觉得会很有意义! 下面展示效果,(「・ω・)&…

ArcGIS:如何进行栅格数据的拼接和裁剪、坡度坡向的提取、地形透视图的建立、等高线的提取、剖面图的创建?

目录 01 说明 02 实验目的及要求 03 实验设备及软件平台 04 实验内容与步骤 4.1 DEM 数据拼接和裁剪 4.2 地形属性的提取 4.3 透视图的建立(均在ArcScence中操作) 4.4 建立和显示 TIN 4.5 创建等高线图层 4.6 垂直剖面图创建 4.7 坡度分级 05 实验结果与…

【MySQL】MySQL性能优化

MySQL性能优化1、SQL语句及索引优化1.1 EXPLAIN查看索引使用情况1.2 SQL语句中IN包含的值不应过多1.3 SELECT语句务必指明字段名称1.4 当只需要一条数据的时候,使用limit 1,limit 是可以停止全表扫描的1.5 排序字段加索引1.6 如果限制条件中其他字段没有…

JAVA类和对象重点笔记及理解

1.类创建对象的详细过程 创建完成,dog就成了一个实例(对象),具有属性和方法 Dog类的属性:一般叫做成员变量 Dog类的方法:一般叫做成员方法 类是对象的抽象,对象是类的具体实例。 2.JAVA的数据…

Mycat(4):mycat名词解释

1、逻辑库 对实际应用来说,并不需要知道中间件的存在,业务开发人员只需要知道数据库的概念,所以数据库中间件可以被看做是一个或多个数据库集群构成的逻辑库。 如图一中,在MYCAT服务区中的TESTDB库,只是逻辑上存在的数…

使用GraalVM 构建 Spring Boot 3.0 原生可执行文件

GraalVM 介绍 既然是VM,那肯定也是一个虚拟机,那它跟JVM有关系吗?有一定关系,GraalVM 可以完全取代上面提到的那几种虚拟机,比如 HotSpot。把你之前运行在 HotSpot 上的代码直接平移到 GraalVM 上,不用做任…

【GRU回归预测】基于麻雀算法优化门控循环单元SSA-GRU神经网络实现多输入单输出回归预测附matlab代码

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

java秋招被问到的八股文

投递的岗位是Java后端开发,八股文背了很多,现在面过三十场,做一个总结,整理出一些我确实被问到的问题。 该准备什么 首先是简历里的项目,一定要好好整理,项目的架构是怎样的,开发过程中遇到的…

国产实时操作系统+intel x86/龙芯平台超边缘计算机方案

引言 近年来,物联网、云计算、机器学习和网络安全等技术不断推动工业 4.0 的发展,“云边端” 的架构正逐步替代 “云管端”,边缘计算成为新时代许多领域转型的关键要素。以智能制造为例,不同于为互联网服务的 CDN 边缘计算技术&a…

Spring(二):Spring的创建和使用

目录一、创建Spring项目1.1 创建一个Maven项目1.2 添加Spring框架支持1.3 创建启动类二、使用Spring存储对象2.1 创建Bean2.2 将Bean注册到容器三、获取并使用Bean对象3.1 创建Spring的上下文3.2 从Spring上下文对象中取出Bean对象3.3 使用Bean一、创建Spring项目 1.1 创建一个…

传统数据治理的常见陷阱有哪些?

一、传统的数据治理 传统的数据治理是一种数据优先的治理方法。这种传统方法缺乏响应数据用户需求的流动性——或者在新法规出现时适应新法规的灵活性。传统方法概述角色、创建数据标准、分配责任并创建公司范围的数据策略。因为它强调对数据的控制,这种方法威胁工…

Java程序接入ChatGPT

Java程序接入ChatGPT0 前言1 还想体验的小伙伴可以试试2 Java接入前准备3 官方支持接入语言4 调用费用5 接口调用说明6 代码实现6.1 postman调用6.2 Java调用7 小结0 前言 之前文章中我们聊过怎么注册使用最近很火的ChatGPT?这期我们来看看怎么在Java中调用ChatGPT…

openssl aes加密例子

openssl OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。 首先,要安装 openssl: centos命令: sudo yum install openssl-devel ubuntu命令&#x…

重学webpack系列(一) -- 前端模块化的演变历史

前言 任何事物的产生都有他的必然性,就像是冥冥之中注定了一样,在JavaScript刀耕火种的时代,前端是被定义为切图的一项工作,页面逻辑与交互全部由服务端工程师完成,前端开发几乎不受服务端开发重视,那时候…

免费教你如何设计商品主图,手把手教学!

好看的电商主图都是怎么设计出来的?有什么办法能快速设计出爆款的同款商品主图吗?跟着小编的教学步骤,教你轻松在线设计,不需要任何门槛也能掌握的电商设计工具,轻松搞定各种类型的商品主图,下面跟着小编的…

Spring BOOT 手写一个starter并使用这个starter

1、stater工程的命名 starter 是一个开箱即用的组件,减少不必要的重复代码,重复配置。例如,在mavne项目进行配置的时候,我们需要引用 spring-boot-starter-parent。 Spring 官方定义的 starter 通常命名遵循的格式为 spring-bo…