主要内容

gradCAM

使用Grad-CAM解释网络预测

    描述

    例子

    scoreMap= gradCAM (X标签返回输入分类分数变化的梯度加权类激活映射(Grad-CAM)映射X,当网络为所给出的类计算类的分数标签.使用此函数解释网络预测,并检查网络是否关注数据的正确部分。

    Grad-CAM可解释性技术使用分类分数相对于最终卷积特征图的梯度。对Grad-CAM地图具有较大值的观察部分是那些对该类的网络分数影响最大的部分。

    使用此语法计算分类任务的Grad-CAM映射。

    例子

    scoreMap= gradCAM (XreductionFcn使用约简函数返回Grad-CAM重要性图。reductionFcn将还原层的输出激活还原为标量值的函数句柄。这个标量在分类任务中扮演班级分数的角色,并将Grad-CAM技术推广到非分类任务,例如回归。

    gradCAM函数通过将约简层的约简输出与特征层中的特征进行微分来计算Grad-CAM映射。gradCAM自动选择减少和特征层使用时,计算地图。要指定这些层,请使用“ReductionLayer”而且“FeatureLayer”名称-值参数。

    使用此语法计算非分类任务的Grad-CAM映射。

    scoreMapfeatureLayerreductionLayer= gradCAM(___还返回用于计算Grad-CAM映射的特征层和还原层的名称。将此语法与以前语法中的任何输入-参数组合一起使用。

    例子

    ___= gradCAM (___名称,值除以前语法中的输入参数外,还使用一个或多个名称-值参数指定选项。例如,“ReductionLayer”、“概率”设置还原层为层命名为“概率”

    例子

    全部折叠

    使用gradCAM可视化图像的哪些部分对网络的分类决策是重要的。

    导入预训练的网络SqueezeNet。

    网=挤压网;

    导入图像并调整其大小以匹配网络的输入大小。

    X = imread(“laika_grass.jpg”);inputSize = net.Layers(1).InputSize(1:2);X = imresize(X,inputSize);

    显示图像。

    imshow (X)

    图中包含一个轴对象。axis对象包含一个image类型的对象。

    对图像进行分类以获得类标签。

    标签=分类(net,X)
    标签=分类玩具贵宾犬

    使用gradCAM确定图像的哪些部分对分类结果是重要的。

    scoreMap = gradCAM(net,X,label);

    将结果绘制在透明的原始图像上,以查看图像的哪些区域对分类分数的贡献最大。

    图imshow(X)稍等显示亮度图像(scoreMap“AlphaData”, 0.5) colormap飞机

    图中包含一个轴对象。axis对象包含2个image类型的对象。

    该网络主要关注狗的背部来做出分类决定。

    使用Grad-CAM来可视化图像的哪些部分对图像回归网络的预测最重要。

    加载预训练的网络digitsRegressionNet.该网络是一种预测手写体数字旋转角度的回归卷积神经网络。

    负载digitsRegressionNet

    查看网络层次。网络的输出层是回归层。

    层=净。层
    图层数组:1' imageinput'图像输入28x28x1图像,'zerocenter'归一化2' conv_1'二维卷积8个3x3x1卷积,stride[1 1],填充'same' 3 'batchnorm_1'批量归一化8通道批量归一化4 'relu_1' ReLU ReLU 5 'avgpool2d_1'二维平均池化2x2平均池化,stride[2 2],填充[0 0 0 0 0]6 'conv_2'二维卷积16个3x3x8卷积,stride[1 1],填充'same' 7 'batchnorm_2'批量归一化16个批量归一化通道8 'relu_2' ReLU ReLU 9 'avgpool2d_2'二维平均池化2x2平均池化与stride[2 2]和填充[0 0 0 0 0]10 'conv_3'二维卷积32 3x3x16卷积与stride[1 1]和填充'same' 11 'batchnorm_3'批归一化与stride[1 1]和填充'same' 14 'batchnorm_4'批归一化与32通道批归一化15 'relu_4' ReLU ReLU 16'dropout' dropout 20% dropout 17 'fc'全连接1全连接层18 'regressionoutput'回归输出均方误差与响应' response '

    加载测试图像。

    [XTest,~,YTest] = digitTest4DArrayData;

    在测试图像上评估网络的性能。

    testdx = 501;testDigit = XTest(:,:,:, testdx);

    使用预测预测旋转角度,并将预测旋转与真实旋转进行比较。

    预drotation =预测(净,testDigit)
    predRotation =26.5635
    trueRotation = YTest(testdx)
    trueRotation = 29

    可视化图像中对网络预测最重要的区域gradCAM.选择ReLU层作为特征层,全连通层作为约简层。

    featureLayer =“relu_4”;reductionLayer =“俱乐部”

    定义约简函数。还原函数必须将还原层的输出还原为一个标量值。Grad-CAM映射显示图像不同部分对该标量的重要性。在这个回归问题中,网络预测图像的旋转角度。因此,全连通层的输出已经是一个标量值,因此约简函数就是恒等函数。

    reductionFcn = @(x)x;

    计算Grad-CAM地图。

    scoreMap = gradCAM(net,testDigit,reductionFcn,...“ReductionLayer”reductionLayer,...“FeatureLayer”, featureLayer);

    在测试图像上显示Grad-CAM映射。

    Ax (1) = subplot(1,2,1);imshow (testDigit)标题("真旋转= "+ trueRotation +'\newline Pred Rotation = '+ round(predRotation,0)) colormap(ax(1),“灰色”) ax(2) = subplot(1,2,2);imshow (testDigit)显示亮度图像(重新调节(scoreMap) colormap (ax (2),“喷气机”)标题(“Grad-CAM”)举行

    图中包含2个轴对象。轴对象1有标题开始2 × 1矩阵第一行第列空白空白空白空白=空白2 9第2行第1列空白空白空白空白空白空白=空白2 7 EndMatrix包含一个类型为image的对象。标题为Grad-CAM的坐标轴对象2包含2个image类型的对象。

    使用gradCAM为了可视化序列的哪些部分对网络的分类决策是重要的。

    加载预训练的网络JapaneseVowelsConvNet.该网络是在[1]和[2]中描述的日语Vowels数据集上训练的预训练的1- d卷积神经网络。

    负载JapaneseVowelsConvNet

    查看网络结构。

    网层
    ans = 11x1带有图层的图层数组:1' sequenceinput'序列输入序列输入12维2' conv1d_1' 1- d Convolution 32 3x12卷积与stride 1和填充'causal' 3 'relu_1' ReLU ReLU 4 'layernorm_1'层归一化层32通道归一化层5 ' conv1d2 ' 1- d Convolution 64 3x32卷积与stride 1和填充'causal' 6 'relu_2' ReLU ReLU ReLU 7 'layernorm_2'层归一化层64通道归一化层8 'globalavgpool1d' 1- d全球平均池1- d全球平均池1- d池9“俱乐部”Fully Connected 9 fully connected layer 10 'softmax' Softmax softmax 11 'classoutput' Classification Output crossentropyex with '1' and 8 other classes

    加载测试数据。XTest是包含不同长度的12维序列的单元格数组。tt是标签“1”,“2”,…,“9”,对应9个说话者。

    [XTest,TTest] =日本evowelstestdata;

    选择第一个时间序列观测。这个序列有19个时间步长。

    testSequence = XTest{1};testSize = size(testSequence)
    testSize =1×212日19
    numFeatures = testSize(1);

    把第一个时间序列想象成一个图形。每一行对应一个特征。

    图形图(testSequence')“训练观察1”)包含(“时间步”)传说(“特性”+字符串(1:numFeatures),“位置”“northeastoutside”

    图中包含一个轴对象。标题为Training Observation 1的坐标轴对象包含12个类型为line的对象。这些对象分别代表特征1、特征2、特征3、特征4、特征5、特征6、特征7、特征8、特征9、特征10、特征11、特征12。

    对试验观测进行分类。

    标签=分类(net,testSequence)
    标签=分类1

    使用gradCAM确定序列的哪些部分对分类结果是重要的。

    map = gradCAM(net,testSequence,label);

    地图是一个1乘19的向量,其中包含19个时间步骤中的每一个的重要性值。

    绘制结果图,看看哪些时间步骤对分类分数的贡献最大。

    图subplot(2,1,1) plot(testSequence') xlabel(“时间步”) subplot(2,1,2) plot(map) xlabel(“时间步”) ylabel (“Grad-CAM重要性”

    图中包含2个轴对象。Axes对象1包含12个line类型的对象。坐标轴对象2包含一个line类型的对象。

    Grad-CAM地图表明,网络将重点放在后面的时间步骤上,以做出分类决策。

    输入参数

    全部折叠

    训练过的网络,指定为SeriesNetworkDAGNetwork,或dlnetwork对象。可以通过导入预训练的网络或使用trainNetwork功能或定制培训。有关预训练网络的更多信息,请参见预训练的深度神经网络

    必须包含单个输入层和单个输出层。的输入层一定是imageInputLayerimage3dInputLayer,或sequenceInputLayer.对于具有sequenceInputLayer,InputSize属性必须为标量。

    输入数据,指定为数字数组或格式化dlarray对象。

    • 对于二维图像数据,X一定是h——- - - - - -w——- - - - - -c数组,hw,c分别为网络输入层的高度、宽度和通道数。

    • 对于3d图像数据,X一定是h——- - - - - -w——- - - - - -d——- - - - - -c数组,hwd,c分别为网络输入层的高、宽、深和数。

    • 对于向量序列数据,X一定是c——- - - - - -t数组,c网络的输入大小而且t序列中的时间步数,可以是任何正整数。

    数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

    类标签,用于计算用于分类和语义分割任务的Grad-CAM映射,指定为类别、字符向量、字符串标量、数值索引或这些值的向量。

    dlnetwork对象,必须指定标签作为分类索引或数字索引。

    如果你指定标签作为一个向量,软件独立计算每个类标签的特征重要性。这样的话,scoreMap中每个类的映射标签.有关更多信息,请参见scoreMap

    gradCAM在类的约简层的空间和时间维度上的函数和标签.因此,您可以指定标签作为感兴趣的类的语义分割任务和gradCAM返回每个像素的Grad-CAM重要性。

    例子:["猫”“狗”)

    例子:(1 - 5)

    数据类型:字符|字符串|分类

    还原函数,指定为函数句柄。约简函数将约简层的输出激活减少到单个值,并且必须减少adlarray对象的dlarray标量。这个标量的作用是标签在分类任务中,并将Grad-CAM技术推广到非分类任务,如回归。

    Grad-CAM使用约简层的减少输出激活来计算重要性映射的梯度。

    例子:@x (x)

    数据类型:function_handle

    名称-值参数

    指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

    在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

    例子:“FeatureLayer”、“conv10’,‘ReductionLayer’,‘问题’,‘OutputUpsampling’,‘双三次的’,‘ExecutionEnvironment’,‘gpu’计算关于图层的Grad-CAM地图“conv10”而且“概率”,在GPU上执行计算,并使用双三次插值将结果映射上采样到与输入数据相同的大小。

    计算Grad-CAM映射时要从中提取特征映射的特征层的名称,指定为字符串或字符向量。对于大多数任务,使用最后一个具有非单点空间或时间维度的ReLU层,或者最后一个收集ReLU层输出的层(例如深度拼接或添加层)。如果您的网络不包含任何ReLU层,请指定在输出中具有非单例空间或时间维度的最终卷积层的名称。

    默认值是具有非单空间或时间维度的最后一层。使用analyzeNetwork函数检查网络并选择正确的层。

    例子:“FeatureLayer”、“conv10”

    数据类型:字符|字符串

    计算Grad-CAM映射时从中提取输出激活的还原层的名称,指定为字符串或字符向量。对于分类任务,这一层通常是最终的softmax层。对于其他任务,这一层通常是DAG和系列网络的倒数第二层,是DAG和系列网络的最后一层dlnetwork对象。

    在DAG和串联网络中,默认值是倒数第二层,在网络中是最后一层dlnetwork对象。使用analyzeNetwork函数检查网络并选择正确的层。

    例子:“ReductionLayer”、“概率”

    数据类型:字符|字符串

    为输入数据的每个维度分配标签的数据格式,指定为字符向量或字符串。格式中的每个字符必须是以下维度标签之一:

    • 年代——空间

    • C——频道

    • B——批

    • T——时间

    有关更多信息,请参见dlarray

    gradCAM函数最多支持一个单金宝app批处理维度。

    例子:“格式”、“SSC的

    数据类型:字符|字符串

    输出上采样方法,指定为由逗号分隔的对组成“OutputUpsampling”和以下值之一:

    • “双三次的”-使用双三次插值生成平滑地图。

    • “最近的”—使用最近邻插值来扩展地图。

    • “没有”-不使用上采样。映射可以比输入数据更小,也可以比输入数据更大。

    如果“OutputUpsampling”“最近的”“双三次的”时,Grad-CAM地图与输入的空间和时间维度大小相同。

    • 对于2-D图像数据,映射为大小h——- - - - - -w,在那里h而且w是图像的高度和宽度分别吗

    • 对于3-D图像数据,地图是大小h——- - - - - -w——- - - - - -d,在那里hw,d分别是图像的高度、宽度和深度。

    • 对于向量序列输入,映射的大小为1 × -t,在那里t是序列中的时间步数。

    如果“OutputUpsampling”“最近的”“双三次的”方法对计算的映射进行上采样imresize函数用于二维图像和矢量序列数据,以及imresize3(图像处理工具箱)三维图像数据的函数。对于3-D图像数据,选项“双三次的”使用imresize3(图像处理工具箱)“立方”方法。

    例子:“OutputUpsampling”、“双三次的“

    用于计算映射的硬件资源,指定为由逗号分隔的对组成“ExecutionEnvironment”下面是其中之一。

    • “汽车”—如果有GPU,请使用GPU。否则请使用CPU。

    • “cpu”—使用CPU。

    • “图形”—使用GPU。

    GPU选项需要并行计算工具箱™。要使用GPU进行深度学习,还必须有支持GPU的设备。金宝app有关受支持设备的信息,请参见金宝appGPU计算要求(并行计算工具箱)如果你选择“图形”选项和并行计算工具箱和合适的GPU不可用,那么软件返回一个错误。

    例子:“ExecutionEnvironment”、“gpu的

    输出参数

    全部折叠

    Grad-CAM重要性映射,作为行向量、数值矩阵或数值数组返回。地图中具有较高正值的区域对应于输入数据中对预测有积极贡献的区域。

    • 对于分类任务,scoreMap是指定类别的最终分类分数相对于特征层中的每个特征的梯度。

    • 对于其他类型的任务,scoreMap是约简层的约简输出相对于特征层中的每个特征的梯度。

    的大小scoreMap这取决于数据的类型。

    • 对于二维图像数据,scoreMap是一个矩阵。scoreMap (i, j)对应于Grad-CAM在空间位置上的重要性(i, j).如果你提供标签作为类别向量,字符向量或字符串的向量,那么scoreMap (:,:, n)对应于的映射标签(n)

    • 对于3d图像数据,scoreMap是一个三维阵列。scoreMap (i, j, k)对应于Grad-CAM在空间位置上的重要性(i, j, k).如果你提供标签作为类别向量,字符向量或字符串的向量,那么scoreMap (:,:,:, n)对应于的映射标签(n)

    • 对于向量序列数据,scoreMap是行向量。scoreMap(:,我)对应于Grad-CAM在时间步长的重要性.如果你提供标签作为类别向量,字符向量或字符串的向量,那么scoreMap (:,:, n)对应于的映射标签(n)

    计算Grad-CAM映射时要从中提取特征映射的特征层名称,以字符串形式返回。

    默认情况下,gradCAM选择一个特征层来计算Grad-CAM地图。这一层是具有非单点空间或时间维度的最后一层。属性指定要使用的特性层“FeatureLayer”名称-值参数。当您指定“FeatureLayer”名称-值参数,featureLayer返回相同的值。

    计算Grad-CAM映射时提取输出激活的还原层的名称,以字符串形式返回。

    默认情况下,gradCAM选择一个还原层来计算Grad-CAM地图。这一层是DAG和系列网络的倒数第二层,也是网络的最后一层dlnetwork对象。属性指定要使用的还原层“ReductionLayer”名称-值参数。当您指定“ReductionLayer”名称-值参数,reductionLayer返回相同的值。

    更多关于

    全部折叠

    Grad-CAM

    梯度加权类激活映射(Grad-CAM)是一种可解释性技术,可用于帮助理解深度神经网络所做的预测[3].Grad-CAM是CAM技术的一种推广,通过考虑流经深度网络的目标的梯度来确定网络预测中每个神经元的重要性。

    Grad-CAM计算一个可微输出的梯度,例如类分数,相对于所选层中的卷积特征。梯度在空间和时间维度上汇集,以找到神经元的重要性权重。然后使用这些权重来线性组合激活映射,并确定哪些特征对预测最重要。

    假设你有一个输出的二维图像分类网络yc,表示班级的分数c,并且想要计算卷积层的Grad-CAM映射k功能地图(频道),一个k我,我,在那里我,我索引像素。神经元重要性权重为

    α k c 1 N j y c 一个 j k 梯度 通过 backprop 全球平均统筹

    在哪里N是特征映射中的像素总数。然后,Grad-CAM映射是特征映射与应用的ReLU的加权组合:

    线性整流函数(Rectified Linear Unit) k α k c 一个 k

    ReLU激活确保您只获得对感兴趣的类有积极贡献的特性。因此,输出是指定类的热图,其大小与特征图相同。然后将Grad-CAM映射上采样到输入数据的大小。

    虽然Grad-CAM通常用于分类任务,但您可以为任何可微激活计算Grad-CAM映射。例如,对于语义分割任务,可以通过替换来计算Grad-CAM映射yc j 年代 y j c ,在那里年代是感兴趣的像素集和y我,我c是1 if像素(i, j)预测是类c,否则为0[4].您可以使用gradCAM函数用于非分类任务,通过指定合适的约简函数将约简层的输出激活减少到单个值并取代yc在神经元重要性权重方程中。

    提示

    • reductionFcn函数从还原层接收输出作为跟踪dlarray对象。函数必须将此输出缩减为一个标量dlarray,这gradCAM然后对特征层的激活进行微分。例如,要计算网络softmax激活的208通道的Grad-CAM映射,约简函数为@ (x) (x (208)).该函数接收激活并提取第208通道。

    • gradCAM函数在计算Grad-CAM地图时自动选择缩减和特征层。对于某些网络,所选择的层可能不合适。例如,如果您的网络有多个可以用作特征层的层,那么函数将选择其中一个层,但它的选择可能不是最合适的。属性指定要使用的特性层“FeatureLayer”名称-值参数。

    • 若要将Grad-CAM地图显示为灰度图像上的覆盖层,必须首先将地图重新缩放到范围[0,1]。例如,scoreMapRescaled = rescale(scoreMap);

    参考文献

    [1]工藤,美一,富山俊,新保真。“使用穿过区域的多维曲线分类”模式识别信20,没有。11-13(1999年11月):1103-11。https://doi.org/10.1016/s0167 - 8655 (99) 00077 - x。

    [2] UCI机器学习库:日语元音数据集。https://archive.ics.uci.edu/ml/datasets/Japanese +元音。

    [3] Selvaraju, Ramprasaath R., Michael Cogswell, Abhishek Das, Ramakrishna Vedantam, Devi Parikh和Dhruv Batra。“Grad-CAM:基于梯度定位的深度网络的视觉解释。2017(2017年10月):618-626,https://doi.org/10.1109/ICCV.2017.74。

    维诺格拉多娃,基拉,亚历山大·迪布罗夫和吉恩·迈尔斯。“基于梯度加权类激活映射的可解释语义分割”AAAI人工智能会议论文集34岁的没有。10(2020年4月):13943-13944,https://doi.org/10.1609/aaai.v34i10.7244。

    版本历史

    R2021a中引入