可视化CNN和特征图

news2024/10/5 17:16:13

卷积神经网络(cnn)是一种神经网络,通常用于图像分类、目标检测和其他计算机视觉任务。CNN的关键组件之一是特征图,它是通过对图像应用卷积滤波器生成的输入图像的表示。

理解卷积层

1、卷积操作

卷积的概念是CNN操作的核心。卷积是一种数学运算,它把两个函数结合起来产生第三个函数。在cnn的上下文中,这两个函数是输入图像和滤波器,而得到的结果就是特征图。

2、卷积的层

卷积层包括在输入图像上滑动滤波器,并计算滤波器与输入图像的相应补丁之间的点积。然后将结果输出值存储在特征映射中的相应位置。通过应用多个过滤器,每个过滤器检测一个不同的特征,我们可以生成多个特征映射。

3、重要参数

Stride: Stride 是指卷积滤波器在卷积运算过程中在输入数据上移动的步长。

Padding:Padding是指在应用卷积操作之前在输入图像或特征映射的边界周围添加额外像素。

Padding的目的是控制输出特征图的大小,保证滤波窗口能够覆盖输入图像或特征图的边缘。如果没有填充,过滤器窗口将无法覆盖输入数据的边缘,导致输出特征映射的大小减小和信息丢失。有两种类型的填充“valid”和“same”。

kernel/filter :kernel(也称为filter 或 weight )是一个可学习参数的小矩阵,用于从输入数据中提取特征。

在下图中,输入图像的大小为(5,5),过滤器filter 的大小为(3,3),绿色为输入图像,黄色区域为该图像的过滤器。在输入图像上滑动滤波器,计算滤波器与输入图像的相应像素之间的点积。Padding是valid (也就是没有填充)。stride值为1。

4、特征图:

特征图是卷积神经网络(CNN)中卷积层的输出。它们是二维数组,包含卷积滤波器从输入图像或信号中提取的特征。

卷积层中特征图的数量对应于该层中使用的过滤器的数量。每个过滤器通过对输入数据应用卷积操作来生成单个特征映射。

特征图的大小取决于输入数据的大小,卷积操作中使用的过滤器、填充和步幅的大小。通常,随着我们深入网络,特征图的大小会减小,而特征图的数量会增加。特征图的大小可以用以下公式计算:

 Output_Size = (Input_Size  -  Filter_Size + 2 * Padding) / Stride + 1

这个公式非常重要,因为在计算输出时肯定会用到,所以一定要记住

来自一个卷积层的特征映射作为网络中下一层的输入数据。随着层数的增加,网络能够学习越来越复杂和抽象的特征。通过结合来自多层的特征,网络可以识别输入数据中的复杂模式,并做出准确的预测。

特征图可视化

这里我们使用TF作为框架进行演示

 ## Importing libraries
 # Image processing library
 importcv2
 # Keras from tensorflow
 importkeras
 # In Keras, the layers module provides a set of pre-built layer classes that can be used to construct neural networks.
 fromkerasimportlayers
 # For ploting graphs and images
 importmatplotlib.pyplotasplt
 importnumpyasnp

使用OpenCV导入一张图像,并将其大小调整为224 x 224像素。

 img_size = (224, 224)
 file_name = "./data/archive/flowers/iris/10802001213_7687db7f0c_c.jpg"
 img = cv2.imread(file_name)      # reading the image
 img = cv2.resize(img, img_size)

我们添加2个卷积层:

 model = keras.Sequential()
 filters = 16
 model.add(layers.Conv2D(input_shape = (224, 224, 3),filters = filters, kernel_size= 3))
 model.add(layers.Conv2D(filters = filters, kernel_size= 3))

从卷积层中获取过滤器。

 filters, bias = model.layers[0].get_weights()
 min_filter = filters.min()
 max_filter = filters.max()
 filters = (filters - min_filter) / (max_filter - min_filter)p

可视化

 figure = plt.figure(figsize= (10, 20))
 filters_count = filters.shape[-1]
 channels = filters.shape[0]
 index = 1
 for channel in range(channels):
     for filter in range(filters_count):
         plt.subplot(filters_count, channels, index)
         plt.imshow(filters[channel, :, :, filter])
         plt.xticks([])
         plt.yticks([])
         index+=1
 plt.show()

将图像输入到模型中得到特征图

 normalized_img = (img - img.min()) / (img.max() - img.min())
 normalized_img =  normalized_img.reshape(-1, 224, 224, 3)
 feature_map = model.predict(normalized_img)

特征图需要进行归一化这样才可以在matplotlib中显示

 feature_map = (feature_map - feature_map.min())/ (feature_map.max() - feature_map.min())

提取特征图并显示

 total_imgs = feature_map.shape[0]
 no_features = feature_map.shape[-1]
 fig = plt.figure(figsize=(10, 50))
 index = 1
 
 for image_no in range(total_imgs):
     for feature in range(no_features):
         # plotting for 16 filters that produced 16 feature maps
         plt.subplot(no_features, 3, index)
         plt.imshow(feature_map[image_no, :, :, feature], cmap="gray")
         plt.xticks([])
         plt.yticks([])
         index+=1
 plt.show()

总结

通过可视化CNN不同层的特征图,可以更好地理解网络在处理图像时“看到”的是什么。例如,第一层可能会学习简单的特征,如边缘和角落,而后面的层可能会学习更抽象的特征,如特定物体的存在。通过查看特征图,我们还可以识别图像中对网络决策过程重要的区域。

https://avoid.overfit.cn/post/1132e4f9872a490e95bcbd0477d38426

作者:Ahzam Ejaz

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/421271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

当深度学习遇上Web开发:Spring和OpenAI如何实现图片生成?

文章目录一、简介1. 什么是Spring和OpenAI2. 生成图像的意义和应用场景二、相关技术介绍1. 深度学习模型2. GAN模型3. TensorFlow框架四、简单的Spring应用1. 搭建Spring项目2. 添加相关依赖3. 编写简单的控制器五、OpenAI API1. 介绍OpenAI API2. 搭建OpenAI API环境3. 配置AP…

Pytorch实现GCN(基于Message Passing消息传递机制实现)

文章目录前言一、导入相关库二、加载Cora数据集三、定义GCN网络3.1 定义GCN层3.1.1 消息传递阶段(message)3.1.2 消息聚合阶段(aggregate)3.1.3 节点更新阶段(update)3.1.4 定义传播过程(propag…

AI时代来临,如何把握住文档处理及数据分析的机遇

AI时代来临,如何把握住文档处理及数据分析的机遇前言一、生成式人工智能与元宇宙二、面向图像文档的复杂结构建模研究三、大型语言模型的关键技术和实现ChatGPT 介绍ChatGPT的三个关键技术四、ChatGPT与文档处理未来总结前言 在3月18日,由中国图象图形协…

【CVPR 2023】FasterNet论文详解

论文名称:Run, Don’t Walk: Chasing Higher FLOPS for Faster Neural Networks 论文地址:https://arxiv.org/abs/2303.03667 作者发现由于效率低下的每秒浮点运算,每秒浮点运算的减少并不一定会导致类似水平的延迟减少。提出通过同时减少冗…

YOLOv2论文解读/总结

本章论文: YOLOv2论文(YOLO9000: Better, Faster, Stronger)(原文+解读/总结+翻译) 系列论文: YOLOv1论文解读/总结_yolo论文原文_耿鬼喝椰汁的博客-CSDN博客 前言 在YOLOv1推出一…

k8s 部署nginx 实现集群统一配置,自动更新nginx.conf配置文件 总结

k8s 部署nginx 实现集群统一配置,自动更新nginx.conf配置文件 总结 大纲 1 nginx镜像选择2 创建configmap保存nginx配置文件3 使用inotify监控配置文件变化4 Dockerfile创建5 调整镜像原地址使用阿里云6 创建deploy部署文件部署nginx7 测试使用nginx配置文件同步&…

ETL 与 ELT的关键区别

ETL 和 ELT 之间的主要区别在于数据转换发生的时间和地点 — 这些变化可能看起来很小,但会产生很大的影响! ETL 和 ELT 是数据团队引入、转换并最终向利益干系人公开数据的两种主要方式。它们是与现代云数据仓库和 ETL 工具的开发并行发展的流程。 在任…

来自清华的AdaSP:基于自适应稀疏成对损失的目标重识别

文章目录摘要1、简介2、相关工作3、方法3.1、稀疏成对损失3.2、最小难度的正样本挖掘4、实验4.1、与其他成对损失的比较4.2、消融研究5、结论摘要 论文链接:https://arxiv.org/abs/2303.18247 物体重识别(ReID)旨在从大型图库中找到与给定探针具有相同身份的实例。…

【分布式版本控制系统Git】| 国内代码托管中心-Gitee、自建代码托管平台-GitLab

目录 一:国内代码托管中心-码云 1. 码云创建远程库 2. IDEA 集成码云 3. 码云复制 GitHub 项目 二:自建代码托管平台-GitLab 1. GitLab 安装 2. IDEA 集成 GitLab 一:国内代码托管中心-码云 众所周知,GitHub 服务器在国外&…

Kaggle 赛题解析 | AMP 帕金森进展预测

文章目录一、前言二、比赛说明1. Evaluation2. Timeline3. Prize4. Code Requirements三、数据说明四、总结🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 竞赛题目:AMP-Parkinson’s Disease Progression Prediction 竞赛地址…

漫画:什么是快速排序算法?

这篇文章,以对话的方式,详细着讲解了快速排序以及排序排序的一些优化。 一禅:归并排序是一种基于分治思想的排序,处理的时候可以采取递归的方式来处理子问题。我弄个例子吧,好理解点。例如对于这个数组arr[] { 4&…

Python调用GPT3.5接口的最新方法

GPT3.5接口调用方法主要包括openai安装、api_requestor.py替换、接口调用、示例程序说明四个部分。 1 openai安装 Python openai库可直接通过pip install openai安装。如果已经安装openai,但是后续提示找不到ChatCompletion,那么请使用命令“pip instal…

07平衡负载:gRPC是如何进行负载均衡的?

负载均衡(Load Balance),其含义就是指将请求负载进行平衡、分摊到多个负载单元上进行运行,从而协同完成工作任务。 负载均衡的主要作用: 提升并发性能:负载均衡通过算法尽可能均匀的分配集群中各节点的工作量,以此提高集群的整体的吞吐量。 提供可伸缩性:可添加或减少服…

【react 全家桶】状态提升

本人大二学生一枚&#xff0c;热爱前端&#xff0c;欢迎来交流学习哦&#xff0c;一起来学习吧。 <专栏推荐> &#x1f525;&#xff1a;js专栏 &#x1f525;&#xff1a;vue专栏 &#x1f525;&#xff1a;react专栏 08 【状态提升】 文章目录08 【状态提升】1.介绍…

【Python实战】Python采集二手车数据——超详细讲解

前言 今天&#xff0c;我们将采集某二手车数据&#xff0c;通过这个案例&#xff0c;加深我们对xpath的理解。通过爬取数据后数据分析能够直观的看到二手车市场中某一品牌的相对数据&#xff0c;能够了解到现在的二手车市场情况&#xff0c;通过分析数据看到二手车的走势&#…

C++初阶 -1- C++入门part2-引用

文章目录6.引用什么是引用&#xff1f;引用的使用引用的应用传值、传引用效率比较权限引用和指针的区别⭐7.内联函数8.auto关键字9.基于范围的for循环10.指针空值——nullptr6.引用 什么是引用&#xff1f; “别名” int a 0; int& b 0;&#x1f446;即 地址为0x00000…

Redis7搭建主从+集群三主三从主从关系由集群分配

目录文件不清晰的去Redis7搭建主从哨兵了解 别忘记关闭防火墙 hash算法一致性 1背景–主从关系由客户端构建分配 三台虚拟机&#xff0c;一台虚拟机搭建两个redis 且两个不同的端口 第一台ip和分配两个端口 6381 6382 --- 192.168.154.128 6381 6382 第二台ip和分配两个…

分析型数据库:分布式分析型数据库

分析型数据库的另外一个发展方向就是以分布式技术来代替MPP的并行计算&#xff0c;一方面分布式技术比MPP有更好的可扩展性&#xff0c;对底层的异构软硬件支持度更好&#xff0c;可以解决MPP数据库的几个关键架构问题。本文介绍分布式分析型数据库。 — 背景介绍— 目前在分布…

人工智能前沿——「全域全知全能」人类新宇宙ChatGPT

&#x1f680;&#x1f680;&#x1f680;OpenAI聊天机器人ChatGPT——「全域全知全能」人类全宇宙大爆炸&#xff01;&#xff01;&#x1f525;&#x1f525;&#x1f525; 一、什么是ChatGPT?&#x1f340;&#x1f340; ChatGPT是生成型预训练变换模型&#xff08;Chat G…

springBoot --- mybatisPlus自动生成代码

mybatisPlus自动生成代码mybatisPlus自动生成代码pom.xmlapplication.yml自动生成代码测试主启动类生成目录结果使用插件 --- 版本要求&#xff1a;3.4.0 版本以上pom.xml更新mybatisplus插件版本mp报错‘AutoGenerator()‘ has private access in ‘com.baomidou.mybatisplus.…