神经网络可视化困难?不知道网络内部进行的操作?
介绍几个可视化工具和方法
工具使用-可视化神器Netron
模型结构可视化神器——Netron(支持tf, caffe, keras,mxnet等多种框架)
gayhub链接
安装exe文件,将各种框架的文件路径添加进去即可。
画出模型结构图
参考我这篇博客keras plot_model 画出模型的结构图
类激活图
CAM可视化
CAM(Class Activation Mapping)
CAM借鉴了很著名的论文Network in Network(https://arxiv.org/abs/1312.4400)_中的思路,利用GAP(Global Average Pooling)替换掉了全连接层。可以把GAP视为一个特殊的average pool层,只不过其pool size和整个特征图一样大,其实说白了就是求每张特征图所有像素的均值。
GAP的优点在NIN的论文中说的很明确了:由于没有了全连接层,输入就不用固定大小了,因此可支持任意大小的输入;此外,引入GAP更充分的利用了空间信息,且没有了全连接层的各种参数,鲁棒性强,也不容易产生过拟合;还有很重要的一点是,在最后的 mlpconv层(也就是最后一层卷积层)强制生成了和目标类别数量一致的特征图,经过GAP以后再通过softmax层得到结果,这样做就给每个特征图赋予了很明确的意义,也就是categories confidence maps。如果你当时不理解这个categories confidence maps是个什么东西,结合CAM应该就能很快理解。
CAM的解释效果已经很不错了,但是它有一个致使伤,就是它要求修改原模型的结构,替换全连接层为GAP层,导致需要重新训练该模型,这大大限制了它的使用场景。如果模型已经上线了,或着训练的成本非常高,我们几乎是不可能为了它重新训练的。
Grad-CAM
CAM通过替换全连接层为GAP层,重新训练得到权重,而Grad-CAM另辟蹊径,用梯度的全局平均来计算权重。事实上,经过严格的数学推导,Grad-CAM与CAM计算出来的权重是等价的。