CNN的一些可视化方法!

win10+Faster-RCNN-TensorFlow-Python3训练自己的数据集并可视化loss和p-r曲线 源码地址:https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3 解决流程 修改Faster-RCNN-TensorFlow-Python3\data/coco/PythonAPI/setup.py文件:在第15行加上 , Extension( 'lib.utils.cython_bbox', sources=['../../../lib/utils/bbox.c','../../../lib/utils/bb... 阅读详情

 Datawhale推荐 

作者:yishun@知乎,编辑:极市平台

来源丨https://zhuanlan.zhihu.com/p/53683453

导读

 

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

注:本文所有资料均来自Keras之父、Google人工智能研究员Francois Chollet的大作:《Python深度学习》,建议大家直接去看原文,这里只是结合楼主的理解做点笔记。

引言

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

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

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

  1. 可视化中间特征图。

  2. 可视化卷积核。

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

可视化中间特征图

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

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 层的过滤器模式

block2_conv1 层的过滤器模式

block3_conv1 层的过滤器模式

block4_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)

结语

本文到这里就结束了,这里再次推荐一下Francois Chollet大佬的书,写的很接地气,建议新手们都看看。

【Pytorch教程】:卷积神经网络 CNN Pytorch教程目录 Torch and Numpy 变量 (Variable) 激励函数 关系拟合(回归) 区分类型 (分类) 快速搭建法 批训练 加速神经网络训练 Optimizer优化器 卷积神经网络 CNN 目录Pytorch教程目录什么是卷积神经网络 CNN卷积 和 神经网络池化(pooling)流行的 CNN 结构CNN 卷积神经网络MNIST手写数据CNN模型训练可视化训练全部代码 什么是卷积神经网络 CNN 卷积 和 神经网络 卷积神经网络是如何运作的呢, 举一个识别图片的例子, 我们知 阅读详情

相关推荐

卷积神经网络(CNN)可视化网站汇总

汇总几个卷积神经网络(CNN)动画和可视化的网址:https://poloclub.github.io/cnn-explainer/直观的交互式工具,解释卷积神经网络的基本原理。https://playground.tensorflow.org/谷歌推出的深度学习交互式平台,虽然主要是全连接网络,但适合学习基础概念。http://cs.stanford.edu/people/karpathy/convnetjs/在线训练CNN模型,并实时可视化卷积、池化等过程。https://www.cs.ryerson.

二爷的博客 2732

【计算机视觉】如何可视化卷积神经网络的特征图(含源代码)

【计算机视觉】如何可视化卷积神经网络的特征图(含源代码)

wzk4869的博客 1万+

卷积神经网络CNN的可视化

通常我们认为深度学习模型是“黑盒”的,即模型学到的表示很难用人类可以理解的方式来提取和呈现。然而对于卷积神经网络来说却不是这样的。CNN学到的表示非常适合可视化,因为CNN本身就是视觉概念的表示。 CNN可视化和解释:【本文给出3个层面的可视化】 1)可视化卷积神经网络的中间输出(中间激活) 有助于理解卷积网络神经连续的层如何对输入进行变换,也有助于初步了解卷积神经网络每个过滤器的含义。 ...

AnneQiQi的博客 2601

卷积可视化 (超详细,多图警告!)

卷积可视化 (超详细,多图警告!)

PLANTTHESON的博客 2万+

窥探黑盒-卷积神经网络的可视化

        这是笔者第N+1次听到专家说,深度学习模型是“黑盒”。这个说法不能说他对,也不能说他错。但是这句话从专家那里说出来,感觉就有点不严谨了,想必专家应该长时间不在科研一线了...  对于某些类型的深度学习模型来说,确实通过可视化中间节点很难获取到直接判别的有效信息,但对于卷积神经网络来说,可不是这样子的。 因为卷积神经网络学习到的表示 learned representation 非常...

沈春旭的博客 1万+

CNN可视化技术总结(一)--特征图可视化

导言: 在CV很多方向所谓改进模型,改进网络,都是在按照人的主观思想在改进,常常在说CNN的本质是提取特征,但并不知道它提取了什么特征,哪些区域对于识别真正起作用,也不知道网络是根据什么得出了分类结果。 如在上次解读的一篇论文《Feature Pyramid Transformer》(简称FPT)中,作者提出背景信息对于识别目标有重要作用,因为电脑肯定是在桌上,而不是水里,大街上,背景中的键盘鼠标的存在也能辅助区分电脑与电视机,因此作者提出要使用特征金字塔融合背景信息。从人的主观判...

CV技术指南(微信公众号) 6634

CNN 的一些可视化方法!

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 推荐阅读 42个pycharm使用技巧,瞬间从黑铁变王者Google C++项目编程风格指南 ...

小白学视觉 2089

[教程]CNN图像分类识别+数据集制作+训练模型+预测图片+绘制准确率和loss曲线图

这个专栏更新各种AI,以及各种有趣的教程,有兴趣的小伙伴可以订阅一下。 首先是图片的搜集,方法无非两种 一是开源的数据集,直接拿来用,另一种就是自己搜集图片制作数据集。 这里我们可以通过爬虫,或是自己通过其他途径获取数据,我这里以水果识别为例子 爬虫搜集5种水果各若干,放在data/各个水果文件夹下。 比如草莓这个图片是这样的,我们只.

分享知识 7921

收藏 | CNN的一些可视化方法!

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达导读对神经网络进行可视化分析不管是在学习上还是实际应用上都有很重要的意义,基于此,本文介绍了3种CNN的可视化方法:...

小白学视觉 2163

【深度学习】pytorch 可视化类激活的热力图 Visualizing heatmaps of class activation

Visualizing heatmaps of class activation” 是指使用深度学习模型的中间层特征来可视化分类器对图像的响应区域,从而确定哪些区域对于特定类别的识别最为关键。在深度学习中,卷积神经网络(CNN)已被广泛用于图像分类任务。CNN在其卷积层中学习特征并将其传递到后续层进行分类。通过在CNN中添加类似于全局平均池化的降维层,可以确定每个类别对于哪些图像特征区域最为敏感。

q742971636的博客 3478

使用可视化方法理解卷积神经网络(CNN)的指南

Introduction “How did your neural network produce this result?” This question has sent many data scientists into a tizzy. It’s easy to explain how a simple neural network works, but what happens when ...

weixin_41697507的博客 2516

【深度学习】CNN的一些可视化方法!

作者:yishun@知乎,编辑:极市平台来源丨https://zhuanlan.zhihu.com/p/53683453导读对神经网络进行可视化分析不管是在学习上还是实际应用上都有很重要的意义,基于此,本文介绍了3种CNN的可视化方法:可视化中间特征图,可视化卷积核,可视化图像中类激活的热力图。每种方法均附有相关代码详解。注:本文所有资料均来自Keras之父、Google人工智能研究员Franc...

fengdu78的博客 507

避坑指南:从聚宽迁移到QMT必须知道的5个细节(含Redis连接异常处理)

本文详细解析了从聚宽迁移到QMT平台时需注意的5个关键细节,特别是Redis连接池优化和xtquant重连机制。通过实战代码示例,帮助量化团队解决信号传递稳定性、时间同步、滑点控制等核心问题,确保交易策略平稳过渡。

weixin_27303545的博客 429

CNN可视化又添新作!南大提出Group-CAM:高效的显著图生成方法

点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达作者丨孙裕道审稿丨邓富城转载自:极市平台导读该论文提出了一种高效的Saliency Map生成方法,称为组分数加权...

阿木寺的博客 1114

opencv去除印章痕迹

今天看到一个很有意思的程序,就是去除票据上的红色印章,觉得很有意思,就把它抄过来记录一下,同时自己也开了一下脑洞。 原来的程序来自:https://www.cnblogs.com/skyfsm/p/7638301.html 可以看到图像效果很不错,下面是源码实现: #include <iostream> #include <opencv2/imgproc/imgpro...

zeng_haoyu的博客 7957

.NET 8 组件之IOC容器组件

NET 8中的IOC容器组件继承了前几代的优良传统,并在性能、扩展性、灵活性等方面进行了诸多优化,使得它在现代应用开发中依然保持领先地位。通过合理使用IOC容器,开发者可以更高效地管理依赖关系,编写更加模块化、可维护的代码。随着.NET生态的不断发展,IOC容器将继续扮演关键角色,为开发者提供强大的依赖管理功能。

hy_4377的博客 1529

几个卷积神经网络(CNN)可视化的网站

这些资源可以帮助你通过动画、可视化和交互式工具更好地理解卷积神经网络的结构和工作原理。谷歌推出的深度学习交互式平台,虽然主要是全连接网络,但适合学习基础概念。OpenAI提供的神经网络特征可视化工具,展示深度网络中神经元的行为。3Blue1Brown频道的神经网络系列视频,提供精美的动画解释。一个简单的卷积神经网络可视化工具,展示每层的特征提取过程。高质量的交互式论文平台,提供深度学习的详细可视化解释。一个可以生成神经网络结构图的工具,支持卷积神经网络。直观的交互式工具,解释卷积神经网络的基本原理。

2301_76846375的博客 1万+

【FPGA的基础快速入门23--------OV5640摄像头VGA显示】

FPGA的基础学习--------OV5640摄像头VGA显示OV5640简介二级目录三级目录 OV5640简介 OV5640同OV7725一样,都是Omni Vision(豪威科技)公司生产的CMOS图像传感器。 OV5640支持更高的分辨率(500W像素)、采集速率,具有更高的图像处理性能,主要应用在手机、数码相机、电脑多媒体等领域。 OV5640支持LED补光、MIPI(移动产业处理器接口)输出接口和DVP(数字视频并行)输出接口选择、ISP(图像信号处理)以及AFC (自动聚焦控制)等功能。 OV

暮雨中的坚果的博客 7690

CNN特征提取结果可视化——hooks简单应用

本文代码地址https://github.com/njulhy/funny_code/blob/main/cnn_visualization.ipynb 文章目录CNN特征提取结果可视化——hooks简单应用Hooks简单介绍CNN特征提取的简单可视化创建CNN特征提取器创建保存hook内容的对象为卷积层注册hook读取图像并进行特整体提取查看卷积层特征提取效果查看卷积层数可视化第一个卷积层可视化第二、七个卷积层可视化第16个卷积层结语 CNN特征提取结果可视化——hooks简单应用 在神经网络搭建时可能出

路过人间,一叶知秋 1万+

【OpenCV】图像的像素直方图 图像特征点 cv::FAST cv::ORB ORB_SLAM2::ORB

文章目录图像直方图代码实现cv::FAST和cv::ORB 检测图像特征点cv::FAST和cv::ORB 检测图像特征点代码实现ORB_SLAM2::ORB和自己实现ORB图像特征点检测效果对比ORB_SLAM2::ORB和自己实现ORB图像特征点检测效果对比代码实现 图像直方图代码实现 图像是由不同数值(颜色)的像素构成的,像素值在图像中的分布情况是图像的重要属性,可以用直方图修改图像的外观,标识图像的内容,检测图像中特定的物体或纹理。 单通道灰度图像中每个像素都有一个 0(黑色)-255(白色)的整

小秋 AI SLAM 入门实战教程 2510

实战避坑:基恩士KV8000 PLC与C#上位机链路通讯全流程实现(含ST代码+上位机源码)

本文详细讲解了基恩士KV8000 PLC与C#上位机的TCP链路通讯实现,从PLC端的ST代码编写、通讯配置,到上位机的通讯类封装、界面实现,再到实战避坑和性能优化,提供了完整的可复用方案。该方案已在实际产线项目中验证,支持实时数据采集和控制指令下发,稳定性和可靠性满足工业场景需求。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1176

CNN卷积层可视化介绍

卷积神经网络(CNN)是深度学习中非常重要的模型结构,其广泛地用于图像处理,极大地提升了模型表现,推动了计算机视觉的发展和进步。但CNN是一个`黑盒模型`,人们并不知道CNN是如何获得较好表现的,由此带来了深度学习的可解释性问题。如果能理解CNN工作的方式,人们不仅能够解释所获得的结果,提升模型的鲁棒性,而且还能有针对性地改进CNN的结构以获得进一步的效果提升。

weixin_40280870的博客 2412

SolidWorks 小车底盘 装配体

通过制作小车底盘了解solidworks装配体的部分知识

及时总结 2228
上一篇: 知识点 | 全面理解支持向量机
下一篇: 深度学习: 细粒度图像分类 (fine-grained image recognition)
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值