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

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

3天内不再提示

可视化CNN和特征图

颖脉Imgtec 2023-04-19 10:33 次阅读

作者:Ahzam Ejaz来源:DeepHub IMBA


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

7544889c-da9d-11ed-ad0d-dac502259ad0.png


理解卷积层

1、卷积操作

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

2、卷积的层

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

3、重要参数

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

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

758e6bba-da9d-11ed-ad0d-dac502259ad0.gif

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

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

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


特征图可视化

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

## Importing libraries#Imageprocessinglibraryimportcv2#Kerasfromtensorflowimportkeras#InKeras,thelayersmoduleprovidesasetofpre-builtlayerclassesthatcanbeusedtoconstructneuralnetworks.fromkerasimportlayers#Forplotinggraphsandimagesimportmatplotlib.pyplotaspltimportnumpyasnp

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

img_size=(224,224)file_name="./data/archive/flowers/iris/10802001213_7687db7f0c_c.jpg"img=cv2.imread(file_name) #readingtheimageimg=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=1forchannelinrange(channels):forfilterinrange(filters_count): plt.subplot(filters_count, channels, index) plt.imshow(filters[channel, :, :, filter]) plt.xticks([]) plt.yticks([]) index+=1plt.show()

75a017ca-da9d-11ed-ad0d-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):#plottingfor16filtersthatproduced16featuremapsplt.subplot(no_features,3,index)plt.imshow(feature_map[image_no,:,:,feature],cmap="gray")plt.xticks([])plt.yticks([])index+=1plt.show()

75beca4e-da9d-11ed-ad0d-dac502259ad0.png


总结

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

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

    关注

    42

    文章

    4572

    浏览量

    98748
  • cnn
    cnn
    +关注

    关注

    3

    文章

    327

    浏览量

    21298
收藏 人收藏

    评论

    相关推荐

    数据可视化在大数据时代有哪些挑战?#可视化 #光点科技

    数据可视化
    光点科技
    发布于 :2023年10月17日 17:02:01

    如何在数据可视化中保护数据隐私?#可视化 #光点科技

    数据可视化
    光点科技
    发布于 :2023年10月16日 09:39:18

    数据可视化的应用有哪些?#可视化 #光点科技

    数据可视化
    光点科技
    发布于 :2023年10月13日 09:19:27

    什么是交互式可视化?#可视化 #光点科技

    可视化
    光点科技
    发布于 :2023年10月12日 17:47:54

    数据可视化有哪些常见的图表类型?#可视化 #光点科技

    数据可视化
    光点科技
    发布于 :2023年10月11日 09:30:39

    数据可视化的发展趋势是什么?#可视化 #光点科技

    数据可视化
    光点科技
    发布于 :2023年10月10日 09:31:59

    如何避免数据可视化中的误导和误解?#可视化 #光点科技

    数据可视化
    光点科技
    发布于 :2023年10月09日 17:23:51

    基于Arduino做个音乐可视化LED灯带

    基于Arduino做个音乐可视化LED灯带,快来探索用了什么原理和材料!结合提供的简单代码,软硬件结合,你也可以在音乐中成为最靓的仔!
    发表于 09-27 08:08

    数据可视化的未来发展趋势是什么?#可视化 #数据可视化 #光点科技

    数据可视化
    光点科技
    发布于 :2023年09月25日 18:29:24

    数据可视化有什么优势?#可视化 #数据可视化 #光点科技

    数据可视化
    光点科技
    发布于 :2023年09月25日 09:50:22

    如何设计有效的数据可视化?#可视化 #光点科技

    数据可视化
    光点科技
    发布于 :2023年09月22日 09:25:51

    什么是数据可视化?如何进行数据可视化?#可视化 #光点科技

    数据可视化
    光点科技
    发布于 :2023年09月20日 17:41:03

    可视化大屏设计模板 | 主题皮肤(报表UI设计)

    下载使用可视化大屏设计模板,减少重复性操作,提高报表制作效率的同时也确保了报表风格一致,凸显关键数据信息。 软件:奥威BI系统,又称奥威BI数据可视化工具 所属功能板块:主题皮肤上传下载(数据可视化
    发表于 09-12 10:10

    SpeedBI数据可视化工具:浏览器上做分析

    的数据源,如数据库、Excel、CSV等,从而满足不同用户的需求。 数据可视化图表多 SpeedBI数据分析云是一款数据可视化工具,提供包括折线图、树、机器状态、仪表盘等在内的数十
    发表于 08-22 10:55

    keras可视化介绍

    keras可视化可以帮助我们直观的查看所搭建的模型拓扑结构,以及模型的训练的过程,方便我们优化模型。 模型可视化又分为模型拓扑结构可视化以及训练过程可视化。 以上一讲的mnist为例,
    发表于 08-18 07:53