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

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

3天内不再提示

可视化CNN和特征图

Dbwd_Imgtec 来源:未知 2023-04-12 10:25 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者:Ahzam Ejaz来源:DeepHub IMBA

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

b812dbcc-d8d8-11ed-bfe3-dac502259ad0.png

理解卷积层

1、卷积操作

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

2、卷积的层

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

3、重要参数

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

Padding:Padding是指在应用卷积操作之前在输入图像或特征映射的边界周围添加额外像素。Padding的目的是控制输出特征图的大小,保证滤波窗口能够覆盖输入图像或特征图的边缘。如果没有填充,过滤器窗口将无法覆盖输入数据的边缘,导致输出特征映射的大小减小和信息丢失。有两种类型的填充“valid”和“same”。b861014e-d8d8-11ed-bfe3-dac502259ad0.pngkernel/filter:kernel(也称为filter 或 weight )是一个可学习参数的小矩阵,用于从输入数据中提取特征。在下图中,输入图像的大小为(5,5),过滤器filter 的大小为(3,3),绿色为输入图像,黄色区域为该图像的过滤器。在输入图像上滑动滤波器,计算滤波器与输入图像的相应像素之间的点积。Padding是valid (也就是没有填充)。stride值为1。

b87fa522-d8d8-11ed-bfe3-dac502259ad0.gif

4、特征图特征图是卷积神经网络(CNN)中卷积层的输出。它们是二维数组,包含卷积滤波器从输入图像或信号中提取的特征。卷积层中特征图的数量对应于该层中使用的过滤器的数量。每个过滤器通过对输入数据应用卷积操作来生成单个特征映射。特征图的大小取决于输入数据的大小,卷积操作中使用的过滤器、填充和步幅的大小。通常,随着我们深入网络,特征图的大小会减小,而特征图的数量会增加。特征图的大小可以用以下公式计算:

	
Output_Size = (Input_Size - Filter_Size + 2 * Padding) / Stride + 1
这个公式非常重要,因为在计算输出时肯定会用到,所以一定要记住来自一个卷积层的特征映射作为网络中下一层的输入数据。随着层数的增加,网络能够学习越来越复杂和抽象的特征。通过结合来自多层的特征,网络可以识别输入数据中的复杂模式,并做出准确的预测。

特征图可视化

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

	
## Importing libraries
#Imageprocessinglibrary
importcv2
#Kerasfromtensorflow
importkeras
#InKeras,thelayersmoduleprovidesasetofpre-builtlayerclassesthatcanbeusedtoconstructneuralnetworks.
fromkerasimportlayers
#Forplotinggraphsandimages
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)#readingtheimage
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
forchannelinrange(channels):
forfilterinrange(filters_count):
        plt.subplot(filters_count, channels, index)
        plt.imshow(filters[channel, :, :, filter])
        plt.xticks([])
        plt.yticks([])
        index+=1
plt.show()
b896174e-d8d8-11ed-bfe3-dac502259ad0.png将图像输入到模型中得到特征图

	
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
 
forimage_noinrange(total_imgs):
forfeatureinrange(no_features):
#plottingfor16filtersthatproduced16featuremaps
plt.subplot(no_features,3,index)
plt.imshow(feature_map[image_no,:,:,feature],cmap="gray")
plt.xticks([])
plt.yticks([])
index+=1
plt.show()

	
		b8ddf5d2-d8d8-11ed-bfe3-dac502259ad0.png

总结

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


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

    关注

    1

    文章

    617

    浏览量

    63093

原文标题:可视化CNN和特征图

文章出处:【微信号:Imgtec,微信公众号:Imagination Tech】欢迎添加关注!文章转载请注明出处。

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    扑 HT 驱动智慧社区数字转型:多维可视化与系统集成实践

    在社区管理向数字、智能升级的浪潮中,扑软件(Hightopo)依托自主研发的HT for Web 前端可视化技术,构建起覆盖社区全场景的数字孪生智慧社区解决方案。该方案以 Web
    的头像 发表于 10-31 14:44 209次阅读
    <b class='flag-5'>图</b>扑 HT 驱动智慧社区数字<b class='flag-5'>化</b>转型:多维<b class='flag-5'>可视化</b>与系统集成实践

    工业可视化平台是什么

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

    光伏电站可视化的实现

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

    如何使用协议分析仪进行数据分析与可视化

    Wireshark + Grafana + Python)和可视化类型(如时序、地理地图、热力图),可显著提升故障定位效率、优化系统性能,并满足安全合规要求。
    发表于 07-16 14:16

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

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

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

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

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

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

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

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

    VirtualLab Fusion中的可视化设置

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

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

    特定光波导布局的光导和耦合条件。 概念 方向转换器计算器 可以通过“开始”>“计算器”找到方向转换器计算器,这有助于演示指定角度的不同方式。 k域可视化 k域可视化:平面波的传播
    发表于 02-21 08:53

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

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

    光学系统的3D可视化

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

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

    大屏数据可视化是指通过大屏幕展示大量数据和信息,以直观、可视化的方式帮助用户理解和分析数据。这种展示方式通常用于展示复杂的数据集、实时监控系统、企业管理仪表盘等。以下是关于 大屏数据可视化 的详细
    的头像 发表于 12-16 16:59 1001次阅读

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

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