主要内容

gradCAM

使用grado - cam解释网络预测

    描述

    例子

    scoreMap= gradCAM (X标签)返回图像分类评分变化的梯度加权类激活映射(grade - cam)映射X,当网络评估所给班级的班级分数标签.使用这个函数来解释网络预测,并检查您的网络是否聚焦在图像的正确部分。

    grade - cam可解释性技术使用分类评分相对于最终卷积特征图的梯度。对于grade - cam map,图像中值较大的部分是那些对该类的网络得分影响最大的部分。

    使用此语法计算用于图像或像素分类任务的grado - cam映射。

    例子

    scoreMap= gradCAM (XreductionFcn)使用还原函数返回grado - cam重要性图。reductionFcn是一个函数句柄,它将简化层的输出激活减少为标量值。这个标量完成了分类任务的类评分的角色,并将gradc - cam技术推广到非分类任务,如回归。

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

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

    scoreMapfeatureLayerreductionLayer) = gradCAM (___)也返回用于计算grado - cam映射的特征层和约简层的名称。将此语法与前面语法中的任何输入参数组合一起使用。

    例子

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

    例子

    全部折叠

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

    导入经过预先训练的网络SqueezeNet。

    网= squeezenet;

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

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

    显示图像。

    imshow (X)

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

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

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

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

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

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

    该网络主要集中在狗的背部,以作出分类决定。

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

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

    rng默认的[XTrain ~, YTrain] = digitTrain4DArrayData;[XTest ~,欧美]= digitTest4DArrayData;numTrainImages =元素个数(YTrain);idx = randperm (numTrainImages 20);

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

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

    指定培训选项。

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

    培训网络。

    网= trainNetwork (XTrain、YTrain层,选择);

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

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

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

    testDigit predRotation =预测(净)
    predRotation =-47.5497
    trueRotation =欧美(idx (4))
    trueRotation = -40

    可视化的区域的图像最重要的网络预测使用gradCAM.选择ReLU层作为特征层,全连接层作为还原层。

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

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

    reductionFcn = @ x (x);

    计算grado - cam map。

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

    在测试图像上显示梯度凸轮地图。

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

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

    输入参数

    全部折叠

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

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

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

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

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

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

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

    如果您指定标签作为向量,软件独立计算每个类标签的特征重要性。在这种情况下,scoreMap (:,:, k)对应于的映射标签(k)

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

    例子:["猫”“狗”)

    例子:(1 - 5)

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

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

    grado - cam使用简化层的简化输出激活来计算重要性图的梯度。

    例子:@x (x)

    数据类型:function_handle

    名称-值参数

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

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

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

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

    例子:“FeatureLayer”、“conv10”

    数据类型:字符|字符串

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

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

    例子:“ReductionLayer”、“概率”

    数据类型:字符|字符串

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

    • 年代——空间

    • C——频道

    • B——批

    有关更多信息,请参见dlarray

    例子:“格式”、“SSC的

    数据类型:字符|字符串

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

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

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

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

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

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

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

    • “汽车”—如果有图形处理器,请选择图形处理器。否则,请使用CPU。

    • “cpu”—使用CPU。

    • “图形”—使用GPU。

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

    例子:“ExecutionEnvironment”、“gpu的

    输出参数

    全部折叠

    grade - cam重要性图,以数字矩阵或数字数组的形式返回。地图中正数值较高的区域对应于输入数据对预测有积极贡献的区域。

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

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

    scoreMap (i, j)对应于空间位置的grado - cam重要性(i, j).如果您提供标签作为类别向量、字符向量或字符串的向量scoreMap (:,:, k)对应于的映射标签(k)

    在计算grado - cam地图时提取特征图的特征层名称,以字符串形式返回。

    默认情况下,gradCAM选择一个特征层来计算grado - cam贴图。这一层是具有非单例空间维度的最后一层。控件可以指定要使用的特性层“FeatureLayer”名称-值参数。当你指定“FeatureLayer”名称-值参数,featureLayer返回相同的值。

    在计算grado - cam映射时提取输出激活的约简层的名称,以字符串形式返回。

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

    更多关于

    全部折叠

    Grad-CAM

    梯度加权类激活映射(Gradient-weighted class activation mapping, grade - cam)是一种可解释性技术,可用于帮助理解深度神经网络的预测[1].梯度CAM是CAM技术的一种推广,它通过考虑目标在深度网络中流动的梯度来确定网络中每个神经元的重要性。

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

    假设您有一个带有输出的图像分类网络yc,代表全班的分数c,并希望计算一个卷积层的grado - cam映射k特征图(渠道),一个k我,我,在那里我,我索引的像素。神经元的重要性权重为

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

    在哪里N为特征图中像素的总数。grado - cam地图是特征地图与应用ReLU的加权组合:

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

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

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

    提示

    • reductionFcn函数接收来自缩减层的跟踪输出dlarray对象。函数必须将该输出缩减为标量dlarray,这gradCAM然后根据特征层的激活情况进行区分。例如,要计算一个网络的softmax激活的通道208的grado - cam映射,则还原函数为@ (x) (x (208)).该函数接收激活并提取第208通道。

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

    参考文献

    [1] Selvaraju, Ramprasaath R., Michael Cogswell, Abhishek Das, Ramakrishna Vedantam, Devi Parikh,和Dhruv Batra。“grado - cam:通过基于梯度的本地化从深度网络的视觉解释。2017(2017年10月):618-626,https://doi.org/10.1109/ICCV.2017.74。

    Vinogradova, Kira, Alexandr Dibrov和Gene Myers。“基于梯度加权类激活映射的可解释语义分割”。AAAI人工智能会议论文集34岁的没有。10(2020年4月):13943-13944,https://doi.org/10.1609/aaai.v34i10.7244。

    介绍了R2021a