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. 卷积层的优势

  1. 局部感知:每个神经元仅连接输入的一个局部区域,减少参数量。

  2. 参数共享:同一滤波器在整个输入上滑动,复用参数。

  3. 平移不变性:无论特征出现在输入中的哪个位置,都能被检测到。


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×32

9. 参数设置建议

  • 滤波器尺寸:常用3×3(VGGNet证明小尺寸叠加效果优于大尺寸)。

  • 滤波器数量:逐层增加(如64→128→256),捕捉更复杂特征。

  • 步长和填充:通常步长=1,填充=1(保持尺寸);下采样时可用步长=2。


通过理解卷积层,你可以设计更高效的CNN模型,解决图像分类、目标检测等问题!如果有具体问题(如梯度计算、可视化特征图),可以进一步探讨 😊。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐