卷积神经网络各层特征图的可视化

# 特征图可视化

代码链接:https://github.com/Hny1216/FeatureMapVisualization

速食可直接跳转引用方法

# 特征图

理解特征图(Feature Map)就需要先理解卷积神经网络(Convolutional Neural Network,CNN)是如何工作的。

卷积神经网络大体可以分为特征提取层和特征映射层。特征提取层主要由若干卷积层、激活层和池化层组成,特征映射层主要是多层全连接层。在卷积层中,使用不同的卷积核从局部感受野中提取各种特征,每个核生成自己的特征图,多个卷积核得到的特征图在深度方向堆叠得到输出特征图(Feature Maps)。

以 Alexnet 为例,其网络结构如下图。其输入图像的大小为 224×224×3224\times224\times3 ,第一个卷积层中卷积核的大小是5×55\times5,共有 96 个卷积核(分为两批),每个卷积核与输入进行卷积运算得到一张特征图,因此可以得到 96 张特征图(图中为何是 48 个特征图?Alexnet 设计网络时运算能力不足,因此将网络分为了两批,每一批都是 48,因此总特征图就是 48*2=96 张)。

# 激活可视化

特征图的激活可视化本质就是可视化特征图,通过观察特征图中被激活的像素位置,从而借此理解卷积神经网络关注输入的那一部分数据信息,进而对卷积神经网络进行解释。

同样以 Alexnet 网络的第一层卷积层为例,输入选择一张标签为 “balloon”,大小为 705×705×3705\times705\times3 的图像。输入的三通道图像如下:

我们可视化浅层网络(Relu1)和深层网络(Relu4,Relu5),来观察网络各层激活了哪些特征(选取了前 18 个通道)。浅层网络激活的特征信息较多,且与原始数据较为相似,越深层网络所提取到的特征就越抽象,更加注重输入的纹理细节信息。

# 代码解析

# 引用方法

本方法实现了一个特征图可视化类,提供了 Matlab 和 Python 两种语言的版本,以下根据需要使用合适的语言自行使用。

# 下载

下载链接如下:https://github.com/Hny1216/FeatureMapVisualization

# 环境

确保特征图可视化类与运行脚本文件在一个路径即可。

# 运行

a = alexnet;
Fmv = FeatureMapVisualization(a,isShow=true);
import FeatureMapVisualization as Fmv
model = models.alexnet(pretrained=True)
modelLayer = list(model.children())
modelVisualization = Fmv.FeatureMapVisualization(modelLayer)
更新于 阅读次数