NVIDIA DLI 深度学习入门培训 | 特设三场!!

4月28日/5月19日/5月26日一天密集式学习  快速带你入门阅读全文>

正文共1859个字,2张图,预计阅读时间5分钟。

这是众多卷积神经网络可视化方法之一,方法来自于论文《Learning Deep Features for Discriminative Localization》,论文译文在[翻译]Learning Deep Features for Discriminative Localization。

这篇文章的核心思想是提出了一种叫Class Activation Mapping(类激活图)的方法,可以通过它将CNN在分类时“看”到的东西可视化出来。它的原理是:CNN的卷积层包含大量位置信息,使其具有良好的定位能力,但是全连接层使这种能力丧失,如果只保留最后一个用于分类的全连接层(特指softmax),把其余全连接层替换成全局平均池化层(Global Average Pooling)层,就可以保留这中定位能力,把最后一个softmax层各个单元的权重与最后一个卷积层的输出相乘(求加权总和),绘制热成像图,得到的结果就是一个类激活图。

举个例子,假设图片经过最后一个卷积层的shape为(14,14,512),第一维和第二维代表宽高,第三维代表卷积层深度,softmax层的shape为(512,10),第一维代表unit数,第二维代表分类数,想得到某一个类的类激活图,就用通过最后一个卷积层的矩阵乘以sotfmax某类的矩阵,即(14,14,512)的矩阵乘以(512,1)的矩阵,得到(14,14,1)的矩阵,也就是那个类的类激活图,下面是类激活图:

司机驾驶状态分类

论文中提到最后一个卷积层输出的分辨率越高,定位能力越强,得到的CAM图越好。对应的处理方法就是不仅要砍掉全连接层,还要砍掉一些卷积层,使分辨率控制在14左右。下面是论文中图,与上图最大差别就是有红色,原因可能是分辨率问题,也可能单纯是颜色表示问题,还需要进一步实验确定,但是并不影响可视化,分类准确率也在90%以上。

狗分类

其实到这里很自然会有一个疑问:砍掉那么多层,准确率会不会降低?

答案是肯定的,但不会降低很多,可以通过微调来保持网络准确率。

下面是大家最关心的代码部分,我使用的基于TensorFlow的Keras,所以颜色通道在最后,使用其他框架的同学调一下就好,过段时间会放到Github仓库

def visualize_class_activation_map(model, img_path, target_class):
   '''
   参数:
       model:模型
       img_path:图片路径
       target_class:目标类型
   '''
   origin_img = get_im_cv2([img_path], 224, 224, 3) # 这是一个自定义读取图片函数
   class_weights = model.layers[-1].get_weights()[0] # 取最后一个softmax层的权重

final_conv_layer = model.layers[17] # 这是最后一个卷积层的索引
   get_output = K.function([model.layers[0].input],[final_conv_layer.output, model.layers[-1].output])
   [conv_outputs, predictions] = get_output([origin_img])

conv_outputs = conv_outputs[0, :, :, :]
   cam = np.zeros(dtype=np.float32, shape=(14, 14)) 
   
   for i, w in enumerate(class_weights[:, target_class]):
       cam += conv_outputs[:, :, i] * w

cam = cv2.resize(cam, (224, 224))
   cam = 100 * cam
   plt.imshow(origin_img[0])
   plt.imshow(cam, alpha=0.8, interpolation='nearest')

plt.show()

原文链接:https://www.jianshu.com/p/641a6fc97117

查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:

www.leadai.org

请关注人工智能LeadAI公众号,查看更多专业文章

大家都在看

LSTM模型在问答系统中的应用

基于TensorFlow的神经网络解决用户流失概览问题

最全常见算法工程师面试题目整理(一)

最全常见算法工程师面试题目整理(二)

TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

装饰器 | Python高级编程

今天不如来复习下Python基础

卷积神经网络看见了什么相关推荐

  1. 卷积神经网络之卷积计算、作用与思想 深度学习

    博客:blog.shinelee.me | 博客园 | CSDN 卷积运算与相关运算 在计算机视觉领域,卷积核.滤波器通常为较小尺寸的矩阵,比如3×33×3.从这个角度看,多层卷积是在进行逐层映射,整 ...

  2. 卷积神经网络通俗解读

    转载自:https://blog.csdn.net/dong_lxkm/article/details/80575207 一.前言 最近一直在研究深度学习,联想起之前所学,感叹数学是一门朴素而神奇的科 ...

  3. NLP进阶之(七)膨胀卷积神经网络

    NLP进阶之(七)膨胀卷积神经网络 1. Dilated Convolutions 膨胀卷积神经网络 1.2 动态理解 1.2.2 转置卷积动画 1.2.3 理解 2. Dilated Convolu ...

  4. 卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习)

    卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习) 分享一些公式计算张量(图像)的尺寸,以及卷积神经网络(CNN)中层参数的计算. 以AlexNet网络为例,以下是该网络的参数结构图. A ...

  5. 3层-CNN卷积神经网络预测MNIST数字

    3层-CNN卷积神经网络预测MNIST数字 本文创建一个简单的三层卷积网络来预测 MNIST 数字.这个深层网络由两个带有 ReLU 和 maxpool 的卷积层以及两个全连接层组成. MNIST 由 ...

  6. 卷积神经网络(CNN,ConvNet)

    卷积神经网络(CNN,ConvNet) 卷积神经网络(CNN,有时被称为 ConvNet)是很吸引人的.在短时间内,变成了一种颠覆性的技术,打破了从文本.视频到语音等多个领域所有最先进的算法,远远超出 ...

  7. 使用卷积神经网络的自动心电图诊断

    使用卷积神经网络的自动心电图诊断 Automatic ECG Diagnosis Using Convolutional Neural Network https://www.mdpi.com/207 ...

  8. 情感分析:基于卷积神经网络

    情感分析:基于卷积神经网络 Sentiment Analysis: Using Convolutional Neural Networks 探讨了如何用二维卷积神经网络来处理二维图像数据.在以往的语言 ...

  9. 卷积神经网络(CNN)原理

    学习目标 目标 了解卷积神经网络的构成 记忆卷积的原理以及计算过程 了解池化的作用以及计算过程 应用 无 3.2.1 卷积神经网络的组成 定义 卷积神经网络由一个或多个卷积层.池化层以及全连接层等组成 ...

  10. 一维卷积filter_从零开始学Pytorch(七)之卷积神经网络

    卷积神经网络基础 我们介绍卷积神经网络的卷积层和池化层,并解释填充.步幅.输入通道和输出通道的含义. import torch from torch.autograd import Variable ...

最新文章

  1. 云原生架构演进与企业上云
  2. mysql 的默认数据库mysql为什么在 workbench下看不到?
  3. python套接字socket的作用_【学习笔记】python实现的套接字socket
  4. UA SIE545 优化理论基础1 凸分析1 线性流形与超平面
  5. 南通大学python期末考试试卷答案_南通大学2015-2016年1学期《软工》作业点评总结...
  6. 最新html取消dynsrc属性无效,HTML属性标签2
  7. CDays–5 习题二(利用Python科学计算特性,使用常用计算符)及相关内容解析。...
  8. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-6.微信扫码登录回调本地域名映射工具Ngrock...
  9. List集合排序的两种方法
  10. Java从入门到放弃第1天
  11. 深度学习图像分割:U-Net 体系结构
  12. 4.1网络层功能概述
  13. python读取文件时的相对路径
  14. 最近写收缩标题栏遇到的一个问题 requestLayout() improperly called by android.support.design.widget.CollapsingToolba
  15. 机器学习必看书籍推荐
  16. Mongodb常用查询
  17. python xls 转化 xlsx
  18. ulipad 无法安装使用、无法调试、64位版本问题 ImportError: No module named comtypes 整体解决方案!
  19. 妈蛋,这玩意还真不得不会!
  20. 数据驱动决策:BI在零售业的数据化管理

热门文章

  1. java前沿技术_互联网百强企业架构师告诉你,Java应该这么学!云和数据超全面Java中级程序员学习路线图重磅发布!...
  2. matlab改变矩阵的元素,Matlab中元素不变情况下改变矩阵形态——reshape()
  3. php点击按钮跳转页面heeader,php - 通过FPDF生成后插入水印并打印PDF - SO中文参考 - www.soinside.com...
  4. LaTeX中添加\usepackage{subfigure}一直报错的解决办法,亲测
  5. Objective-C 之category
  6. linux需要你的不懈努力
  7. BigPipe 大的页面分割成一个一个管道
  8. Listview的OnScrollListener的滑动监听实现分页加载
  9. 对象调用方法方法及其call调用
  10. 程序员挑战高薪,你必须会的十大面试题《一》