主要内容

理解使用遮挡的网络预测

这个例子展示了如何使用遮挡敏感性图来理解为什么深度神经网络会做出分类决定。遮挡敏感性是一种简单的技术,用于理解图像的哪些部分对深度网络的分类最重要。你可以通过对数据的微小扰动来测量网络对数据不同区域遮挡的敏感性。使用遮挡敏感性来获得对网络用于进行特定分类的图像特征的高层次理解,并提供对网络可能错误分类图像的原因的深入了解。

深度学习工具箱提供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)”、topClasses topScores);标题(sprintf(加入(titleString,”;“)));

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

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

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

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

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

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

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

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

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

使用梯度类激活映射(Grad-CAM)技术也可以得到类似的结果。grade - cam使用分类评分相对于网络中最后一层卷积层的梯度,以了解图像的哪些部分对分类最重要。例如,请参见gradcam揭示了Deep Learning决策背后的原因

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);持有显示亮度图像(topClassesMap(:,:我),“AlphaData”, 0.5);colormap飞机;classLabel =字符串(类(topIdx(我)));标题(sprintf (“% s”classLabel));结束

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

调查误分类问题

如果您的网络始终错误地对某些类型的输入数据进行分类,您可以使用遮挡敏感性来确定您的输入数据的特定特征是否使网络感到困惑。从莱卡坐在草地上的遮挡图中,你可以预料到莱卡的图像更专注于她的脸,很可能被误分类为西藏梗.你可以用莱卡的另一张图片来验证这一点。

imgLaikaSit = imresize (imread (“laika_sitting.jpg”), inputSize);[YPred,分数]=(网络,imgLaikaSit)进行分类;[得分,idx] = max(分数);YPred,分数
YPred =分类西藏梗
分数=0.5668

计算新图像的遮挡图。

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

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

你可以利用从occlusionSensitivity函数,以确保网络关注输入数据的正确特性。在这个例子中,分类问题的原因是GoogleNet的可用类不包括像Laika这样的杂交狗。遮挡图说明了为什么网络会被莱卡的这些图像所混淆。确保你使用的网络适合手头的任务是很重要的。

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

参考文献

Zeiler m.d., Fergus R.(2014)可视化和理解卷积网络。见:Fleet D., Pajdla T., Schiele B., Tuytelaars T.(编)Computer Vision - ECCV 2014。2014年大会。《计算机科学课堂讲稿》,第8689卷。施普林格,可汗

另请参阅

|

相关的话题