可视化
通过可视化,我们可以更好地了解CNN网络是如何学习输入图像的特征。
- 热力图/得分图可视化
- 特征图可视化
- 权值可视化
- 模型计算图可视化
热力图/得分图可视化
也叫得分图。用热力图的形式展示网络的决策依据。
对于深度卷积神经网络,通过多次卷积核池化之后,最后一层卷积层包含了最丰富的空间和语义信息。所以最后一层卷积层也许可以对卷积神经网络的解释起到作用。
CAM(Class Activation Mapping)
思路:通过替换全连接层为“GAP层”,重新训练得到“最后一层的特征图”和每个特征图对应的“权重”,对特征图进行“加权和”后“上采样”得到最终结果。
在最后一层卷积层之后进行GAP(Global average pooling:求每张特征图所有像素的均值)。
如图所示,经过GAP之后的特征图(实际上是softmax层)与输出层的连接关系。实质上是一个没有偏置项的全连接层。因此,对于每个类别C,都有K(特征图个数)个对应的权值W。
如图所示,把GAP之前的特征图进行加权和就可以得到CAM(由于特征图大小和原图不一致,需要将特征图上采样到原图大小)。
所以,该方法叫类别激活图(Class Activation Mapping)。
该方法的缺点:需要修改原模型的结构,导致需要重新训练该模型,大大限制了它的使用场景。
Grad-CAM
思路:和CAM基本一致,主要区别是得到特征图对应的权值的过程:用梯度的全局平均来计算权重。
事实上,经过严格的数学推导,Grad-CAM与CAM计算出来的权重是等价的。
权重可以通过下式计算,可理解为“梯度的全局平均”,表示特征图k对类别c的重要性。
其中,Z是特征图的像素个数,y_c是对应的类别C的分数。A_ij_k为第k个特征图(i,j)位置处的值。微分表示类别c的得分对特征图的导数。
求得类别对所有特征图的权重后,对特征图进行“加权和”并使用ReLU激活后进行“上采样”就可以得到最终结果。
Grad-CAM的不仅可以对图片分类进行解释。只要用到了CNN就可以用Grad-CAM进行解释,如图像描述(Image Captioning),视觉问答(Visual Question Answering)等,所需要做的只不过是把y_c换为对应模型中的值即可。
项目
Github项目链接:Grad CAM
项目运行截图:
其它方法
- 待补充
特征图可视化
得到指定层的特征图,输出成图片形式即可。
权值可视化
对训练后的网络权值进行可视化可以判断模型的优劣及是否欠(过)拟合。
经过良好训练的网络权值通常含有多个明显而平滑的卷积器,且没有任何干扰特征,表现为美观、光滑。
若在权重中观察到相关干扰特征,可能原因是网络未被充分训练,或是正则化强度较低导致了过拟合效应,表现为噪声图像,或者图案相关性太高(很规则的点和条纹),或者缺乏结构性,或有较多‘死’区域。
得到指定层的权值,输出成图片形式即可。
模型计算图可视化
计算图的可视化一般来说很简单。
Caffe
执行 draw_net.py 即可。
Tensorflow
使用TensorBoard和summary。
Reference
Grad-CAM:Visual Explanations from Deep Networks via Gradient-based Localization