揭秘卷积神经网络热力图:类激活映射

全文共2280字,预计学习时长4分钟
在这里插入图片描述
目前在可视化方面,我们已经掌握了许多不同的技术。本文将介绍在卷积神经网络(CNN)中,针对图像的某些部位可视化从而做出判断的不同技术。

类激活映射(CAM)是一种生成热力图的技术,用于突出图像的类的特定区域。

热力图效用

下面是一个典型的热力图:

在这里插入图片描述
图片来源:https://github.com/jacobgil/pytorch-grad-cam

这张图片中,一只猫被红色高亮显示为“猫”类,表示网络在进行分类判断时正在查看正确位置。

视觉化神经网络正在查看的位置大有用处,因为它帮助我们理解神经网络是否在查看图像的适当部位,或者神经网络是否在进行误导。下列是一些神经网络在做分类决判断时可能进行误导和错误查看位置的例子:

· 卷积神经网络将一张图片分类为“火车”,而实际上它是在寻找“火车轨道”(这意味着它会错误地将一张火车轨道图片单独分类为“火车”)。

· 卷积神经网络将x光胸片分类为“高患病几率”,依据的不是疾病的实际表现,而是放在病人左肩上的金属“L”标记。重点是,这个“L”标记只有在病人躺下的时候才会被直接放在病人的身体上,而病人也只有虚弱到无法忍受才会躺下接受x光检查。

参考:Zech et al. 2018,Confounding variables can degradegeneralization performance of radiological deep learning models.

传送门:https://arxiv.org/pdf/1807.00431.pdf

· CNN可根据数据集中五分之一的马图像中出现的左下角源标记将该图像分类为“马”。但如果将这个“马的源标记”放在一幅汽车图像上,那么网络仍将该图像分类为“马”。

参考:Lapuschkin et al. 2019, Unmasking Clever Hans Predictors and Assessing What Machines Really Learn.

传送门:https://arxiv.org/pdf/1902.10178.pdf

在这里插入图片描述

相关论文集

这张图显示了有关卷积神经网络可视化热力图的几篇论文之间的关系。文章左上角可见这篇文章的关键——类激活映射(CAM):
在这里插入图片描述
以下是完整类激活映射论文的链接:Zhou et al. 2016 “Learning Deep Features for DiscriminativeLocalization.”

传送门:http://openaccess.thecvf.com/content_cvpr_2016/papers/Zhou_Learning_Deep_Features_CVPR_2016_paper.pdf

此处特别推荐查看图1和图2。
在这里插入图片描述
CAM:类激活映射

类激活映射结构

类激活映射背后的原理是利用一种特殊的卷积神经网络结构生成可视化热力图。

参考:this post for a review of convolutional neural networks

传送门:https://glassboxmedicine.com/2019/05/05/how-computers-see-intro-to-convolutional-neural-networks/

其结构如下:卷积层,全局池化层,然后是一个输出分类判断的全连接层。
在这里插入图片描述
在以上示意图中,可以看到一些通用的卷积层,形成了“倒数第二个卷积层”(即网络中倒数第二层,也是卷积层的最后一层)。在这个“倒数第二个卷积层”中存在K特征图。在这个示意图中,对于特征映射A1、A2和A3, K = 3。

但实际上K可以是任何值——例如,可能会有64个或512个特征映射。

根据文章中的标注,特征图高度为v和宽度为u:

文章传送门:https://pdfs.semanticscholar.org/223a/d42ec73c1a41355c0ca3626fa99c7841f840.pdf
在这里插入图片描述
全局池化层 (GAP)

全局池化层是通过对特征图中的数字求平均值,从而将特征图转换为单个数字。若有K=3个特征图,则在全局池化之后,我们将得到K=3个数字。这三个数字用上图中的三个小正方形表示:

在这里插入图片描述

以下是用于描述全局池化层的标注符号:
在这里插入图片描述

因此,在全局池化中,对特征图Aij的元素进行求和,从i =1到u(全宽),从j = 1到v(全高),然后除以特征图中的元素总数,Z = uv。

全连接层和分类数

在执行全局池化后,我们将得到K个数字。通过全连接层将这K个数字转换为分类判断:
在这里插入图片描述
请注意,为避免混淆绘图,图中并未显示全连接层中的每个权重。实际上,红色数字(由GAP(A1)输出)通过权重连接到每个输出类,绿色数字(由GAP(A2)输出)通过权重连接到每个输出类,蓝色数字(由GAP(A3)输出)通过权重连接到每个输出类。

参考:this post for review offully-connected layers.

传送门:https://glassboxmedicine.com/2019/01/17/introduction-to-neural-networks/

仅看“猫”输出类上,有三个权重,w1、w2和w3,这三个权重将全局池化输出连接到“猫”输出节点。使用上图所示的方程为"猫"类生成一个分数y猫,对应于y猫 = (w1)(红色)+ (w2)(绿色)+(w3)(蓝色)。

类激活映射

现在完成了整个类激活映射结构,从输入图像到分类数。最后一步是得到类激活映射可视化热力图,步骤如下:
在这里插入图片描述
这看起来很像计算y^猫分数的方法,但不同之处在于,我们不是将权重w1、w2和w3乘以特征图Ak上的全局池化层生成的单个数字,而是直接将权重乘以特征图。因此,虽然分数的输出是数字,但是类激活映射实际输出的是数字网格。而这个数字网格就是热力图!

在这里插入图片描述
总结

下面是一页草图,总结了整篇类激活映射论文:
在这里插入图片描述
在这里插入图片描述留言 点赞 关注
我们一起分享AI学习与发展的干货
欢迎关注全平台AI垂类自媒体 “读芯术”
在这里插入图片描述
(添加小编微信:dxsxbb,加入读者圈,一起讨论最新鲜的人工智能科技哦~)

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页