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

    文章

    4829

    浏览量

    106824
  • 深度学习
    +关注

    关注

    73

    文章

    5591

    浏览量

    123921

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    工业可视化平台是什么

    工业可视化平台是一基于信息技术和可视化技术,将工业生产过程中的数据、信息、流程等以直观、动态的图形方式呈现,并实现交互式管理与分析的数字化工具。它通过整合工业物联网(IIoT)、大
    的头像 发表于 10-24 18:00 843次阅读

    光伏电站可视化的实现

    实现光伏电站可视化,核心是在于通过直观的视觉界面,解决传统运维中低效巡检、数据孤岛、被动响应等痛点,从而提升运营效率并提供决策支持。这是一有效的技术手段,通过数字孪生、维建模、数
    的头像 发表于 10-21 17:29 872次阅读
    光伏电站<b class='flag-5'>可视化</b>的实现

    VirtualLab:光学系统的可视化

    摘要 为了对光学系统的性质有一个基本的了解,对其组件的可视化和光传播的提示是非常有帮助的。为此,VirtualLab Fusion提供了一个工具来显示光学系统的维视图。这些工具可以进一步用于检查
    发表于 05-30 08:45

    工业设备数据集中监控可视化管理平台是什么

    工业设备数据集中监控可视化管理平台是一用于整合、监控和可视化工业设备数据的综合性系统,旨在帮助企业实现设备数据的集中管理、实时监控和可视化展示,从而提升生产效率、优化设备运行状态并支
    的头像 发表于 05-06 11:10 837次阅读

    VirtualLab Fusion应用:3D系统可视化

    描述和F-Theta透镜的应用示例。 光学系统的3D-可视化 VirtualLab Fusion提供的工具可以实现光学系统的3D可视化,因此可以用于检查元件的位置,以及快速了解系统内部的光传播情况
    发表于 04-30 08:47

    可视化组态物联网平台是什么

    可视化组态物联网平台是物联网技术与组态技术相结合的产物,是通过提供丰富的图形组件和可视化元素,让用户能够以直观、便捷的方式对物联网数据进行监控、分析和管理的平台。以下是其具体介绍
    的头像 发表于 04-21 10:40 702次阅读

    可视化组态数据管理平台是什么

    可视化组态数据管理平台是一用于工业自动、物联网、能源管理等领域的软件平台,它结合了可视化和组态技术,帮助用户实现数据的采集、管理、展示和分析。以下是其具体
    的头像 发表于 04-21 10:00 604次阅读

    VirtualLab Fusion应用:光学系统的3D可视化

    摘要 为了从根本上了解光学系统的特性,对其组件进行可视化并显示光的传播情况大有帮助。为此,VirtualLab Fusion 提供了显示光学系统可视化的工具。这些工具还可用于检查元件和探测器
    发表于 04-02 08:42

    可视化数据大屏:连线构建视觉新秩序 #数据可视化 #可视化大屏

    可视化
    阿梨是苹果
    发布于 :2025年03月18日 16:12:04

    VirtualLab Fusion中的可视化设置

    摘要 VirtualLab Fusion中的全局选项对话框可以轻松定制软件的外观和感觉。还可以保存和加载全局选项文件,以便可以轻松地将偏好设置从一个设备转移到另一个设备。本文档说明了与可视化和结果
    发表于 02-25 08:51

    VirtualLab Fusion应用:光波导k域布局可视化(“神奇的圆环”)

    ,光可以在TIR(全反射)作用下传播,并与光导表面上不同类型的光栅结构相结合,以耦合光进出。在VirtualLab Fusion中,k-Layout可视化工具提供了一在k域中强大的图解方法,用于分析
    发表于 02-21 08:53

    七款经久不衰的数据可视化工具!

    数据量的激增,单纯通过数字和文本来分析数据已不再高效。数据可视化则提供了一直观、互动性强的方式,帮助人们通过视觉元素,如柱状图、折线图、饼图、热力图等图表形式,理解复杂的数据关系。 二、数据可视化
    发表于 01-19 15:24

    光学系统的3D可视化

    **摘要 ** 为了从根本上了解光学系统的特性,对其组件进行可视化并显示光的传播情况大有帮助。为此,VirtualLab Fusion 提供了显示光学系统可视化的工具。这些工具还可用于检查元件
    发表于 01-06 08:53

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

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

    如何找到适合的大屏数据可视化系统

    选择合适的大屏数据可视化系统是企业或组织在数字转型过程中至关重要的一步。一个优秀的大屏数据可视化系统能够实时呈现关键业务数据,提升决策效率,同时提供直观、易于理解的视觉呈现,助力企业洞察数据背后
    的头像 发表于 12-13 15:47 810次阅读