这个例子展示了如何使用grado - cam方法来理解为什么深度学习网络会做出分类决策。Grad-CAM,由Selvaraju和合作者发明[1],使用分类评分相对于网络中最后一个卷积层的梯度,以理解图像的哪些部分对分类最重要。该示例使用GoogLeNet预先训练的网络来处理图像。
梯度凸轮是凸轮技术的一种推广。这个例子展示了grado - cam使用dlgradient
自动微分功能,方便执行所需的计算。有关实时网络摄像头数据的激活映射技术,请参见使用类激活映射研究网络预测.
加载GoogLeNet网络。
网= googlenet;
阅读GoogLeNet的图像大小。
inputSize = net.Layers (1) .InputSize (1:2);
负载sherlock.jpg
,本例中包含了一只金毛猎犬的图像。
img = imread (“sherlock.jpg”);
将图像调整为GoogLeNet的尺寸。
img = imresize (img, inputSize);
对图像进行分类和显示,并对图像进行分类和分类评分。
[classfn,分数]=(净,img)进行分类;imshow (img);标题(sprintf (“% s (% .2f)”、classfn评分(classfn)));
GoogLeNet正确地将图片分类为金毛猎犬。但是为什么呢?图像的哪些特征导致网络进行这种分类?
graduate - cam背后的想法[1]是计算网络中最终分类评分相对于最终卷积层的梯度。梯度较大的地方正是最终得分最依赖于数据的地方。的gradcam
辅助函数计算的梯度凸轮映射dlnetwork
,对给定类的softmax层得分对卷积特征映射求导。对输入的图像进行自动区分dlImg
必须是一个dlarray
.
类型gradcam.m
function [convMap,dScoresdMap] = gradcam(dlnet, dlImg, softmaxName, convLayerName, classfn) [scores,convMap] = predict(dlnet, dlImg, 'Outputs', {softmaxName, convLayerName});classScore =分数(classfn);dScoresdMap = dlgradient (classScore convMap);结束
第一行gradcam
函数从网络中的最终卷积层获得分数和卷积映射。第二行查找所选分类(在本例中为金毛猎犬)的得分。dlgradient
仅为标量函数计算梯度。所以gradcam
计算仅针对所选分类的图像评分的梯度。第三行使用自动微分来计算最终得分相对于最终卷积层中的权重的梯度。
要使用grado - cam,请创建dlnetwork
来自谷歌网络从网络创建一个层图。
lgraph = layerGraph(净);
要访问GoogLeNet用于分类的数据,请删除其最终分类层。
lgraph = removeLayers(lgraph, lgraph. layers (end).Name);
创建一个dlnetwork
从层图。
dlnet = dlnetwork (lgraph);
指定softmax层的名称,“概率”
.指定最后一个卷积层的名称,“inception_5b-output”
.
softmaxName =“概率”;convLayerName =“inception_5b-output”;
若要使用自动区分,请将夏洛克图像转换为dlarray
.
dlImg = dlarray(单(img),SSC的);
调用,计算图像的梯度cam梯度dlfeval
在gradcam
函数。
[convMap, dScoresdMap] = dlfeval(@gradcam, dlnet, dlImg, softmaxName, convLayerName, classfn);
调整梯度地图的大小到GoogLeNet图像的大小,并将分数缩放到适当的级别以供显示。
gradcamMap = sum(convMap .* sum(dScoresdMap,[1 2]), 3); / /计算节点gradcamMap = extractdata (gradcamMap);gradcamMap =重新调节(gradcamMap);gradcamMap = imresize(gradcamMap, inputSize,“方法”,“双三次的”);
在图像的顶部显示grado - cam水平“AlphaData”
值为0.5。的“喷气机”
颜色图以深蓝为最低值,深红为最高值。
imshow (img);持有在;显示亮度图像(gradcamMap“AlphaData”, 0.5);colormap飞机持有从;标题(“Grad-CAM”);
显然,狗的上面部和耳朵对分类的影响最大。
关于研究深层网络分类原因的另一种方法,请参见occlusionSensitivity
.
[1] Selvaraju, R. R., M. Cogswell, A. Das, R. Vedantam, D. Parikh,和D. Batra。grado - cam:基于梯度定位的深度网络可视化解释。《计算机视觉与视觉》,2017年第3期。可以在Grad-CAM
在计算机视觉基金会开放获取网站上。
dlarray
|dlfeval
|dlgradient
|dlnetwork