CAM类激活热力图︰深度学习可解释性分析、显著性分析 经典之作
Learning Deep Features for Discriminative Localization, CVPR2016
该课程由B站同济子豪兄主讲
课程链接:https://www.bilibili.com/video/BV1Ke411g7gm/?vd_source=2c3e1c3086544e2bbc96712d9fb90632
Class Activation Mapping,CAM类激活热力图
Intersection over union,IoU(联合交集)
利用摄像头实时交互
右图:显示当前拍摄到的场景
左上角:深度学习预测的类别
左图:图像对应的热力图 -> 实时分析网络每 10 秒关注图像中的哪些区域
上图实战:torch-cam工具包:CAM热力图
奠定了可解释性分析、显著性分析的基石
后续衍生出了若干基于CAM的算法,如下图
让图像分类不再是一个黑箱子
在以前,往网络输入图像,然后黑箱子给我们输出预测结果,没人知道
故通过CAM热力图,可以分析它和人的直觉是不是一致的,它是不是靠谱的。
同一张图像的不同类别可以产生不同的CAM热力图
根据类别的不同,网络的关注点也不同
注意,此时该神经网络是一个图像分类模型,他本应该只会干分类的事情,但是现在他有了在图像上找目标、找区域、定位、画热力图这样的能力。(潜在的注意力机制,分析出神经网络对图像上的哪部分感兴趣)
用图像分类的数据及图像分类的标签数据训练出了图像分类模型,该图像分类模型不光可以分类,还可以用来定位
以下图为例
孔洞 -> 福建土楼
水面上枝质的木干 -> 吊脚楼
飞檐斗拱 -> 北京故宫
尖塔和穹顶 -> 拜占庭建筑
周博磊是汤晓鸥的学生
周柏磊现在在UCLA(University of California, Los Angeles加利福尼亚大学洛杉矶分校)当老师
周博磊先是在上海交大读了本科,又去香港中文,然后写这篇论文的时候是在MIT写的,现在在UCLA当老师。
周博磊b站强化学习纲要
预备知识
这两个分类性能接近,定位性能不同
下图是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是该类别对蓝色平均值(蓝色圈圈)的一个关注程度
权重 w 1 w_1 w1 间接的反映了该类别对蓝色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 的池化窗口
一般使用最大尺化
池化不需要学习任何参数的
减少计算量
大的feature map变成了小的feature map,输给下一卷积层的的数据变少,自然计算量就小了
防止过拟合
大的图变成一个小的图,但是核心信息仍然保留在小图上,大而化之的防止过拟合。
平移不变性
如下图:一个人的脸偏右,一个人的脸偏左,假如一个识别眼睛特征的卷积核,它产生的feature map是眼睛区域的,那么有两块是高亮的,剩下的是低值的,眼睛不管在右还是左,得到的输出是一模一样的,这正是池化的引入使得卷积神经网络,对输入的位置不敏感,产生了平移不变性。
卷积神经网络就是要在变化的输入中找到不变的东西,那在平移不变性这个领域,就是由池化来实现的
缺点:平易不变性的引入也意味着丢失了空间信息。
池化(下采样)引入了平移不变性,也意味着丢失了长宽方向的位置信息。因此在CAM热力图中,不使用带池化的卷积神经网络。
薄片/channel -> 平均数的过程(多图预警)
GAP这个操作,可以取代全连接层
这个操作最早是在NIN network这篇论文里面,
这是一篇伟大的论文,它里面提出了两个操作,一个叫1x1卷积,一个叫全局平均池化。一直沿用到今天,很多算法都在使用
优点:
从machine learning到machine teaching
知乎上的一篇文章:德国的一家激光加工企业的博士,他做了一个卷积神经网络预测工艺参数的数据集,训练出了一个远超人类水平的ai,对该ai做可解释性分析和显著性分析。他发现ai学到的特征,反过来可以指导普通的工人去改进工艺的参数,ai展示出它通过大量的数据学习到的特征、它在图像上关注的区域
machine teaching教普通人去识别鸟的一个工作
一个细粒度的图像识别,因为各种鸟,都是鸟,很难学,很难判别他们的差异,都是两个翅膀、一个尾巴、一个喙、两个眼睛。有鸟类专家先标注一些权威的鸟类图像分类数据集,用它去训练一个ai,图像分类模型把它用大量数据学习到的特征以注意力图的形式显示在原图上,如右边第三行第二个,ai更关注他的喙、脑袋还有尾巴,正是这些区域使得ai预测出它是一个加利福尼亚的一个海鸥到码头整点薯条。
不光是鸟类,各种的植物、动物、甲虫、蘑菇,大自然的万事万物都可以通过这种方法让ai去教我们去识别。
同理,AlphaGo下围棋,它远超人类水平,可以战胜人类最顶尖的职业棋手,反过来,AlphaGo也可以向我们展示它下棋的思路,这些思路可能是非常复杂、高深的。机器学习、强化学习,通过几亿轮的迭代次数学习到的特征。这是一个普通的职业棋手可能一辈子都达不到的境界,那他把这个思路展现给普通下围棋的人,是不是能够帮我们提升棋艺呢?
但是我们再怎么提升棋艺,也干不过AlphaGo了。
看到过一篇文章说AlphaGo使得围棋这项运动本身的意义受到了怀疑、受到了挑战,人工智能让很多事情变得没有意义了。一个职业棋手苦心钻研围棋几十年,像达摩组师一样,闭关修行之后发现一辈子修行的结果是下不过AlphaGo,那么他就变成了一个可笑的行为艺术,本来是受人尊敬的禅修现在变成了一个可笑的loser。
所以。不懂ai技术的人,会觉得ai特别厉害,但是实际上,我们打开ai的黑箱子,赋予它可解释性和显著性,让它展示到它学习到的特征,看看关注的区域是不是和我们人是一致的,这样我们才能改进他、了解他、信赖他,甚至把生命托付给他,
https://mp.weixin.qq.com/s/lOR3OQTkr1nu3ERBawZ1kw
值得思考的一些问题
学习CAM算法的基本原理,了解其来源以及使用范围,非常期待未来它的代码实战练习