文档

调查网络预测使用类激活映射

这个例子展示了如何使用类激活映射(CAM)调查和解释深卷积神经网络的预测的图像分类。

深入学习网络通常被认为是“黑匣子”提供无法找出网络获悉或输入到网络的一部分是负责网络的预测。当这些模型失败,给错误的预测,他们经常失败,没有任何警告或解释。类活动映射[1]是一种技术,您可以使用视觉的解释卷积神经网络的预测。不正确的,看似不合理的预测通常可以有合理的解释。使用类激活映射,您可以检查一个特定的输入图像的一部分“困惑”网络,它使一个不正确的预测。

您可以使用类激活映射识别偏差在训练集,提高模型精度。如果你发现网络基地预测错误的特性,可以使网络更加健壮通过收集好数据。例如,假设你训练一个网络区分图像的猫和狗。训练集的网络具有较高的精度,但在实际的例子表现很差。通过使用类激活映射训练的例子,你发现网络是基于预测不是图片中的猫和狗,但在背景。然后意识到所有你的猫图片具有红色背景,所有你的狗图片具有绿色背景,背景的颜色,网络学习在训练。然后您可以收集新数据,没有这种偏见。

这个示例类激活地图显示区域的输入图像最有助于预测类鼠标。红色区域为最多。

负载Pretrained网络和网络摄像头

加载一个pretrained卷积神经网络的图像分类。SqueezeNet、GoogLeNet ResNet-18, MobileNet-v2相对快速的网络。SqueezeNet是最快的网络和它的类激活图分辨率高四倍比其他的地图网络。你不能使用类激活映射网络有多个完全连接层的网络,如AlexNet VGG-16, VGG-19。

网络=“squeezenet”;网= eval(网络);

创建一个网络摄像头对象和连接你的摄像头。

相机=摄像头;

提取输入图像的大小和输出类网络。的activationLayerNamehelper函数,定义在这个例子中,返回的名称层提取激活。这一层是ReLU层之后的最后卷积层网络。

inputSize = net.Layers (1) .InputSize (1:2);类= net.Layers . class(结束);layerName = activationLayerName(网络);

显示类激活地图

创建一个图和执行类激活映射在一个循环中。终止执行循环,关闭图。

h =图(“单位”,“归一化”,“位置”(0.05 - 0.05 0.9 - 0.8),“可见”,“上”);ishandle (h)

快照使用摄像头。调整图像,这样的长度最短边(在这种情况下,图像高度)等于网络的输入图像大小。当你调整,保持图像的纵横比。您还可以调整图片更大或更小的尺寸。使图像更大增加最后的决议类激活地图,但可能会导致不准确的预测。

计算调整图像的激活在ReLU层之后的最后卷积层网络。

我=快照(相机);imResized = imresize (im, [inputSize(1),南]);imageActivations =激活(网,imResized, layerName);

类活动映射为一个特定的类是激活的ReLU地图层,最后卷积层,加权多少每个激活有助于该类的最后得分。这些权重等于最后完全连接层的权重的网络类。SqueezeNet没有最后一个完全连接层。相反,ReLU的输出层,最后卷积层已经激活图的类。

你可以genereate类激活地图任何输出类。例如,如果网络使一个不正确的分类,可以比较真实和预测类的类激活地图。对于这个示例,生成类激活地图预测类最高的分数。

成绩=挤压(平均(imageActivations [1 - 2]));如果网络~ =“squeezenet”fcWeights = net.Layers (end-2) .Weights;fcBias = net.Layers (end-2) .Bias;成绩= fcWeights *成绩+ fcBias;[~,classIds] = maxk(分数,3);weightVector = shiftdim (fcWeights (classIds (1):), 1);classActivationMap = (imageActivations。* weightVector, 3)总和;其他的[~,classIds] = maxk(分数,3);classActivationMap = imageActivations (:,:, classIds (1));结束

计算出顶级标签和最终的归一化类分数。

成绩= exp(分数)/笔(exp(分数));maxScores =分数(classIds);标签=类(classIds);

情节类激活地图。显示原始图像在第一次要情节。在第二个次要情节,使用CAMshowhelper函数,定义在这个例子中,显示类激活地图上的一个黑暗的灰度版本的原始图像。预测显示三大标签和他们的预测成绩。

次要情节(1、2、1)imshow (im)次要情节(1、2、2)CAMshow (im, classActivationMap)标题(字符串(标签)+”、“+字符串(maxScores));drawnow结束

清晰的摄像头对象。

清晰的相机

例子地图

网络正确识别对象在这幅图像作为一个游手好闲的人(一种鞋)。类激活在图像映射到正确的显示了输入图像的每个地区的贡献预测类游手好闲的人。红色区域为最多。网络基础classifaction整个鞋,但最强的输入来自于红色区域,提示和鞋。

网络分类这一只老鼠的形象。作为类激活地图显示,预测不仅基于鼠标在图像,而且键盘。因为训练集可能有许多的图片鼠标旁边的键盘,网络预测,包含键盘更有可能包含鼠标图片。

的网络把这张照片作为扣一个咖啡杯。作为类激活地图显示,网络分类图片,因为图片包含太多混淆对象。网络检测,重点是手表腕带,不是咖啡杯。

辅助函数

CAMshow (im,凸轮)覆盖类激活地图凸轮在一个黑暗的,图像的灰度版本即时通讯。函数调整类激活地图的大小的大小即时通讯,规范,从低于阈值,并使用可视化飞机colormap。

函数凸轮CAMshow (im) imSize =大小(im);(凸轮凸轮= imresize imSize (1:2));凸轮= normalizeImage (CAM);凸轮(凸轮< 0.2)= 0;提出=喷气(255)。* linspace (1255 0) ';凸轮= ind2rgb (uint8(凸轮* 255),提出)* 255;combinedImage =双(rgb2gray (im)) / 2 +凸轮;combinedImage = normalizeImage (combinedImage) * 255;imshow (uint8 (combinedImage));结束函数N = normalizeImage (I)最小= min(我(:));最大= max(我(:));N = (I-minimum) /(最大最小);结束函数layerName = activationLayerName(网络)如果网络= =“squeezenet”layerName =“relu_conv10”;elseif网络= =“googlenet”layerName =“inception_5b-output”;elseif网络= =“resnet18”layerName =“res5b_relu”;elseif网络= =“mobilenetv2”layerName =“out_relu”;结束结束

引用

[1],Bolei Aditya斯拉,Agata Lapedriza,这和安东尼·托拉尔巴制作。“学习深有识别力的本地化特征。”在《IEEE计算机视觉与模式识别会议,2921 - 2929页。2016年。

另请参阅

|

相关的话题