卷积神经网络CNN,一个大号/深层的,现代的,黑箱的,信号/图像处理器。
简单讲解如何将图像输入到卷积神经网络CNN并显示网络不同层的激活图,并通过将激活图与原始图像进行比较以探索网络学习哪些特征
本例来源于Mathworks公司的大佬,需要用到MATLAB Neural Network Toolbox(TM), Image Processing Toolbox 和 the Neural Network Toolbox(TM) Model for AlexNet Network.
加载预训练模型和数据
加载预训练的AlexNet 网络。如果Neural Network Toolbox Model _for AlexNet Network_没有安装,则MATLAB会提供下载链接。
net = alexnet;
读取一张图片并显示
imshow(im)
imgSize = size(im);
imgSize = imgSize(1:2);
可视化网络结构
显示网络的层信息,观察第一个卷积层有 96 个通道
net.Layers
ans =
25x1 Layer array with layers:
1 'data' Image Input 227x227x3 images with 'zerocenter' normalization
2 'conv1' Convolution 96 11x11x3 convolutions with stride [4 4] and padding [0 0]
3 'relu1' ReLU ReLU
4 'norm1' Cross Channel Normalization cross channel normalization with 5 channels per element
5 'pool1' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0]
6 'conv2' Convolution 256 5x5x48 convolutions with stride [1 1] and padding [2 2]
7 'relu2' ReLU ReLU
8 'norm2' Cross Channel Normalization cross channel normalization with 5 channels per element
9 'pool2' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0]
10 'conv3' Convolution 384 3x3x256 convolutions with stride [1 1] and padding [1 1]
11 'relu3' ReLU ReLU
12 'conv4' Convolution 384 3x3x192 convolutions with stride [1 1] and padding [1 1]
13 'relu4' ReLU ReLU
14 'conv5' Convolution 256 3x3x192 convolutions with stride [1 1] and padding [1 1]
15 'relu5' ReLU ReLU
16 'pool5' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0]
17 'fc6' Fully Connected 4096 fully connected layer
18 'relu6' ReLU ReLU
19 'drop6' Dropout 50% dropout
20 'fc7' Fully Connected 4096 fully connected layer
21 'relu7' ReLU ReLU
22 'drop7' Dropout 50% dropout
23 'fc8' Fully Connected 1000 fully connected layer
24 'prob' Softmax softmax
25 'output' Classification Output crossentropyex with 'tench', 'goldfish', and 998 other classes
显示第一个卷积层的激活图
act1 = activations(net,im,'conv1','OutputAs','channels');
sz = size(act1);
act1 = reshape(act1,[sz(1) sz(2) 1 sz(3)]);
使用mat2gray函数对输出进行规范化,并显示8 x 12的96张图像,层中的每个通道对应一张图像。
montage(mat2gray(act1),'Size',[8 12])
指定通道的激活图
调整通道 32 中激活的大小,使其与原始图像相同,并显示激活图
act1ch32 = act1(:,:,:,32);
act1ch32 = mat2gray(act1ch32);
act1ch32 = imresize(act1ch32,imgSize);
imshowpair(im,act1ch32,'montage')
查找最强的激活通道
[maxValue,maxValueIndex] = max(max(max(act1)));
act1chMax = act1(:,:,:,maxValueIndex);
act1chMax = mat2gray(act1chMax);
act1chMax = imresize(act1chMax,imgSize);
imshowpair(im,act1chMax,'montage')
下面研究更深的网络层的激活
以conv5层的激活图为例,代码与上面类似
conv5层的最强激活图
进一步查看通道3和通道5。
可视化relu5层的激活值
与conv5层的激活相比,relu5层清晰地精确定位图像中具有强烈激活的面部区域特征。
注意:先检查MATLAB是否安装了预训练的AlexNet ,输入net=AlexNet进行验证。如果Neural Network Toolbox Model for AlexNet Network没有安装,则MATLAB会提供按照链接。
完整代码:关于卷积神经网络特征可视化
卷积神经网络特征可视化存在的难点是什么
1)对于可视化方法,仍存在噪声、稳定性、解释能力有限等问题。
通过对多种可视化方法的实验比较发现,多数可视化方法生成的热力图含有一定的噪声,噪声产生的原因仍没有权威统一的解释。同时,面对不同图像时的可视化效果不尽相同,有些图像可能直接导致可视化方法的失效,而失效的原因尚不清楚,仍有待进一步的探究。此外,面对复杂背景条件的图像、多目标场景、小目标图像等,受限于模型本身在面对这些情形时的性能约束,可视化方法的解释效果并不一定好。未来可能的研究趋势是将可视化方法与其他解释方法的结合,从不同侧面不同角度解释模型,从而缓解单一可视化方法解释效果受限的问题。
2)对于可视化效果的评估,仍欠缺标准统一的评估方法。
目前很难找到适用于大多数可视化方法的评估标准,原因在于许多方法的目标并不相同,也即每种方法对"可解释性"的理解并不相同,导致各种可视化方法的解释结果差别较大。同时,很多可视化方法自身同样缺乏清晰明确的数学与逻辑机理,导致结果难以量化比较。如果可以从"可解释性"的概念出发,统一数个可解释性的标准,那么对于可视化结果的评估也就有了依据。同时,还可以根据可视化方法产生的热力图的特点进行分类评价,每类热力图使用与之适应的评价标准,提升其侧重解释某方面的能力。
3)对于可视化的对象,细粒度的识别模型难以可视化解释。可视化方法多应用于对图像分类、目标定位及场景识别等任务的解释,能够实现对多目标图像中语义级目标的区分。例如,"Cat"和"Dog"虽然同属动物,但是在语义级上属于明显不同的两种动物。而单独对于"Cat"这一动物,实现的不同品种猫的细粒度图像分类,受限于分类网络自身准确性,可视化方法很难找到用于区分目标的细节特征,此时的解释效果非常有限,甚至对于不同的目标可视化效果始终相同。与人们的视觉观察及解释能力相差较远。这一问题或许可以通过视觉解释与语言解释相结合的途径来改善解释效果。对可视化解释难以描述的细微之处,辅助加以自然语言描述形式的解释(比如对猫的颜色、猫耳形状的描述),能够实现更好的解释效果。
4)对于可视化解释的完备性,现有研究中的解释结果与预测结果无法相互印证。
理论上看,一个完备可靠的解释可以使用户从中推理并得到被解释的预测结果,而目前的可视化方法仍不具备这一能力,仅能从预测结果中得到解释结果,而无法根据解释来推断出模型的预测,即两者之间的相互印证关系没有被建立起来。例如,如果可视化方法给出了错误的解释,但这一解释恰好符合用户根据预测结果推测的预期解释,进而使得用户相信了解释的可靠性,这将对其形成误导。此时,若能根据解释结果推断预测结果,发现推断出的预测结果和实际预测结果不相符合,则可通过进一步分析发现其中存在的问题,从而提升用户对可视化方法的信任。