主要内容

理解使用闭塞的网络预测

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

“深度学习工具箱”提供occlusionSensitivity函数用于计算接受图像输入的深度神经网络的遮挡灵敏度映射。的occlusionSensitivity函数通过用遮挡遮罩(通常是一个灰色方块)替换输入的小区域来干扰输入。掩码在图像中移动,给定类的概率得分的变化作为掩码位置的函数进行测量。您可以使用此方法来突出显示图像的哪些部分对分类最重要:当图像的这部分被遮挡时,预测类的概率得分将急剧下降。

加载预训练的网络和图像

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

Net = googlenet;

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

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

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

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

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

[YPred,scores] = class (net, imglaikgrass);[~,topIdx] = maxk(scores, 3);topScores = scores(topIdx);topClasses = classes(topIdx);imshow(imglaikgrass) titleString = compose(“% s (% .2f)”、topClasses topScores);标题(sprintf(加入(titleString,”;“)));

莱卡是贵宾犬和可卡犬的杂交品种。这个品种不是GoogLeNet中的一个类,所以网络对图像的分类有一些困难。网络对它的预测——被预测的类别——不是很有信心迷你贵宾犬只有23%的分数。分数第二高的班级也是贵宾犬的一种,这是一个合理的分类。该网络还赋予了一个中等概率西藏梗类。我们可以使用闭塞来理解图像的哪些部分导致网络建议这三个类。

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

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

map = occlusionSensitivity(net, imglaikgrass,YPred);

显示莱卡的图像与遮挡灵敏度图叠加。

imshow (imgLaikaGrass“InitialMagnification”, hold住显示亮度图像(地图,“AlphaData”, 0.5) colormap飞机colorbar标题(sprintf (“遮挡敏感度(%s)”...YPred))

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

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

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

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

遮挡灵敏度和Grad-CAM通常在质量上返回相似的结果,尽管它们以不同的方式工作。通常,您可以比闭塞映射更快地计算Grad-CAM映射,而不需要调整任何参数。然而,Grad-CAM地图通常具有比闭塞地图更低的空间分辨率,并可能错过细微的细节。梯度- cam的基本分辨率是最后一个卷积特征图的空间分辨率;在GoogleNet的例子中,这是7乘7像素。要从闭塞灵敏度得到最佳结果,必须为MaskSize而且选项。这种调优为检查不同长度尺度下的输入特征提供了更大的灵活性。

比较不同类别的证据

你可以使用闭塞来比较图像的哪些部分被网络识别为不同类的证据。当网络对分类不确定,并对几个类给出相似的分数时,这是很有用的。

为前三个类中的每个类计算一个闭塞映射。若要检查高分辨率遮挡的结果,请使用MaskSize而且选项。一个更小的导致更高分辨率的映射,但可能需要更长的计算时间和使用更多的内存。一个更小的MaskSize说明更小的细节,但可能导致噪音的结果。

topClasses = classes(topIdx);topClassesMap =闭塞敏感度(net, imglaikagass, topClasses,...“步”10...“MaskSize”15);

画出排名前三的每一门课的结果。

i=1:长度(topIdx)图imshow(imglaikgrass);持有显示亮度图像(topClassesMap(:,:我),“AlphaData”, 0.5);colormap飞机;classLabel = string(class (topIdx(i)));标题(sprintf (“% s”classLabel));结束

图像的不同部分对不同品种的狗的班级成绩有非常不同的影响。狗的背部有很强的影响迷你贵宾犬而且玩具贵宾犬类,而口耳则贡献于西藏梗类。

调查分类错误问题

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

imgLaikaSit = imresize(imread)“laika_sitting.jpg”), inputSize);[YPred,scores] = class (net,imgLaikaSit);[score,idx] = max(scores);YPred,分数
YPred =分类西藏梗
分数=0.5668

计算新图像的遮挡映射。

map = occlusionSensitivity(net,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.(编)计算机视觉- ECCV 2014。2014年大会。计算机科学课堂讲稿,卷8689。施普林格,可汗

另请参阅

|

相关的话题