"); //-->
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 import cv2 # Keras from tensorflow import keras # In Keras, the layers module provides a set of pre-built layer classes that can be used to construct neural networks. from keras import layers # For ploting graphs and images import matplotlib.pyplot as plt import numpy as np
使用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不同层的特征图,可以更好地理解网络在处理图像时“看到”的是什么。例如,第一层可能会学习简单的特征,如边缘和角落,而后面的层可能会学习更抽象的特征,如特定物体的存在。通过查看特征图,我们还可以识别图像中对网络决策过程重要的区域。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
WTC-AI太阳能热水器电路图
瑞萨电子AI单元解决方案成功提高GE医疗(日本)日野工厂的生产力
iCAN-4017 AI功能模块
继上次海联达Ai-ap100拆机之电源改造
CSR8670CSR8675智能语音Alexa蓝牙方案开发
AI/HPC新世代 COUPE光互连扮要角
AI聊天机器人能像医生一样推理吗?
EEPW2018年6月刊(5G)
万家乐JSYZ5-AI燃气热水器电路图
释说芯语16:硬科技:构建企业未来之路(附PPT)
电子元件培训教材
PowiGaN for AI Data Centers: Unmatched Power Density and Reliability
WTC-AI型太阳能热水器电路图
基于Microchip MCU的AI/ML培训教程3
前Qwen负责人林俊旸创业,目标融资规模为数亿美元
国家“算力网”:像用水用电一样用AI
基于Microchip MCU的AI/ML培训教程2
存储器转型AI战略资源 台厂受惠
基于Microchip MCU的AI/ML培训教程1
基于Ai-WB2-12F与Rd-04的雷达检测系统
人工智能是如何帮助阻止造假者的?
思科凭借通用商用芯片与光模块赢得 AI 领域客户
尼吉康的事业介绍
基于VisitionX制造智能眼镜
研华科技与Axelera AI深化战略合作 加速推动基于Europa平台的边缘AI创新
联发科加速AI在地化应用布局
海联达(Aigale)Ai-HD1 无线全高清套件拆解
被动元件新周期:AI时代高端化、服务器化重构MLCC产业格局
EEPW2018年3月刊(工业物联网)
重新构想AI电源:塑造AI加速的未来(第三部分)