主要内容

使用遮挡理解网络预测

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

深度学习工具箱提供咬合敏感度函数为接受图像输入的深度神经网络计算遮挡敏感性图。的咬合敏感度通过用遮挡面罩更换,通常是灰色方形的输入功能erturbs的小区域。掩模在图像上移动,并且作为掩模位置的函数测量给定类的概率分数的变化。您可以使用此方法来突出显示图像的哪些部分对分类最重要:当图像的该部分被遮挡时,预测类的概率分数将急剧下降。

加载预训练网络和图像

加载预训练网络GoogLeNet,用于图像分类。

净=googlenet;

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

inputSize=net.Layers(1).inputSize(1:2);classes=net.Layers(end).classes;

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

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

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

[ypred,scores] =分类(net,imglaikagrass);[〜,topidx] = maxk(得分,3);topscores = scores(topidx);topclasses =类(topidx);imshow(imglaikagrass)titlestring = compose(%s(%.2f)、topClasses topScores);标题(sprintf(加入(titleString,”;“)));

莱卡犬是一种卷毛狗-可卡犬杂交品种。该品种不是谷歌网的一个类别,因此网络对图像进行分类有一定困难。网络对其预测——预测的类别——不太自信迷你型只有23%的分数。得分次高的班级也是贵宾犬的一种,这是一种合理的分类。该网络还将中等概率分配给西藏梗类。我们可以使用遮挡来了解图像的哪些部分导致网络建议这三个类别。

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

您可以使用遮挡来确定图像的哪些部分对分类很重要迷你型.图像的哪些部分暗示了这个类?使用遮挡敏感性函数来映射部分图像被遮挡时分类评分的变化。

map=闭塞敏感度(净、imgLaikaGrass、YPred);

显示Laika的图像与覆盖的遮挡敏感性图。

imshow(imglaikagrass,“初始放大”, 150)imagesc(地图、,“字母数据”,0.5)彩色地图飞机colorbar标题(sprintf (“遮挡敏感度(%s)”...ypred))

遮挡图显示图像的哪些部分对评分有积极的贡献迷你型类,以及哪些部分具有负贡献。地图的红色区域具有更高的值,并且是迷你型当红色区域被遮挡时,得分为迷你型在这张照片中,莱卡的头、背和耳朵为这一现象提供了最有力的证据迷你型类。

地图中具有较低值的蓝色区域是图像的一部分,它会导致迷你型闭塞时。通常,这些领域是另一个类的证据,并且可以混淆网络。在这种情况下,Laika的嘴和腿对整体分数具有负面贡献迷你型

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

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

闭塞敏感性和毕业凸轮通常返回定性相似的结果,尽管它们以不同的方式工作。通常,您可以更快地计算Read-Cab Map,即遮挡图,而无需调整任何参数。然而,毕业凸轮映射通常可以具有比遮挡图更低的空间分辨率,并且可以错过细节。Grad-Cam的潜在分辨率是最后一个卷积特征图的空间分辨率;在Googlenet的情况下,这是7×7像素。为了获得遮挡敏感性的最佳结果,您必须选择正确的值伪装大步走选项。这种调优提供了在不同长度尺度上检查输入特性的更大灵活性。

比较不同类别的证据

您可以使用遮挡来比较网络将图像的哪些部分识别为不同类别的证据。这在网络对分类没有信心并且对几个类别给出类似分数的情况下非常有用。

为前三个类中的每一个计算遮挡映射。以较高的分辨率检查遮挡结果,减少掩模尺寸并使用升级伪装大步走选项。一个小大步走导致分辨率更高的贴图,但可能需要更长的计算时间和更多的内存。更小的伪装说明了较小的细节,但可能导致噪音结果。

topClasses=类别(topIdx);topClassesMap=遮挡敏感度(净、imgLaikaGrass、topClasses、,...“跨步”, 10,...“面具”, 15);

绘制前三个类中每个类的结果。

对于i=1:长度(topIdx)图imshow(imgLaikaGrass);保持显示亮度图像(topClassesMap(:,:我),“字母数据”, 0.5);colormap飞机; classLabel=字符串(类(topIdx(i));头衔(斯普林特)(%s,类别标签);终止

图像的不同部分对不同品种的狗的等级分数有着非常不同的影响。狗的背部对等级分数有着强烈的影响迷你型玩具贵宾犬课堂,而嘴和耳朵则有助于西藏梗类。

调查错误分类问题

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

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

计算新图像的遮挡图。

map=闭塞敏感度(净、imgLaikaSit、YPred);imshow(imgLaikaSit);持有;imagesc(地图、,“字母数据”, 0.5);colormap飞机;头衔(斯普林特)(%s(%.2f)...字符串(类(idx)),分数));

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

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

在此示例中,网络错误地将图像中对象的不同部分识别为不同的类。这个问题的一个解决方案是使用更多的标记数据对网络进行重新训练,这些数据涵盖了误分类类别的更广泛的观察范围。例如,这里的网络可以使用从不同角度拍摄的大量莱卡图像进行重新训练,以便它学会将狗的背部和前部与正确的类别相关联。

参考

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

另请参阅

|

相关话题