认识卷积过程
1. 卷积操作的核心概念
(1) 滤波器(Filter/Kernel)
作用:滤波器是一个小尺寸的矩阵(如3×3、5×5),通过在输入数据上滑动,提取局部特征(如边缘、纹理)。
原理:滤波器与输入数据的局部区域进行点积运算,生成特征图(Feature Map)。
示例:
输入:一个5×5的灰度图像(单通道)。
滤波器:3×3的矩阵(如边缘检测滤波器)。
输出:3×3的特征图(具体尺寸取决于步长和填充)。
(2) 步长(Stride)
定义:滤波器每次滑动的像素数(如步长=1或2)。
影响:步长越大,输出特征图的尺寸越小,计算速度越快,但可能丢失细节。
(3) 填充(Padding)
目的:通过在输入数据边缘补零(如补1圈0),控制输出尺寸并保留边缘信息。
常见模式:
Valid:不填充,输出尺寸变小。
Same:填充使输出尺寸与输入相同(需计算填充量)。(4) 输出尺寸计算
公式:
例如:输入7×7,滤波器3×3,步长=1,填充=1 → 输出7×7。
2. 通道卷积示例
1.单通道卷积
以单通道卷积为例,输入为(1,5,5),分别表示1个通道,宽为5,高为5。假设卷积核大小为3x3,padding=0,stride=1。
卷积过程如下:

相应的卷积核不断的在图像上进行遍历,最后得到3x3的卷积结果,结果如下:

2:多通道卷积1
以彩色图像为例,包含三个通道,分别表示RGB三原色的像素值,输入为(3,5,5),分别表示3个通道,每个通道的宽为5,高为5。假设卷积核只有1个,卷积核通道为3,每个通道的卷积核大小仍为3x3,padding=0,stride=1。
卷积过程如下,每一个通道的像素值与对应的卷积核通道的数值进行卷积,因此每一个通道会对应一个输出卷积结果,三个卷积结果对应位置累加求和,得到最终的卷积结果(这里卷积输出结果通道只有1个,因为卷积核只有1个。卷积多输出通道下面会继续讲到)。
可以这么理解:最终得到的卷积结果是原始图像各个通道上的综合信息结果。

上述过程中,每一个卷积核的通道数量,必须要求与输入通道数量一致,因为要对每一个通道的像素值要进行卷积运算,所以每一个卷积核的通道数量必须要与输入通道数量保持一致
我们把上述图像通道如果放在一块,计算原理过程还是与上面一样,堆叠后的表示如下:

3:多通道卷积2
在上面的多通道卷积1中,输出的卷积结果只有1个通道,把整个卷积的整个过程抽象表示,过程如下:

即:由于只有一个卷积核,因此卷积后只输出单通道的卷积结果(黄色的块状部分表示一个卷积核,黄色块状是由三个通道堆叠在一起表示的,每一个黄色通道与输入卷积通道分别进行卷积,也就是channel数量要保持一致,图片组这里只是堆叠放在一起表示而已)。
那么,如果要卷积后也输出多通道,增加卷积核(filers)的数量即可,示意图如下:

备注:上面的feature map的颜色,只是为了表示不同的卷积核对应的输出通道结果,不是表示对应的输出颜色
输入多通道(如RGB图像有3通道):
每个滤波器需与所有输入通道分别卷积,再将结果相加,得到一个输出通道。
多滤波器:
使用多个滤波器(如64个),生成多通道特征图(如64通道)。
3. 卷积层的参数
可学习参数数量:
![]()
例如:3×3滤波器,输入3通道,使用64个滤波器 → 参数数 = (3×3×3 +1)×64 = 28×64 = 1792。
4. 激活函数的作用
卷积后通常会接一个非线性激活函数(如ReLU),增强模型的表达能力。
例如:
特征图 = ReLU(卷积结果 + 偏置)。
5. 卷积层的优势
局部感知:每个神经元仅连接输入的一个局部区域,减少参数量。
参数共享:同一滤波器在整个输入上滑动,复用参数。
平移不变性:无论特征出现在输入中的哪个位置,都能被检测到。
6. 实际应用中的变体
1×1卷积:用于通道数调整(如降维)或跨通道信息融合(见于Inception网络)。
空洞卷积(Dilated Convolution):扩大感受野,不增加参数量(用于语义分割)。
深度可分离卷积(Depthwise Separable Conv):先逐通道卷积,再1×1卷积合并,大幅减少计算量(见于MobileNet)。
7. 现代网络中的卷积层
经典架构:
LeNet-5:首次将卷积用于手写数字识别。
AlexNet:使用ReLU和Dropout提升性能。
ResNet:残差块中包含多个卷积层,解决梯度消失。
Inception:多尺度卷积并行,提升特征多样性。
8. 代码示例(PyTorch)
import torch.nn as nn # 定义一个卷积层:输入3通道,输出64通道,3×3滤波器,步长1,填充1 conv_layer = nn.Conv2d( in_channels=3, out_channels=64, kernel_size=3, stride=1, padding=1 ) # 输入数据:batch_size=16, 3通道, 高32, 宽32 input = torch.randn(16, 3, 32, 32) output = conv_layer(input) # 输出尺寸:16×64×32×329. 参数设置建议
滤波器尺寸:常用3×3(VGGNet证明小尺寸叠加效果优于大尺寸)。
滤波器数量:逐层增加(如64→128→256),捕捉更复杂特征。
步长和填充:通常步长=1,填充=1(保持尺寸);下采样时可用步长=2。
通过理解卷积层,你可以设计更高效的CNN模型,解决图像分类、目标检测等问题!如果有具体问题(如梯度计算、可视化特征图),可以进一步探讨 😊。
更多推荐


所有评论(0)