可视化CNN和特征图

news/2024/11/7 20:53:45/

卷积神经网络(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 libraryimportcv2# Keras from tensorflowimportkeras# 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 imagesimportmatplotlib.pyplotaspltimportnumpyasnp

使用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 imageimg = cv2.resize(img, img_size)

我们添加2个卷积层:

 model = keras.Sequential()filters = 16model.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 = 1for 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+=1plt.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 = 1for image_no in range(total_imgs):for feature in range(no_features):# plotting for 16 filters that produced 16 feature mapsplt.subplot(no_features, 3, index)plt.imshow(feature_map[image_no, :, :, feature], cmap="gray")plt.xticks([])plt.yticks([])index+=1plt.show()

总结

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

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

作者:Ahzam Ejaz


http://www.ppmy.cn/news/40599.html

相关文章

医疗耗材缺陷视觉检测的应用

近年来,全球医疗耗材市场规模持续增长,GMP标准不断提高,用工成本不断上升。 在药品生产和包装环节,传统的人造灯检测方式已经不能满足生产自动化和质量控制的要求。 随着AI、医疗耗材缺陷视觉检测等新技术的发展和应用&#xff0c…

(十一)centos7案例实战——通过系统监控日志定制实现系统安全监控

前言 在实际的生产服务器环境中,我们常常会碰到服务器系统的安全问题,如何监控我们的服务器系统安全也是需要我们考虑的问题,由于网络攻击、恶意操作系统等等情况,我们需要查看这些历史操作,这就需要我们可以通过系统…

STM-32:USART串口协议、串口外设—数据发送/数据发送+接收

目录一、串口通信1.1通信接口1.2串口通信1.2.1简介1.2.2硬件电路1.2.3串口参数及时序二、STM32的USART外设2.1USART简介2.2USART框图三、数据传输3.1数据帧3.2输入数据策略3.2.1起始位侦测3.2.2数据采样3.3波特率发生器3.4数据模式四、实际用例4.1串口发送4.1.1接线图4.1.2程序…

在MDK5(Keil537)中同时配置STM32和C51的环境(简单可行)

1.首先安装MDK5,可以看到,安装路径为D盘下的Keil_v4Andv5文件夹,next进行安装 2.安装完成后,这一步非常重要,将TOOLS文件改名,随便改什么都行。否则下载keil4时产生的TOOL文件将会取消下载或者替换掉原文件 3.接下来下…

python通过pil模块获得图片exif信息的方法

python通过pil模块获得图片exif信息的方法 本文实例讲述了python通过pil模块获得图片exif信息的方法。分享给大家供大家参考。具体分析如下: python的pil模块功能超级强大,不但可以用来处理图片也可以用来获取图片的exif数据 from PIL import Image #cod…

MacOS IDEA无法打开报错NSInternalInconsistencyException

文章目录1.现象2.解决办法3.参考资料1.现象 今天要Coding的时候打开IDEA发现报错,无法运行,报如下错误: 忘了怎么看的了,可能是看报告?? 可以看到具体的报错信息,大概就是类似这样 2.解决办…

Pytorch自定义中心损失函数与交叉熵函数进行[手写数据集识别],并进行对比

加上中心损失函数 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision import datasets, transforms# 设置随机种子,确保实验可重复性 torch.manual_seed(42) torch.backends.cudnn.deter…

【Qt笔记】4.文本编辑的简单使用

文章目录1 概述2 QLineEdit3 QTextEdit4 QPlainTextEdit1 概述 QT中的文本编辑类常用的有三种, 1.QLineEdit:单行普通文本2.QTextEdit:多行富文本3.QPlainTextEdit:多行普通文本 富文本指的是多文本格式。可以编辑图片和媒体相…