主要内容

gradCAM

用Grad-CAM解释网络预测

    描述

    例子

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

    梯度- 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。

    网= squeezenet;

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

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

    显示图像。

    imshow (X)

    图中包含一个axes对象。坐标轴对象包含一个image类型的对象。

    对图像进行分类,得到类标签。

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

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

    scoreMap = gradCAM(净,X,标签);

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

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

    图中包含一个axes对象。坐标轴对象包含两个image类型的对象。

    网络主要集中在狗的背部来做出分类决策。

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

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

    负载digitsRegressionNet

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

    层=净。层
    带有图层的图层数组:1' imageinput'图像输入28x28x1图像与'zerocenter'归一化2' conv_1'二维卷积8 3x3x1卷积与stride[1 1]和填充'same' 3 'batchnorm_1' Batch归一化批处理归一化8通道4 'relu_1' ReLU ReLU 5 'avgpool2d_1'二维平均归一化2x2平均归一化与stride[2 2]和填充[0 0 0 0]6 'conv_2'二维卷积16 3x3x8卷积与stride[1 1]和填充'same' 7 'batchnorm_2' Batch归一化批处理归一化与16channel8 'relu_2' ReLU ReLU 9 'avgpool2d_2' 2d Average Pooling 2x2 Average Pooling with stride[2 2]和padding [0 0 0 0] 10 'conv_3' 2d Convolution 32 3x3x16 convolutions with stride[1 1]和padding 'same' 11 'batchnorm_3' Batch Normalization Batch Normalization with 32 channels 12 'relu_3' ReLU ReLU 13 'conv_4' 2d Convolution 32 3x3x32 convolutions with stride[1 1]和padding 'same' 14 'batchnorm_4' Batch Normalization Batch Normalization with 32 channels 15 'relu_4' ReLU ReLU 16'dropout' dropout' 20% dropout' 17 'fc'全连接1全连接层18 'regressionoutput'回归输出均方误差响应' response '

    加载测试图像。

    [XTest ~,欧美]= digitTest4DArrayData;

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

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

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

    testDigit predRotation =预测(净)
    predRotation =26.5635
    trueRotation =欧美(testIdx)
    trueRotation = 29

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

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

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

    reductionFcn = @ x (x);

    计算Grad-CAM映射。

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

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

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

    图中包含2个轴对象。第2行第1列空白r o T a T on空白=空白2 9第2行第1列空白P r e空白r o T a T on空白=空白2 7 EndMatrix包含一个类型为image的对象。标题为Grad-CAM的Axes对象2包含两个类型为image的对象。

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

    加载预训练的网络JapaneseVowelsConvNet.该网络是一个经过预先训练的1- d卷积神经网络,根据[1]和[2]中描述的日语元音数据集进行训练。

    负载JapaneseVowelsConvNet

    查看网络架构。

    网层
    ans = 11x1带有图层的图层数组:1' sequenceinput' Sequence Input序列输入12维2' conv1d1 ' 1- d卷积32 3x12卷积stride 1和填充'因果' 3 'relu_1' ReLU ReLU 4 'layernorm_1'层归一化层归一化32通道5 'conv1d_2' 1- d卷积64 3x32卷积stride 1和填充'因果' 6 'relu_2' ReLU ReLU 7 'layernorm_2'层归一化层归一化64通道8 'globalavgpool1d' 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, tt) = japaneseVowelsTestData;

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

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

    在一个情节中想象第一个时间序列。每一行对应一个特征。

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

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

    对试验观察结果进行分类。

    testSequence标签=分类(净)
    标签=分类1

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

    地图= gradCAM(净、testSequence标签);

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

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

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

    图中包含2个轴对象。axis对象1包含12个类型为line的对象。Axes对象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使用约简层的约简输出激活来计算重要性图的梯度。

    例子:@x (x)

    数据类型:function_handle

    名称-值参数

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

    在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

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

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

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

    例子:“FeatureLayer”、“conv10”

    数据类型:字符|字符串

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

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

    例子:“ReductionLayer”、“概率”

    数据类型:字符|字符串

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

    • 年代——空间

    • C——频道

    • B——批

    • T——时间

    有关更多信息,请参见dlarray

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

    例子:“格式”、“SSC的

    数据类型:字符|字符串

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

    • “双三次的”-使用双三次插值产生一个光滑的地图。

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

    • “没有”-不使用上采样。映射可以大于或小于输入数据。

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

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

    • 对于3-D图像数据,映射为sizeh——- - - - - -w——- - - - - -d,在那里hw,d分别是图像的高度、宽度和深度。

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

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

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

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

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

    • “cpu”—使用CPU。

    • “图形”—使用GPU。

    GPU选项需要并行计算工具箱™。要使用GPU进行深度学习,还必须有支持的GPU设备。有关支持的设备的信息,请参见GPU计算的需求(并行计算工具箱)如果您选择“图形”选项和并行计算工具箱以及合适的GPU均不可用,则软件返回错误。

    例子:“ExecutionEnvironment”、“gpu的

    输出参数

    全部折叠

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

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

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

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

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

    • 对于3d图像数据,scoreMap是一个3d阵列。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和系列网络的倒数第二层,是DAG和系列网络的最后一层dlnetwork对象。也可以指定要使用的缩减层“ReductionLayer”名称-值参数。当您指定“ReductionLayer”名称-值参数,reductionLayer返回相同的值。

    更多关于

    全部折叠

    Grad-CAM

    梯度加权类激活映射(Grad-CAM)是一种可解释性技术,可用于帮助理解深度神经网络所做的预测[3].梯度-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(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 =重新调节(scoreMap);

    参考文献

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

    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

    Baidu
    map