卷积神经网络整体架构
总结
- 输入层:原始数据(图像)
- 例如可以输入一张RGB图像,其可以标示为一个三维矩阵,宽W高H和通道数C=3对应着RGB
- 卷积层:提取局部特征,变换输入数据为丰富的特征图
- 网络使用多个卷积核(滤波器)在输入图像上进行卷积操作。每个卷积核会在图像上滑动,通过点积运算提取局部特征(如边缘、角点、纹理等)
- 经过第一层卷积后,得到的输出特征通常仍是二维布局,但通道数可能增加(因为多个卷积核的存在),且特征图的宽高可能比原图略小(取决于卷积核大小、步幅和填充策略)
- 类似于多个专家针对一个文物不同角度的分析,每个专家就代表一个卷积核,每个卷积核都会得到针对性的特征总结
- 池化层:下采样,减少数据维度和过拟合风险,保留主要特征
- 通过池化操作,可以大幅降低特征图的空间维度(宽和高的大小)从而减少参数量和计算量
- 池化还具有一定的平移不变性作用,即即使图像有小幅度的位移,池化后的特征仍较为稳定
- 池化层就像缩小图片的分辨率,虽然丢失了一些细节,但是保留了整体的轮廓和主要特征
- 重复多个卷积+池化模块:逐层提取更高级、更抽象的特征
- 一个CNN会多次重复“卷积层 + 激活函数(如ReLU) + 池化层”的组合
- 前面的卷积层可能提取一些低级特征(如边缘、线条),后面的卷积层则在这些低级特征的基础上提取更高级的特征(如特定形状、局部纹理、物体部分的组合);随着不断的深入,特征数会越来越多,从而实现了对原始数据的多层抽象
- 最初你在一幅复杂的画中仅识别出一些简单的线条和轮廓(低级特征),接着通过进一步分析这些线条组合成小的形状或局部结构(中级特征),最终再将这些局部结构组合成特定物体的轮廓或类别特征(高级特征)
- 全连接层:将抽象的高级特征映射到输出空间(比如分类类别)
- 当特征图被压缩到足够小的空间尺寸后(例如变为几行几列但有较多特征通道),会将其“铺平”(flatten)成一维向量,再输入到全连接层进行分类或回归任务
- 经过多层的特征提取后,你手头有一组有用的高层特征,这些特征就像一个描述物体特性的列表。全连接层相当于一位专家评审,根据特征的分布和数值,对物体进行最终的类别判断
- 输出层:输出预测结果(如类别概率分布)
- 最后的输出层(例如使用Softmax激活)会根据前面层提取的高层次特征,给出最终的分类结果或回归结果
- 输出层就像是评委宣布最终判决的时刻,根据前面提供的所有证据(特征)最终下结论,这个图像中到底是什么物体
卷积层
主要步骤
- 卷积核扫描输入数据:通过滑动窗口方式,将卷积核与输入数据的局部区域进行元素级别的乘积和求和,提取局部特征
- 加偏置:在卷积结果上添加偏置项,调整特征的整体水平
- 应用激活函数:通过非线性激活函数(如 ReLU)增强模型的表达能力,允许网络学习复杂的模式
- 生成输出特征图:每个卷积核生成一个特征图,多个卷积核共同提取输入数据的多种特征
输出的特征图就相当于通过不同颜色的筛选器观察图纸,从而得到了不同视角或者不同特征的图像个,每一个筛选器捕捉到图纸不同特征
卷积核
什么是卷积核
卷积核是一个小尺寸的矩阵(通常为3x3、5x5等),其参数在训练过程中通过反向传播算法学习得到。每个卷积核负责提取输入数据的某种特定特征,如边缘、纹理等
这个就类似于通过小窗口扫描大图纸,窗口中有不同颜色的燃料。每当窗口覆盖某一部分图纸时,你根据涂料的颜色组合来识别该部分是否存在特定的图案(如边缘)。不同的涂料组合(卷积核)能够检测到不同的图案特征
运算过程了解
假设输入数据为一个二维图像,尺寸为 H×W,卷积核尺寸为K×K,其中(i,j) 是输出特征图的位置,m,n 是卷积核的索引
加偏置
加偏置的原因
与全连接神经网络类似,偏置项 bbb 是一个常数,添加到卷积结果中,用于调整输出的整体水平。它允许模型在没有任何激活时输出非零值,增强模型的表达能力
同上面小窗口扫描大图纸的事例,偏置项就是在识别图案的时候添加的背景光亮度,无论窗口的图案如何,背景光亮度的调整都可以帮助我们更好的识别图案
步幅
含义
含义
步幅指的是卷积核在输入数据上每次滑动的像素数
在二维卷积中,步幅通常用两个值表示,分别对应垂直和水平方向的滑动步伐;多数情况下步幅在两个方向上是相同的
步幅决定了卷积核扫描输入数据时的步伐大小,进而影响输出特征图的尺寸
较大的步幅会减少特征图的尺寸,从而降低计算量;较小的步幅则会生成更大尺寸的特征图,保留更多的空间信息
理解
步幅就类似于平时阅读的时候,每次翻页时候移动的行数,加入每页都有固定数量的行
- 步幅为1:每次翻页的时候只移动一行,也就相当于详细阅读每一行的内容,此时不会遗漏任何信息
- 步幅为2:每次翻页的时候移动两行,相当于快速浏览文章中的内容
- 步幅为3:每次翻页的时候移动三行,更加快读的浏览文章内容
优缺点
优点
- 控制特征图尺寸:通过调整步幅,可以有效控制特征图的尺寸,进而影响后续层的计算量和参数数量
- 降低计算量:较大的步幅减少了特征图的尺寸,从而降低了计算复杂度,适用于需要快速处理的任务
- 抽取更大范围的特征:较大的步幅覆盖了更大范围的输入,有助于捕捉更全局的特征信息
缺点
- 信息丢失:较大的步幅可能导致特征图中某些重要信息被跳过,影响模型的性能,尤其是在需要细粒度特征的任务中
- 特征不连续:步幅过大可能导致特征图中的特征不够连续,影响后续层对特征的理解和利用
实际应用场景
图像分类
在图像分类任务中,通常需要逐步提取高层次的特征。通过在早期卷积层使用较小的步幅),保留更多的空间信息;在后期卷积层使用较大的步幅,实现特征图的下采样,减少计算量
目标检测
目标检测需要在特征图中定位目标的位置。较小的步幅有助于保持特征图的高分辨率,提供更精确的定位信息
语义分割
语义分割要求对每个像素进行分类,因此需要高分辨率的特征图。通常在网络中使用较小的步幅,结合上采样(如反卷积、上采样层)来恢复特征图的空间尺寸
填充
含义
如果输入的数据没有经过卷积核,那么最后输出的图像尺寸会越来越小,填充存在的目的就是为了控制输出尺寸或者保持输入尺寸
填充的几种方式
- 零填充(Zero Padding):在输入的边缘填充零值
- 镜像填充(Reflection Padding):使用输入边缘的镜像像素进行填充
- 常数填充(Constant Padding):填充特定的常数值
作用
控制输出尺寸
不使用填充时,卷积操作会逐步减少特征图的尺寸。通过填充可以控制最后输出特征图的尺寸不变
保留边缘信息
在没有填充的情况下,卷积核无法完全覆盖输入的边缘像素,导致边缘信息在特征提取过程中可能被忽略或丢失。通过填充,可以确保边缘像素也参与到卷积运算中,从而更好地保留图像的边缘信息
就像用刷子涂色。如果不在画布边缘留出足够的空间,刷子靠近边缘时,颜色可能无法均匀涂抹。通过在画布周围预留空间(填充),你可以更好地控制边缘部分的涂色效果
允许更深的网络结构
填充可以帮助保持特征图的尺寸,允许网络增加更多的卷积层而不会导致特征图过早地缩小。这对于构建深层网络,提高模型的表达能力非常重要
计算输出特征图(重点)
基本公式
具体计算
公式
- 填充:P=0
- 步幅:S=2
结果
多通道卷积计算(重点)
单个计算理解
首先分析输入特征图
- 输入的特征图是三维的,例如是一个普通的彩色图像
- 宽W高H是其二维尺寸
- 深度C则表示图像的通道数,例如在该处表示一个RGB彩色图像
卷积核(w)的尺寸与深度匹配
- 卷积核高度为FH宽度FW,与输入图像的平面区域相对应,参考上面一节二维特征图
- 卷积核的深度与输入的深度C相同,其表示每个通道上对应的权重
- 运算时,卷积核会在输入特征图的平面上“滑动”,但其深度方向与输入完全对齐,从而能与输入的每个通道进行加权求和
多通道输入 映射为单通道输出特征图
- 当一个卷积核与输入特征图在某一个位置对齐的时候,它会对该位置下输入特征图的三个维度进行数值加权求和
- 最终产生的输出是一个单一数值
- 将卷积核在输入特征图上“滑动”所有可能的位置,就会得到一个二维的输出特征图 OH×OW
多个卷积核
- 右侧FN表示不同管卷积核,每个卷积核都会生成一个输出特征图
- 将这些输出特征图叠加在一起就形成了一个OH * OW * FN的输出特征图集合
- 简而言之,每个卷积核相当于一个“特征提取器”,多个卷积核同时工作,就能抽取到多维度、多层次的特征,形成输出特征图的多个通道
卷积核的分析范围
刚开始认为一个卷积核只是用来分析图像某个部分,但是后来发现,其一个卷积核是一个可在输入图像上移动的小窗口
一般所说的卷积就是卷积核,卷积核从图像的左上角开始,对应输入图像的一个局部区域进行像素级相乘相加操作,然后得到一个输出数值,形成输出特征图的一个像素点
接着,卷积核以一定的步幅(stride)向右移动,重复相同操作,对图像的下一个局部区域进行处理。等到这一行走到尽头,再往下移动一行,如同阅读英文文字一样从上到下、从左到右进行扫描。这样,一个卷积核会在图像的每个局部位置都执行相同的过滤操作
最终,一个卷积核生成的输出特征图代表了该卷积核在整个图像上提取到的某种特定特征(例如特定方向的边缘、某种纹理图案等)
综上理解,一个卷积核不是只分析某个角落的图像,而是通过在图像各位置滑动来对整个图像进行“同类型特征”的搜索与分析
多个卷积核叠加的含义
多个卷积核的输出叠加不是简单的不同部分拼接,而是对整个图像从不同维度进行分析结果合集
简单来说,针对于一件艺术品,每个卷积核就像一个鉴宝专家,每个专家的鉴别角度不同,最后多个专家综合判断给出最终的综合评价
每一个卷积核都对整个输入图像进行扫描,只是每个卷积核因为权重(参数)不同,对图像的敏感模式也不同。有的卷积核可能对水平边缘更敏感,有的对垂直边缘,有的对颜色变化,有的对特定纹理
当我们将多个卷积核的输出特征图整合起来,就相当于为原始图像创建了一个更丰富的描述方式。这些叠在一起的特征图(多通道输出)是对原始输入的一种高层次表征,它们提取了输入中各种潜在有用的模式
与原始图像相比,这些特征图并非简单重复输入信息,而是对输入信息进行了加权、提取和转换,是输入图像在“特征空间”中的映射,更利于后续分类、检测或识别任务
卷积核中的权重与通道数
理解
想象你有红、绿、蓝三块透明滤镜(表示输入的三个通道),叠放在一起形成一个区域的颜色特征。卷积核的三个通道权重就像三个可调节的旋钮,当你在这个区域观看时,通过调节这三个旋钮(权重),你可以强化对红色信息的关注,弱化对蓝色信息的关注,或平衡三种颜色的比例
自动找到最有利于识别特定模式的权重组合。最终输出的数值不再是简单的RGB颜色值,而是某种代表特征是否存在的“强度数值”
分析
C对应的是输入数据的通道数,权重则是学习得到的参数
如果输入是RGB图像,那么输入的深度C=3。卷积核的深度方向与输入匹配,也为3。这意味着卷积核中有3个对应通道的滤波器片(对R通道一个,对G通道一个,对B通道一个),这个可以结合上述事例中的旋钮进行理解
每个通道的权重(滤波器参数)是通过训练学习得到的数字,这些数字并不直接代表颜色或亮度,而是模型根据大量数据训练后得出的最优参数,用以提取对任务有用的特征
当卷积核与输入数据在某个位置对齐时,它会对R通道像素乘以R通道权重,对G通道像素乘以G通道权重,对B通道像素乘以B通道权重,然后将这些加起来
这个加权求和过程相当于对每个通道的信息进行加权整合。最终,这个合成值反映了该卷积核在这个位置是否检测到它所“关注”的特定模式(特征)
池化层
池化(Pooling)层通常会对输入特征图进行下采样(subsampling),通过在局部区域(例如2x2的窗口)上选取最大值(Max Pooling)或平均值(Average Pooling),从而减小特征图的大小,同时保留重要特征信息
最大池化计算
平均池化运算
池化后的特征图分析
- 4x4的特征图,用2x2的窗口去池化,并且每次移动步幅为2
- 第一次池化在左上角的2x2区域中取值(无论是最大池化或平均池化),得到一个数值,这会成为输出特征图的(1,1)位置
- 向右移动2个像素,对右上2x2区域进行池化,得到输出特征图的(1,2)位置
- 往下移动2个像素再进行同样的操作两次,就得到了输出特征图的第二行
2x2的窗口在4x4的图上移动两次(横纵各两次),自然输出就变成2x2
部分图片以及资料来源:B站UP“炮哥带你学”