主要内容

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)

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

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

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

    scoreMap = gradCAM(net,X,label);

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

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

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

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

    加载由手写数字合成图像组成的样本数据。第三个输出包含数字的相应旋转角度,以度为单位。

    rng默认的[XTrain,~,YTrain] = digitTrain4DArrayData;[XTest,~,YTest] = digitTest4DArrayData;numTrainImages =数字(YTrain);idx = randperm(numTrainImages,20);

    构造一个可以预测图像旋转的图像回归网络。

    层= [...imageInputLayer([28 28 1],“名字”“输入”25) convolution2dLayer(12日,“名字”“conv”) reluLayer (“名字”“relu”) fullyConnectedLayer (1,“名字”“俱乐部”) regressionLayer (“名字”“输出”));

    指定培训选项。

    选项= trainingOptions(“个”...“InitialLearnRate”, 0.001,...“详细”假的,...“阴谋”“训练进步”);

    培训网络。

    net = trainNetwork(XTrain,YTrain,图层,选项);

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

    testDigit = XTest(:,:,:,idx(4));

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

    预drotation =预测(净,testDigit)
    predRotation =-47.5497
    trueRotation = YTest(idx(4))
    trueRotation = -40

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

    featureLayer =“relu”;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),“喷气机”)标题(“GradCAM”)举行

    Grad-CAM地图显示网络聚焦于左下角的区域,如果图像旋转为零,数字的尾部就会在这里。该地图表明,为了预测负旋转,该网络正在使用空白空间。

    输入参数

    全部折叠

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

    必须包含单个输入层和单个输出层。的输入层一定是imageInputLayer或者一个image3dInputLayer

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

    X大小必须等于网络的输入大小。

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

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

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

    如果你指定标签作为一个向量,软件独立计算每个类标签的特征重要性。这样的话,scoreMap (:,:, k)对应于的映射标签(k)

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

    例子:["猫”“狗”)

    例子:(1 - 5)

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

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

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

    例子:@x (x)

    数据类型:function_handle

    名称-值参数

    的可选逗号分隔对名称,值参数。的名字参数名称和价值对应的值。的名字必须出现在引号内。您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

    例子:“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——批

    有关更多信息,请参见dlarray

    例子:“格式”、“SSC的

    数据类型:字符|字符串

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

    • “双三次的”-使用双三次插值生成与输入数据相同大小的平滑地图。

    • “最近的”—使用最近邻插值将映射扩展到与输入数据相同的大小。

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

    如果“OutputUpsampling”“最近的”“双三次的”方法将计算的映射上采样到输入数据的大小imresize函数用于二维数据和imresize3(图像处理工具箱)三维数据的函数。对于3-D数据,选项“双三次的”使用imresize3“立方”方法。

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

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

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

    • “cpu”—使用CPU。

    • “图形”—使用GPU。

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

    例子:“ExecutionEnvironment”、“gpu的

    输出参数

    全部折叠

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

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

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

    scoreMap (i, j)对应于Grad-CAM在空间位置上的重要性(i, j).如果你提供标签作为类别向量,字符向量或字符串的向量,那么scoreMap (:,:, k)对应于的映射标签(k)

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

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

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

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

    更多关于

    全部折叠

    Grad-CAM

    梯度加权类激活映射(Grad-CAM)是一种可解释性技术,可用于帮助理解深度神经网络所做的预测[1].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[2].您可以使用gradCAM函数用于非分类任务,通过指定合适的约简函数将约简层的输出激活减少到单个值并取代yc在神经元重要性权重方程中。

    提示

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

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

    参考文献

    [1] 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中引入