AI发展分 3 步:
高精度和可解释性是矛盾对立的 -> 平衡
CAM:改动模型结构(全连接层换成GAP) -> 牺牲精度 -> 换来可解释性
GradCAM:都要,不改动模型结果,不从头训练
解决CAM三个缺点的
网络结构:普通的卷积神经网络结构,不需要一定是GAP层,全连接层也ok
图的分析:
输入一张 256 × 256 x 3 通道的彩色图片到卷积层中,最后输出的feature map 512 x 14 x 14,即512个channel/512张纸,每张纸14 x 14,512页的纸落成一本书,输入到全连接层中,得到1000个类别(对于ImageNet数据集来说)的线性预测分数logit,用 y c y^c yc表示
如果在CAM中,加了全连接层,该权重无法反应每个类别对最后一个卷积层/每一个channel的关注程度,因为全连接层把位置信息全部都丢掉了
故使用求梯度的方法,比如说tiger cat苦斑猫的分数,相对于这 512 x 14 x 14每一个数值的梯度。假如矩阵某个数值变大了一丢丢,它对最后网络预测为虎斑猫的预测分数产生什么样的影响,这就是导数的定义或者说是斜率的定义
使用Global Average Pooling,如对这个蓝色通道 w n c w_n^c wnc/蓝色channel,给它求个平均,变成了蓝色的权重,同理得到512个权重,那么这个权重就和CAM里的权重在数学上是一样的/等价的,故可以用该权重来代替刚刚CAM里面的一个权重。
接下来把红色权重 × 红色channel + 紫色权重 × 紫色channel + …… + 最后一个权重 × 对应channel -> ReLU激活函数 -> tiger cat虎斑猫别热力图/Grad-CAM热力图,大小是14 x 14
用双线性插值的方法缩放至原图,大小256 x 256。
虎斑猫在图像上关注的区域就是猫的这个区域
ReLU的作用:加了效果更好 -> 可以过滤无关特征(那部分不像虎斑猫)
总结:Grad-CAM算法原理,它避免了使用GAP,用全连接层的网络也完全ok,用求梯度的方法间接的求得这个权重,不需要修改网络结构,也不需要用数据重新训练,如果你来了一个用全连接层的网络,马上就可以用Grad-CAM做可解释新分析,绘制出每一个类别的Grad-CAM热力图了,所以这是一个非常不错的拿来即用算法。
- CAM只能应用在图像分类任务
- Grad-CAM可以兼容各种各样的任务
Grad-CAM不管是什么任务,比如说图像描述任务、视觉问答任务,强化学习任务,只要这个任务,它输出的是一个东西,就可以求得该输出的东西,如512 x 14 x 14的每一个求偏倒数,进而得到结果
举例子
比如在强化学习中,训练了一个超级玛利奥,它自己控制马里奥的上下左右,用这个方法分析,强化学习的智能体,当他决定往右走,知道为什么他会选择往右走,是因为右边有一个金币吗?左边有一个怪吗?他要躲避这个怪吗?还是说他要马上速通过关?可以用该方法解释强化学习的智能体的行为、解释它决策的依据是游戏画面上的什么东西使得他做出了向右的动作。
求得某一个输出【比如说虎斑猫(见上图)】的线性分类的logit相对于原始图像每一个像素的梯度,可以分析出每一个像素对模型预测为虎斑猫的影响程度,那么它得到的是一个细粒度的、高分辨率的图,256 x 256和原图一样大小的一个图。
Grad-CAM是一个粗粒度的,低分辨率的,14 x 14的一个矩阵。
把Grad-CAM和Guided Backprop结合
得到Guided Grad-CAM图
(上图)比如说虎斑猫,会把虎斑猫的一些重要的像素描画出来,比如说身上的条纹、猫的鼻子、五官和耳朵
结论:故这是一个既高分辨率又具有类别判别性的可解释性分析的算法。可以细粒度地分析出图像中每个像素,每个部位对最后的影响。
第 3 列:猫和狗,精准地定位成功
第 6 列:对于Reset好几百层的模型,也是完全ok的
第 2 列: 对于原来的Guided Backprop图,发现两张图非常像,里面又有猫又有狗,它的类别判别性比较弱
第 4 列:既是高分辨率又具有类别判别性。它只画出猫和只画出狗。比第 2 列强得多了
第 5 列: 遮挡的方法。
利用Grad-CAM可以分析一些被网络预测错误的图片,能解释清楚为什么网络会预测错误,它也是情有可原的。
第 2 行是top 1预测结果,第 3 行是top 5预测结果
不管是预测正确还是预测错误,都能够给出一个合理的解释,能让我们理解出网络为什么会做出这样的决策,知其然也知其所以然。
左上角:
输入这张图片,网络根据图片生成一段描述性文字。
左下角:
VQA视觉问答进行可解释性分析
输入图像,再往网络中输入一个问题。消防栓是什么颜色的?
输出不同的答案,可以对应出网络的不同位置/图像的不同位置
右下角:同理
这是一个基于Resnet的VQA模型,Resnet是一个非常深的模型,按理说很难被解释的,是一个完全黑箱,但是通过Grad-CAM可以很好的解释啊,
同理
Torch是火炬,pytorch得图标也是一个火炬,预测错误是因为远处的闪光灯
比如,用一个数据集去训练一个模型分辨医生、护士。按理说/日常生活的常识而言,医生中男性比较多、护士中女性比较多,如果该偏见被带入到数据集中,那数据集中男性医生比例偏高,女性护士的比例偏高,那训练出来的算法,可能误以为性别是决定医生、护士的一个重要特征,但是这是不科学、带有歧视和偏见的。谁说女性干不了医生,谁说男性干不了护士。
第 2 列就是训练出来么一个带有偏见的模型。用偏见数据集训练出来带偏见的模型,它会关注脸的区域,比如说2-2图,他是一个医生,但是网络预测她是一个护士,依据是她脸部的区域,因为长头发或者女性的容貌,这是不对的,网络不应该看脸,而应专注于职业本身。
第 3 列,用新数据集训练的模型,表现得很好,模型关注的是听诊器,而不再是长发及腰或者说是女性容貌跟性别无关了。
总结:所以用热力图可以发现数据集中的偏见,进而纠正模型的偏见
第二行图片中间有个水印叫shutter stock,很多人工智能图片训练数据都来自于该图片网站,很多生成对抗网络训练出来的图片,会把这个水印也生成出来。所以你喂给网络什么数据就会学到什么,不管它是带水印的呀,还是带偏见的。ai不管这些的,它只关心自己的损失函数,
总结:大千世界有很多的敏感竞技话题,我们作为人要给ai把把关,不能让它学习到不公平的种族歧视的、性别歧视的这些偏见,可解释性分析就是检测ai有没有偏见的一个重要的探针和抓手。
如果把求得的权重取个负号,然后再把画热力图画,那比如说虎斑猫的CAM图。就会画到狗的身上,狗的CAM图就会画到猫的身上,那这张图叫做counterfactual map就是,它反映的是与图像上与虎斑猫最无关的区域,因为加了一个负号,最相关就变成了最无关。
如果我们现在在做一个工业质检的一个模型,现在分析出,检测缺陷类别的counterfactual map,那么它画出的热力图中红色高亮区域,对应的是安全区,因为它是与缺陷最无关的区域。这对于一些细粒度的一些专业的问题非常重要。关于counterfactual map有很多论文在研究,这也涉及到machine teaching。
不同的层也可以用Grad-CAM来研究
在CAM算法里,只能分析最后卷积层,现在各个层都可以研究
比如说到浅层的时候。这个relu2_1热力图既有狗的区域的高亮,也有猫的区域的高亮,而不再只是猫着一个区域高亮了
这是该算法的一个缺陷,我们一会儿在Layer CAM算法中做改进
比如说,这是一个Kaggle的气胸检测的竞赛,从医疗图像上,医疗影像上来,用Grad-CAM定位出高量出病灶区域。这对于医学生的训练而言也是一个machine teaching,用大规模、大量的数据去训练一个ai,把它关注的区域展示给普通人/新手小白,因为它学到的知识通过大量数据验证/通过长时间学习习得,是非常靠谱的,它展示出来的高亮区域可供人参考。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZXwzXSYw-1671525694922)(C:\Users\Trolley\AppData\Roaming\Typora\typora-user-images\image-20221219221246164.png)]
这是新冠肺炎的x光胸片的Grad-CAM图,可以发现新冠肺炎和普通肺炎是不一样的,关注的病灶区域是不一样的
无需GAP层,无需修改模型结构,无需重新训练
可分析任意中间层
数学上是原生CAM的推广(论文附录有详细的证明)
细粒度图像分类、Machine Teaching
CAM算法的优点也具备
- 对深度学习实现可解释性分析、显著性分析
- 可扩展性强,后续衍生出各种基于CAM的算法
- 每张图片、每个类别,都能生成CAM热力图
- 弱监督定位︰图像分类模型解决定位问题
- 潜在的“注意力机制”
- 按权重排序可得特征重要度,辅助Machine Teaching
解决了Grad-CAM的前两个缺点
把虎斑猫类别的logit对最后卷积层的每个激活值的每个位置求偏导数,有二阶偏导数,有三阶偏导数,算出来每一个位置的权重。每一个位置的权重不一样,那自然左下角的像素和中心的像素对最后的权重的影响也不一样了。
Grad-CAM++热力图是第一个channel × 第一个channel权重 + 第二个channel × 第二个channel权重 + …… + 最后一个channel × 最后一个channel的权重。
这么多苹果都是高亮的,还有右上第一个这么多狗,都很红
解决的是3、4、5的缺点
第3个问题:梯度的饱和消失和噪声问题
权重大的channel,不一定对类别预测的分数贡献大的问题。
输入一张图像,先输入到第一个卷积神经网络Phase 1中,得到比如说1000个channel,对这1000个14 x 14channel做上采样,得到1000个原图大小如256 x 256的channel,这些channel中一些对应狗的脚、狗的身体、背景,Phase 1结束。把1000个256 x 256的channel和原图做逐元素的乘法。如果脚高亮的区域会把狗的脚区域取出来;身体区域高亮,会把身体这片区域取出来。
把1000个channel分别和原图做逐元素的channel就会把1000种原图区域取出来,再输入到第二个卷积神经网络,得到1000个类别的分数/权重,把这1000个权重和1000个高分辨率的channel做线性组合。第一个权重 × 第一个颤抖 + 第二个channel × 第二个channel + …… +最后一个权重 × 最后一个channel,得到Score-CAM热力图。
score是啥意思呢?
是由南开大学的程明明老师团队提出的
他解决的是深层生成的粗粒图和浅层生成的细粒度热力图都不够精准,也不够类别判别性这个缺点的。
效果图:粒度非常的精细,基本上达到了弱监督的、图像分割的效果
下图是中文版论文
在图中的右下角,可以看出网络越深,越粗粒度,类别判别性越好;而越浅的话,越细粒度,越高分辨率,但是类别范围性依然是很好的
总结:不同的CAM算法就是在一个权衡中,博得一个更优势的权衡。
工业缺陷检测任务LayerCAM非常重要,它既是高分辨率的,又是类别判别性的。对于工业缺陷,可能在速度非常快的流水线上用高速摄像机、工业照相机拍摄到,普通人肉眼基本上分辨不出来。用现在这个方法能很快捕捉到,而且因为这种数据集非常难标注,故最好的方法是用弱监督的方法,收集到一些有缺陷的图片,用LayerCAM热力图的形式让他弱监督地定位,起到一个machine teaching的效果。
Grad-CAM论文相关的扩展阅读、代码相关的扩展阅读和整理的一些扩展阅读以及我们讲它后续衍生的三种算法的论文。还有一些思考题,留给大家自己去思考。