主要内容

探索使用Grad-CAM语义分割网络

这个例子显示了如何探索使用Grad-CAM pretrained语义分割网络的预测。

语义分割图像的每个像素分类网络,导致图像分割的类。您可以使用Grad-CAM,深度学习可视化技术,看看哪些区域的图像像素分类的决定是重要的。

下载Pretrained网络

下载一个语义分割网络培训CamVid数据集从剑桥大学[1]。有关建筑的更多信息和培训语义分割网络,看到的语义分割使用深度学习(深度学习工具箱)

pretrainedURL =“//www.tatmou.com/金宝appsupportfiles/vision/data/deeplabv3plusResnet18CamVid.mat”;pretrainedFolder = fullfile (tempdir,“pretrainedNetwork”);pretrainedNetwork = fullfile (pretrainedFolder,“deeplabv3plusResnet18CamVid.mat”);如果~存在(pretrainedNetwork“文件”mkdir (pretrainedFolder);disp (“下载pretrained网络(58 MB)……”);websave (pretrainedNetwork pretrainedURL);结束pretrainedNet =负载(pretrainedNetwork);网= pretrainedNet.net;

执行语义分割

分析网络预测使用Grad-CAM之前,使用pretrained网络段测试图像。

负载测试图像和调整匹配网络所需的大小。

img = imread (“highway.png”);inputSize = net.Layers (1) .InputSize (1:2);img = imresize (img, inputSize);

使用semanticseg函数来预测图像的像素标签。

predLabels = semanticseg (img,净);

覆盖原始图像的分割结果并显示结果。

提出= camvidColorMap;segImg = labeloverlay (img, predLabels Colormap =提出,透明度= 0.4);类图imshow (segImg InitialMagnification = 40) = camvidClasses ();pixelLabelColorbar(提出类)

网络分类一些地区,例如,附近的道路汽车轮胎分类错误。接下来,您将探索网络预测Grad-CAM洞察为什么网络更进一步的某些地区。

探索网络预测

深层网络是复杂的,所以了解一个网络决定一个特定的预测是很困难的。您可以使用Grad-CAM,看看哪些地方测试图像的语义分割网络是使用像素分类。

Grad-CAM计算的梯度可微的输出,如类分数,对卷积特性选定层。Grad-CAM通常用于图像分类任务[2];然而,它也可以扩展到语义分割问题[3]。

在语义分割任务,将softmax网络输出层得分为每个类原始图像中的每个像素。这与标准图像分类问题,将softmax层输出每个类的分数,为整个图像。Grad-CAM地图类 c

c = R e l U ( k α c k 一个 k ) 在哪里 α c k = 1 / N , j d y c d 一个 , j k

N 是像素的数量, 一个 k 感兴趣的特征映射, y c 对应于一个标量类分数。对于一个简单的图像分类问题, y c 对感兴趣的类将softmax得分。对于语义分割,可以获得 y c 通过减少pixel-wise类分数类感兴趣的一个标量。例如,求和的空间维度将softmax层: y c = ( , j ) P y , j c ,在那里 P 是像素的输出层语义分割网络[3]。在这个例子中,输出层是将softmax层在像素分类层。地图 c 强调区域影响的决定 c 。值越大表示区域的图像像素分类决策是非常重要的。

使用Grad-CAM,必须选择一个功能层地图特征的提取和减少层提取的输出激活。使用analyzeNetwork找到与Grad-CAM层使用。

analyzeNetwork(净)

指定一个功能层。通常这是一个ReLU层将卷积的输出层的网络。

featureLayer =“dec_relu4”;

指定一个还原层。的gradCAM功能和减少层的空间维度,为指定的类,来产生一个标量值。这个标量值然后分化对每个特性的功能层。对于语义分割问题,减少层通常是将softmax层。

reductionLayer =“softmax-out”;

计算Grad-CAM地图道路和人行道上类。

类= [“路”“汽车”];gradCAMMap = gradCAM(净,img、类ReductionLayer = ReductionLayer,FeatureLayer = FeatureLayer);

比较Grad-CAM两类映射到像素标签预测的网络。

图次要情节(2 2 1)imshow (img)标题(“测试图像”次要情节(2,2,2)imshow (segImg)标题(“语义分割”次要情节(2,2,3)imshow (img)显示亮度图像(gradCAMMap (:,: 1), AlphaData = 0.5)标题(”Grad-CAM:“(1)colormap +类飞机次要情节(2,2,4)imshow (img)显示亮度图像(gradCAMMap (:,: 2), AlphaData = 0.5)标题(”Grad-CAM:“(2)colormap +类飞机

Grad-CAM映射和语义分割地图显示类似的高亮显示。Grad-CAM地图道路类显示场景中心更为重要的分类决定网络。网络可能分类道路区域的底部附近的汽车,因为穷人的轮胎和道路边界之间的分辨率。

探讨过渡层

Grad-CAM映射类似于语义分割图使用一层接近尾声时网络的计算。您还可以使用Grad-CAM调查中间层次的训练网络。层有一个小的早些时候接受域大小和学习小,低级特征相比,层的网络。

计算Grad-CAM地图层中先后深入的网络。

层= [“res5b_relu”,“catAspp”,“dec_relu1”];numLayers =长度(层);

res5b_relu网络层附近的中间,而dec_relu1临近结束的网络。

研究汽车和道路的网络分类决策类。对于每一层和类,计算Grad-CAM地图。

类= [“汽车”“路”];numClasses =长度(类);gradCAMMaps = [];i = 1: numLayers gradCAMMaps (::,:, i) = gradCAM(净,img、类ReductionLayer = ReductionLayer,FeatureLayer =层(i));结束

显示每一层的Grad-CAM地图,每个类。行代表的每一层的地图,与层从那些早期在网络订购的网络。

图;idx = 1;我= 1:numLayersj = 1: numClasses次要情节(numLayers、numClasses idx) imshow (img)显示亮度图像(gradCAMMaps (:,:, j,我),AlphaData = 0.5)标题(sprintf (“% s (% s)”层、类(j),(我)),翻译=“没有”)colormap飞机idx = idx + 1;结束结束

后来层产生地图分割图非常相似。然而,早些时候的层网络产生更抽象的结果,通常更关心低层次功能,如边缘,用更少的语义类的意识。例如,在早些时候层的地图,你可以看到,汽车和道路类,天空被高亮显示。这表明早期层关注区域的图像相关类但不一定属于它。

引用

加布里埃尔·[1]Brostow J。,Julien Fauqueur, and Roberto Cipolla. “Semantic Object Classes in Video: A High-Definition Ground Truth Database.”模式识别的字母30日,没有。2(2009年1月):88 - 97。https://doi.org/10.1016/j.patrec.2008.04.005。

[2]Selvaraju, R R。,米。Cogswell, A. Das, R. Vedantam, D. Parikh, and D. Batra. "Grad-CAM: Visual Explanations from Deep Networks via Gradient-Based Localization." In IEEE International Conference on Computer Vision (ICCV), 2017, pp. 618–626. Available atGrad-CAM计算机视觉基础上的开放存取网站。

基拉,[3]Vinogradova Alexandr Dibrov,迈尔斯和基因。”可判断的语义分割通过Gradient-Weighted类激活映射(学生抽象)。”人工智能学报AAAI会议34岁的没有。10(2020年4月3日):13943 - 44。https://doi.org/10.1609/aaai.v34i10.7244

金宝app支持功能

函数类= camvidClasses ()%返回CamVid类名称中使用网络培训。%% CamVid数据集有32类。成11类%原SegNet训练方法[1]。%%的11类:%的“天空”,“建设”、“极”,“路”,“路面”、“树”、“SignSymbol”,%“栅栏”,“车”、“行人”,“骑自行车”。%类= [“天空”“建筑”“极”“路”“路面”“树”“SignSymbol”“篱笆”“汽车”“行人”“自行车”];结束
函数一会pixelLabelColorbar(提出)% colorbar添加到当前轴。colorbar是格式化%显示类名与颜色。甘氨胆酸colormap(提出)% colorbar添加到当前的图。c = colorbar (“对等”甘氨胆酸,);%为刻度线使用类名。c。TickLabels =一会;numClasses =大小(提出,1);%中心标记标签。c。蜱虫= 1 / (numClasses * 2): 1 / numClasses: 1;%去除刻度线。c。TickLength = 0;结束函数提出= camvidColorMap%定义colormap CamVid所使用的数据集。提出= (128 128 128%的天空128 0 0%的建筑192 192 192%极128 64 128%的道路60 40 222%的人行道上128 128 0%的树192 128 128% SignSymbol64 64 128%的栅栏64 0 128%的车64 64 0%行人0 128 192%骑自行车];%(0 1)之间的正常化。提出255 =提出。/;结束