这篇是我对哔哩哔哩up主 @霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享
只要大家一提到深度学习
缺乏一定的解释性
比如说在我们之前讲的分类网络当中
网络它为什么要这么预测
它针对每个类别所关注的点在哪里呢
在great cam这篇论文当中呢
就完美的解决了在cam这篇论文当中存在一些问题
在great cam当中
我们既不需要修改网络的结构
也不需要对网络做进一步的训练
举个非常有意思的一个例子
这里呢我们也来简单的聊一聊
那么首先呢作者训练了一个二分类网络
也就是针对护士以及医生这两个类别的
那对于这个带有偏见的模型呢
首先对于护士这个类别
你会发现他预测的是正确的
然后通过我们绘制热力图呢
你会发现其实它主要关注的区域是在人脸的这个区域
大家想想你通过人脸就能分辨出他是医生还是护士吗
其实我个人觉得仅仅通过人脸是很难区分出来的
然后接下来我们再看下面这个图
也就是它的正确标签应该是医生
但是我们这个带有偏见的模型呢
它预测的结果是护士 预测错误
这个不带偏见的模型
它是根据不同职业所使用的器械或者说工具
以及它的穿着来得出最终预测结果的
那么很明显
这相比于我们仅仅通过人脸来判断他的职业要更加的科学一些
那么再看一下这个图
这个带偏见的模型呢
它学到特征其实是有问题的
那么作者呢有进一步分析这个带偏见模型它所对应的训练的数据集
然后作者发现在这个数据集当中
护士这个类别绝大多数都是女性
所以这就导致了训练得到这个模型
它是带有偏见的
那么为了解决这个问题呢
作者就调整了一下训练数据当中不同职业男女之间的一个比例
那么调整均衡之后再去训练网络
就得到了这个不带偏见的模型
那么它的测试集的准确率由原来的%多
提升到了%多的明显效果是变好了的
所以我觉得作者举这个例子呢是值得我们大家去思考以及借鉴
cam的适用性非常强的
然后我们来看一下我刚刚提供的关于这个pytorch实现cam这个仓库
那么在这个仓库下呢
还提供了比如说像目标检测以及语义分割的一些使用方法
其实作者有给出对应的一个使用教程啊
那么这里我给出针对目标检测的语义分割的
还有针对使用像transformer模型
它的一个使用的案例
那么大家有兴趣的话可以自己去看一下
那接着我们再回到我们的ppt当中
我们现在就以图像分类这个任务为例啊
那么黑色这个箭头呢代表的是我们正向传播的一个过程
蓝色这个箭头呢代表的是梯度反传的一个过程
那比如说针对我们图像分类这个任务
假设我想看一下对于tiger cat这个类别
我们网络究竟关注的区域在哪
那么他就根据网络预测的tiger cat这个类别的数据进行一个反向传播
这里的数据是没有通过softmax激活的
我们就能得到针对这个特征层A的一个反向传播的梯度信息
比如说我把它标记为A'
然后呢作者对这里的a撇在它的每一个通道位置上去求一个均值
那么就得到我们这里的每一个w
那这里的w呢就是针对我们这个特征层a每一个通道的一个权重
然后接下来做的再进行一个加权求和
通过relu函数得到我们最终的great cam【还要通过relu?】
那这里呢我简单的讲一下我个人的一个看法
首先是关于得到这个特征层A是网络对原图进行特征提取得到的结果
那一般呢越往后的特征层它的抽象程度越高
语义信息呢也是越来越丰富
并且利用cnn过去得到这个特征层
它是能够保留空间信息的
那么在我们得到的最终的这个特征层A上呢
它对应的激活区域差不多也是在这个位置
所以说我们声音网络它是能够保留空间信息的
其实不光是cnn
包括我们最近常用的transformer模型也是一样的
那么在原论文的图当中呢
我们一般所说的这个特征成层A都是指的卷一层当中最后一个卷积层
它所输出的特征层
然后这里的A'是y(c)对A求得这个偏导
那么换句话说就是A'
它代表的是A中每个元素对我们最终这个y(c)结果一个贡献值
那么贡献越大就代表网络认为它有越重要
所以呢接下来我们对A'在每个通道上去取均值
就能得到针对特征层A每个通道的重要程度
然后我们再进行一个加权求和
以及通过relu函数就能得到我们这里的一个cam
那么这里呢我们用公式来进行表示的话
那么接下来我们来举个例子
方便大家理解
对cat类别进行反向传播
然后我们通过relu之后呢
就将那些小于零的数据全部给设置成零
就得到我们最终的great cam有输出了
那么讲呢肯定有人对这里的A'求解是抱有疑惑的
那如果你想了解这个A'怎么求解的话
你可以去看一下我写这个博文
(51条消息) Grad-CAM简介_gradcam_太阳花的小绿豆的博客-CSDN博客
当然在我们去实现的过程当中
其实我们不需要自己去计算
因为现有的新中学框架它都会自动帮我去计算
再对CAM进行resize变成原图大小
之后再将CAM转化成彩色形式(原CAM是单通道的非彩色)
然后将原图scale处理
将scale后的原图add已处理完的cam
将add后的结果再进行scale
即可得到覆盖了cam的输出图片