0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CNN的三种可视化方法介绍

智能感知与物联网技术研究所 来源:通信信号处理研究所 作者:通信信号处理研究 2020-12-29 11:49 次阅读

导读

神经网络进行可视化分析不管是在学习上还是实际应用上都有很重要的意义,基于此,本文介绍了3种CNN的可视化方法:可视化中间特征图,可视化卷积核,可视化图像中类激活的热力图。每种方法均附有相关代码详解。

引言

有一些同学认为深度学习、神经网络什么的就是一个黑盒子,没办法、也不需要分析其内部的工作方式。个人认为这种说法“谬之千里”。

首先,站在自动特征提取或表示学习的角度来看,深度学习还是很好理解,即通过一个层级结构,由简单到复杂逐步提取特征,获得易于处理的高层次抽象表示。其次,现在也已经有很多方法对神经网络进行分析了,特别是一些可视化方法,可以很直观的展示深度模型的特征提取过程。

对神经网络进行可视化分析不管是在学习上还是实际应用上都有很重要的意义,基于此,本文将介绍以下3种CNN的可视化方法:

可视化中间特征图。

可视化卷积核。

可视化图像中类激活的热力图。

可视化中间特征图

这种方法很简单,把网络中间某层的输出的特征图按通道作为图片进行可视化展示即可,如下述代码所示:

import matplotlib.pyplot as plt
#get feature map of layer_activation
plt.matshow(layer_activation[0, :, :, 4], cmap='viridis')

把多个特征图可视化后堆叠在一起可以得到与下述类似的图片。

上图为某CNN 5-8 层输出的某喵星人的特征图的可视化结果(一个卷积核对应一个小图片)。可以发现越是低的层,捕捉的底层次像素信息越多,特征图中猫的轮廓也越清晰。越到高层,图像越抽象,稀疏程度也越高。这符合我们一直强调的特征提取概念。

可视化卷积核

想要观察卷积神经网络学到的过滤器,一种简单的方法是获取每个过滤器所响应的视觉模式。我们可以将其视为一个优化问题,即从空白输入图像开始,将梯度上升应用于卷积神经网络的输入图像,让某个过滤器的响应最大化,最后得到的图像是选定过滤器具有较大响应的图像。

核心代码如下所示(利用Keras框架):

def generate_pattern(layer_name, filter_index, size=150):
layer_output = model.get_layer(layer_name).output
loss = K.mean(layer_output[:, :, :, filter_index])
grads = K.gradients(loss, model.input)[0]
grads /= (K.sqrt(K.mean(K.square(grads))) + 1e-5)
iterate = K.function([model.input], [loss, grads])

input_img_data = np.random.random((1, size, size, 3)) * 20 + 128.
step = 1.
for i in range(40):
loss_value, grads_value = iterate([input_img_data])
input_img_data += grads_value * step

img = input_img_data[0]
return deprocess_image(img)

将输入图片张量转换回图片后进行可视化,可以得到与下述类似的图片:

block1_conv1 层的过滤器模式

随着层数的加深,卷积神经网络中的过滤器变得越来越复杂,越来越精细。模型第一层( block1_conv1 )的过滤器对应简单的方向边缘和颜色,高层的过滤器类似于自然图像中的纹理:羽毛、眼睛、树叶等。

可视化图像中类激活的热力图

即显示原始图片的不同区域对某个CNN输出类别的“贡献”程度。

可以看到,大象头部对“大象”这个类别的“贡献”程度较高,而且这种方法似乎可以在一定程度上进行无监督的目标检测

下面是书中原文,可能有点绕口。

我们将使用的具体实现方式是“Grad-CAM: visual explanations from deep networks via gradient-based localization”这篇论文中描述的方法。这种方法非常简单:给定一张输入图像,对于一个卷积层的输出特征图,用类别相对于通道的梯度对这个特征图中的每个通道进行加权。直观上来看,理解这个技巧的一种方法是,你是用“每个通道对类别的重要程度”对“输入图像对不同通道的激活强度”的空间图进行加权,从而得到了“输入图像对类别的激活强度”的空间图。

这里谈一下我的理解,给定线性函数 ,y为类别, 等等为输入。可以看到这里 对y的贡献为 ,恰好为 。当然了,深度模型中有非线性激活函数,不能简化为一个线性模型,所以这只是启发性的理解。

代码如下所示:

african_elephant_output = model.output[:, 386]
last_conv_layer = model.get_layer('block5_conv3')
grads = K.gradients(african_elephant_output, last_conv_layer.output)[0]
pooled_grads = K.mean(grads, axis=(0, 1, 2))
iterate = K.function([model.input],
[pooled_grads, last_conv_layer.output[0]])
pooled_grads_value, conv_layer_output_value = iterate([x])
for i in range(512):
conv_layer_output_value[:, :, i] *= pooled_grads_value[i]
heatmap = np.mean(conv_layer_output_value, axis=-1)
heatmap = np.maximum(heatmap, 0)
heatmap /= np.max(heatmap)
plt.matshow(heatmap)

得到的热力图如下所示:

经下述代码处理后,可以得到本节开始时的图片。

import cv2
img = cv2.imread(img_path)
heatmap = cv2.resize(heatmap, (img.shape[1], img.shape[0]))
heatmap = np.uint8(255 * heatmap)
heatmap = cv2.applyColorMap(heatmap, cv2.COLORMAP_JET)
superimposed_img = heatmap * 0.4 + img
cv2.imwrite('/Users/fchollet/Downloads/elephant_cam.jpg', superimposed_img)

原文标题:CNN的一些可视化方法!

文章出处:【微信公众号:通信信号处理研究所】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4771

    浏览量

    100754
  • 深度学习
    +关注

    关注

    73

    文章

    5503

    浏览量

    121152

原文标题:CNN的一些可视化方法!

文章出处:【微信号:tyutcsplab,微信公众号:智能感知与物联网技术研究所】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    什么是大屏数据可视化?特点有哪些?

    介绍: 特点 直观易懂:大屏数据可视化通过图表、图形和其他可视化元素,将复杂的数据转化为直观易懂的形式,使得用户无需深入挖掘数据细节即可快速理解数据的含义。例如,企业可以将复杂的数据转化为易于理解的图表和图形,使
    的头像 发表于 12-16 16:59 165次阅读

    智慧能源可视化监管平台——助力可视化能源数据管理

    博达可视化大屏设计平台在智慧能源领域的价值体现在实时监控、数据可视化、决策支持和效率提升等方面。借助该平台,企业可以轻松搭建智慧能源类可视化大屏,更加精确和高效地管理生产和生活,实现能源的可持续发展。
    的头像 发表于 11-29 10:00 298次阅读
    智慧能源<b class='flag-5'>可视化</b>监管平台——助力<b class='flag-5'>可视化</b>能源数据管理

    可视化建筑建模特点

    可视化建筑建模是一利用计算机技术对建筑物进行立体表达和展示的过程,是建筑设计和规划中不可或缺的重要环节。在当今数字化时代,
    的头像 发表于 07-23 11:50 521次阅读

    如何实现维地图可视化交互系统

    维地图可视化 交互系统是一基于维地图技术的交互式应用程序,可以呈现地理信息和空间数据的立体展示,并提供用户友好的交互功能。以下是古河
    的头像 发表于 07-19 18:20 867次阅读

    可视化运用的主要技术

    可视化技术是一强大的工具,可用于呈现复杂的数据和概念,使人们能够更直观地理解信息。在当今数字化时代,可视化已经成为许多领域中不可或
    的头像 发表于 07-19 13:56 286次阅读

    可视化的魅力与应用

    可视化是一强大的工具,它融合了艺术、科学和技术,通过在维空间中呈现数据、概念和想法,为人们提供了一直观而生动的方式来理解和探索信息
    的头像 发表于 07-17 14:19 263次阅读

    如何实现园区大屏可视化

    孪生可视化 构建平台利用Web可视化技术对现实场景进行仿真,实现园区级业务场景 的可视化呈现,助力企业快速完成项目的实施。实现园区场景立体可先,极致
    的头像 发表于 06-19 15:39 424次阅读
    如何实现园区大屏<b class='flag-5'>可视化</b>?

    可视化系统平台介绍及优势

    可视化 系统平台是一基于维技术开发的软件系统,主要用于实现对维空间中数据、模型、场景等内容的
    的头像 发表于 06-12 16:02 619次阅读
    <b class='flag-5'>三</b>维<b class='flag-5'>可视化</b>系统平台<b class='flag-5'>介绍</b>及优势

    态势数据可视化技术有哪些

    智慧华盛恒辉态势数据可视化技术是一将数据以图形、图像、动画等视觉形式展现出来的技术,特别是在处理和分析态势数据时,该技术能够将复杂的数据转化为直观、易于理解的视觉表现。以下是态势数据可视化技术
    的头像 发表于 06-11 15:47 377次阅读

    智慧大屏是如何实现数据可视化的?

    智慧大屏,作为数据可视化的重要载体,已在城市管理、交通监控、商业运营等领域广泛应用。本文旨在阐述智慧大屏实现数据可视化的关键技术和方法,包括数据源管理、数据处理、视觉编码、用户界面与交互设计等。
    的头像 发表于 06-04 15:02 605次阅读
    智慧大屏是如何实现数据<b class='flag-5'>可视化</b>的?

    可视化数据大屏的设计原理和技巧

    可视化数据大屏设计面向交通、园区、城市、建筑、应急等领域的客户,以孪生可视能力赋能,提供行业解决方案。双渲染引擎,1:1还原真实世界,在模型运行流畅的基础上提供极佳的视觉效果。今天,古河云
    的头像 发表于 05-30 17:09 543次阅读

    可视化的优势有哪些?

    可视化 是一强大的工具,能够帮助人们更好地理解复杂数据和概念。它通过在维空间中呈现信息,使观察者能够以更直观、更深入的方式探索数据。以下是
    的头像 发表于 05-28 17:03 682次阅读
    <b class='flag-5'>三</b>维<b class='flag-5'>可视化</b>的优势有哪些?

    智慧园区可视化的重要性!

    呈现,助力企业快速完成项目的实施。古河云科技小编将从介绍、发展和应用个方面,探讨智慧园区可视化的重要性和价值。 可视化是一
    的头像 发表于 05-15 16:38 420次阅读

    可视化是怎么做的?特点有哪些?

    可视化深入我们的生活当中,它能直观并且精准的展示企业的场景情况,但是很多小伙伴并不清楚可视化是怎么做的?特点有哪些?今天,古河云科技小编就来给大家聊一聊这一问题。
    的头像 发表于 04-28 15:12 495次阅读
    <b class='flag-5'>三</b>维<b class='flag-5'>可视化</b>是怎么做的?特点有哪些?

    态势数据可视化技术有哪些

    智慧华盛恒辉态势数据可视化技术是一将复杂、动态的态势数据以直观、易于理解的方式展现出来的技术手段。以下是几种主要的态势数据可视化技术: 网络安全态势指标可视化分析系统及
    的头像 发表于 04-22 15:17 404次阅读