主要内容

理解使用遮挡的网络预测

此示例演示了如何使用遮挡敏感度贴图来理解深层神经网络为何做出分类决策。遮挡敏感度是一种简单的技术,用于了解图像的哪些部分对深层网络的分类最重要。您可以测量图像不同区域的网络对遮挡的敏感度通过对数据的微小扰动来获取数据。使用遮挡敏感度可以从较高的层次了解网络用于进行特定分类的图像特征,并深入了解网络可能对图像进行错误分类的原因。

深度学习工具箱提供occlusionSensitivity函数为接受图像输入的深层神经网络计算遮挡敏感度贴图。这个occlusionSensitivity函数通过使用闭塞遮罩(通常是一个灰色正方形)来替换输入的小区域。掩模在图像上移动,给定类的概率分数的变化是作为掩模位置的函数来测量的。您可以使用这种方法突出显示图像中对分类最重要的部分:当图像的这部分被遮挡时,预测类的概率评分将急剧下降。

加载预训练的网络和图像

加载预先训练好的网络GoogLeNet,它将用于图像分类。

网= googlenet;

提取网络的图像输入大小和输出类别。

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

加载图像。这张照片是一只名叫莱卡的狗。将图像调整为网络输入的大小。

imgLaikaGrass = imread (“laika_grass.jpg”);imgLaikaGrass=imresize(imgLaikaGrass,inputSize);

对图像进行分类,并在图像标题中显示分类分数最高的三个类别。

[YPred,分数]=(网络,imgLaikaGrass)进行分类;[~,topIdx] = maxk(scores, 3);topScores =分数(topIdx);topClasses =类(topIdx);imshow(imgLaikaGrass) titleString = compose(“% s (% .2f)”,TopClass,TopCores');标题(sprintf)加入(标题串,"; ")));

莱卡是贵宾犬和可卡犬的杂交品种。这个品种在GoogLeNet中不是一个类,所以网络对图像进行分类有一些困难。网络对它的预测并不是很有信心迷你贵宾犬只有23%的分数。得分第二高的班级也是一种贵宾犬,这是一个合理的分类。网络也分配了一个中等的概率西藏梗类。我们可以使用遮挡来理解图像的哪些部分导致网络提出这三种类型。

识别网络用于分类的图像区域

您可以使用遮挡来找出图像的哪些部分对分类是重要的。首先,看看预测的等级迷你贵宾犬.图像的哪些部分表示该类别?当图像的某些部分被遮挡时,使用遮挡敏感度函数映射分类分数的变化。

地图= occlusionSensitivity(网,imgLaikaGrass, YPred);

用遮挡敏感性图叠加显示Laika的图像。

imshow (imgLaikaGrass“InitialMagnification”,150)保持显示亮度图像(地图,“AlphaData”, 0.5) colormap喷气式飞机色条标题(sprintf)(“闭塞敏感性(% s)”,...YPred))

遮挡贴图显示图像的哪些部分对图像的分数有正贡献迷你贵宾犬类别,以及哪些部分有负贡献。地图上的红色区域有更高的值,是证据迷你贵宾犬等级-当红色区域被遮挡时迷你贵宾犬会下降。在这张图中,莱卡的头,后背和耳朵提供了最有力的证据迷你贵宾犬类。

地图中值较低的蓝色区域是导致得分增加的图像部分迷你贵宾犬当堵塞。通常,这些区域是另一类的证据,并可能混淆网络。在这种情况下,莱卡的嘴和腿对总分有负面贡献迷你贵宾犬

遮挡贴图强烈聚焦于图像中的狗,这表明GoogLeNet正在对图像中的正确对象进行分类。如果您的网络没有产生预期的结果,遮挡贴图可以帮助您了解原因。例如,如果网络强烈聚焦于图像的其他部分,这表明网络学习了错误的特征。

使用梯度类激活映射(Grad CAM)技术可以获得类似的结果。Grad CAM使用分类分数相对于网络中最后一个卷积层的梯度,以了解图像的哪些部分对分类最重要。例如,请参阅Grad CAM揭示了深度学习决策背后的原因

Occlusion sensitivity和gradc - cam通常会得到类似的定性结果,尽管它们的工作方式不同。通常,您可以在不调整任何参数的情况下,更快地计算grado - cam映射。然而,grado - cam地图通常比遮挡地图的空间分辨率低,可能会错过一些细节。梯度cam的底层分辨率是最后一个卷积特征图的空间分辨率;在GoogleNet的例子中,这是7 × 7像素。为了得到最好的结果闭塞敏感性,你必须选择正确的值MaskSize选项。此调整提供了更大的灵活性,以检查不同长度刻度的输入功能。

比较不同类别的证据

您可以使用遮挡来比较图像的哪些部分被网络识别为不同类别的证据。这在网络对分类不确定,并对几个类给出相似分数的情况下是有用的。

为前三个类中的每一个计算一个遮挡映射。为了用更高的分辨率检查遮挡的结果,使用MaskSize选项。一个更小的这将导致更高分辨率的地图,但需要更长的计算时间和更多的内存。一个更小的MaskSize说明更小的细节,但可能导致更嘈杂的结果。

topClasses =类(topIdx);topClassesMap =闭塞敏感性(net, imgLaikaGrass, topClasses,)...“步”10...“MaskSize”15);

绘制前三个类的结果。

i = 1:长度(topIdx)图imshow (imgLaikaGrass);持有imagesc(topClassesMap(:,:,i),“AlphaData”, 0.5); 颜色表喷气式飞机;classLabel =字符串(类(topIdx(我)));标题(sprintf (“% s”classLabel));结束

图片的不同部分对不同犬种的等级分数有非常不同的影响。狗的背对狗有很大的影响迷你贵宾犬玩具贵宾犬而嘴和耳朵则有助于西藏梗类。

调查误分类问题

如果您的网络一直错误分类某些类型的输入数据,您可以使用遮挡敏感度来确定输入数据的特定特征是否会混淆网络。从躺在草地上的Laika遮挡图中,您可以预期Laika的图像更关注她的脸,可能会被错误分类像西藏梗.你可以用莱卡的另一张图片来验证这一点。

imgLaikaSit=imresize(imread(“laika_sitting.jpg”),输入大小);[YPred,得分]=分类(净,imgLaikaSit);[分数,idx]=最大(分数);YPred,得分
伊普雷德=分类西藏梗
得分=仅有一个的0.5668

计算新图像的遮挡贴图。

地图= occlusionSensitivity(网,imgLaikaSit, YPred);imshow (imgLaikaSit);持有;显示亮度图像(地图,“AlphaData”, 0.5); 颜色表喷气式飞机;标题(sprintf (“% s (% .2f)”,...字符串(类(idx)),得分));

同样,网络强烈地将狗的鼻子和嘴与身体联系在一起西藏梗类。这凸显了网络的一种可能的故障模式,因为它表明莱卡的面部图像会一直被误分类为西藏梗

你可以利用从occlusionSensitivity函数,以确保您的网络关注输入数据的正确特征。本例中出现分类问题的原因是GoogleNet的可用类别不包括莱卡这样的杂交狗。遮挡图说明了为什么这些莱卡图像会混淆网络。确保您使用的网络适用于手头的任务。

在这个例子中,网络错误地将图像中物体的不同部分识别为不同的类。解决这个问题的一个办法是用更多标记的数据来重新训练网络,这些数据涵盖了更广泛的错误分类类别的观察结果。例如,这里的网络可以使用从不同角度拍摄的大量莱卡图像进行再训练,从而学习将狗的后面和前面与正确的类别联系起来。

参考文献

[1] Zeiler M.D.,Fergus R.(2014)可视化和理解卷积网络。收录于:Fleet D.,Pajdla T.,Schiele B.,Tuytelaars T.(eds)计算机视觉–ECCV 2014。ECCV 2014。计算机科学讲稿,第8689卷。湛江斯普林格

另见

|

相关的话题