前言
众所周知,深度学习是一个"黑盒"系统。它通过“end-to-end”的方式来工作,输入数据例如RGB图像,输出目标例如类别标签、回归值等,中间过程不可得知。如何才能打开“黑盒”,一探究竟,让“黑盒”变成“灰盒”,甚至“白盒”?因此就有了“深度学习可解释性“这一领域,而CAM(Class Activation Mapping)技术就是其中之一,其利用特征可视化来探究深度卷积神经网络的工作机制和判断依据。本文通过七篇论文来论述该技术,并附带代码解析。
CAM是什么?
CAM全称Class Activation Mapping,既类别激活映射图,也被称为类别热力图、显著性图等。是一张和原始图片等同大小图,该图片上每个位置的像素取值范围从0到1,一般用0到255的灰度图表示。可以理解为对预测输出的贡献分布,分数越高的地方表示原始图片对应区域对网络的响应越高、贡献越大。
为了更直观表达,一般将灰度图转化为彩色图。例如可以使用Opencv 函数转换:
img_color=cv2.applyColorMap(img_gray,cv2.COLORMAP_JET)# 将灰度图转化为伪色彩图,# COLORMAP_JET 为输出的颜色模式
可视化的时候,可以利用热力图和原图叠加的形式呈现。如下图,颜色越深红的地方表示值越大。可以认为,网络预测“狗”这个类别时,红色高亮区域是其主要判断依据。
A.原始图片 B. CAM灰度图 C. CAM彩色热图 D. 原图+CAM热图叠加
CAM有什么用?
CAM主要有以下作用:
有助于理解和分析神经网络的工作原理及决策过程,进而去更好地选择或设计网络。例如对于分类网络,如果参考CAM相当于除了分类accuracy以外,对网络又提出了更高的要求:不但要求预测准确率高,还需要网络提取到我们需要的特征。下图可以看出,不同网络对相同的数据的CAM是有较为明显的差异。当然即便是同一个网络,不同训练过程也会导致CAM有很大的差异。
A.原始图片 B. Resnet50 预测结果 C. Resnet34 预测结果
利用可视化的信息引导网络更好的学习,例如可以利用CAM信息通过"擦除"或""裁剪""的方式对数据进行增强;利用CAM作为原始的种子,进行弱监督语义分割或弱监督定位。既然CAM能