这个例子展示了如何使用梯度加权类激活映射(Grad-CAM)技术来理解深度学习网络做出分类决策的原因。Grad CAM,由Selvaraju和合著者发明[1],使用分类分数相对于网络确定的卷积特征的梯度,以了解图像的哪些部分对分类最重要。本例使用GoogLeNet预训练网络进行图像处理。
Grad CAM是类激活映射(CAM)技术的推广。有关实时网络摄像头数据的激活映射技术,请参阅使用类激活映射研究网络预测.grade - cam还可以应用于非分类示例,如回归或语义分割。有关如何使用gradcam来研究语义分割网络的预测的示例,请参见利用grado - cam研究语义分割网络.
加载GoogLeNet网络。
网= googlenet;
阅读GoogLeNet的图像大小。
inputSize = net.Layers (1) .InputSize (1:2);
负载sherlock.jpg
,本例中包含了一只金毛猎犬的图像。
img = imread (“sherlock.jpg”);
根据网络输入维度调整图像的大小。
img = imresize (img, inputSize);
对图像进行分类和显示,并对图像进行分类和分类评分。
[classfn,分数]=(净,img)进行分类;imshow (img);标题(sprintf (“% s (% .2f)”、classfn评分(classfn)));
GoogLeNet正确地将图片分类为金毛猎犬。但是为什么呢?图像的哪些特征导致网络进行这种分类?
Grad-CAM技术利用分类分数相对于最终卷积特征映射的梯度来识别输入图像中对分类分数影响最大的部分。这个梯度很大的地方恰恰是最终分数最依赖数据的地方。
的gradCAM
函数通过对给定类的约简层输出对卷积特征映射求导来计算重要性映射。对于分类任务,gradCAM
函数自动选择合适的层来计算重要性图。属性也可以指定层“还原层”
和“功能层”
名称-值参数。
计算梯度凸轮图。
地图= gradCAM(网,img, classfn);
在图像的顶部显示grado - cam地图“AlphaData”
值为0.5。的“喷气机”
颜色图以深蓝为最低值,深红为最高值。
imshow(img);持有在…上;显示亮度图像(地图,“AlphaData”, 0.5);colormap飞机持有从;标题(“Grad-CAM”);
显然,狗的上面部和耳朵对分类的影响最大。
关于研究深层网络分类原因的另一种方法,请参见occlusionSensitivity
和imageLIME
.
[1] Selvaraju, R. R., M. Cogswell, A. Das, R. Vedantam, D. Parikh,和D. Batra。grado - cam:基于梯度定位的深度网络可视化解释。《计算机视觉与视觉》,2017年第3期。可以在Grad-CAM
在计算机视觉基金会开放获取网站上。
gradCAM
|imageLIME
|occlusionSensitivity
|deepDreamImage