← 返回笔记列表
深度学习 第 29 / 49 篇

深度学习:卷积操作 — 用小卷积核在整张图上滑动提取特征

查看“深度学习”专题目录(29/49)
本文目录 16 个小节

1. 卷积运算过程

1.1 输入与参数

1003.png

概念说明
输入6×6×1 黑白图(H×W×C)
卷积核3×3 的权重矩阵,共 9 个参数
偏置 b1 个参数
Filter(过滤器)卷积核 + 偏置 = 10 个参数

1.2 滑动扫描

卷积核从图像左上角开始,从上到下、从左到右,每次与一个 3×3 的局部区域做运算:

z=∑i,j(像素ij×卷积核ij)+b\text{z} = \sum_{i,j} (\text{像素}_{ij} \times \text{卷积核}_{ij}) + b a=激活函数(z)\text{a} = \text{激活函数}(z)

每个 a 值成为新”特征图”上的一个”像素”,代表原图那个位置是否有某个特征(如猫的眼睛)。

1004.png

扫描时每次移动的像素数称为 步长(stride),步长=1 即每次右移/下移 1 个像素。

1.3 输出特征图

6×6 的图用 3×3 卷积核扫描完 → 得到一张新的特征图(这里尺寸也较小了,取决于 padding,后文会讲)。

1006.png


2. 卷积操作完美解决了视觉的三个痛点

痛点卷积如何解决
输入特征多一个 3×3 卷积核只有 10 个参数,不随图片增大而增加
局部性每次只在 3×3 的小窗口内运算
平移等变性共享卷积核使输入平移时特征响应相应平移;边界、步长与填充会影响这种性质

3. 卷积 = 带先验知识的参数共享全连接层

卷积和全连接没有本质不同:

一个 3×3 卷积操作 = 一个只连接 9 个局部输入的神经元,有 9 个 weight + 1 个 bias。这个神经元用同样的参数,在输入特征图的每个 3×3 区域上各计算一次,形成输出特征图。

1007.png

所以卷积可以理解为给全连接层加了两个先验知识:局部连接 + 参数共享。


4. 多通道卷积

4.1 RGB 输入怎么办

输入是三通道的(如 6×6×3),卷积核也必须是三通道的(3×3×3)。

1008.png

计算过程:

  1. 三个通道分别与对应的卷积核通道做卷积
  2. 三个通道的结果相加
  3. 加上一个偏置 b
  4. 过激活函数
# 伪代码:多通道卷积
z = (R通道像素 · R通道卷积核).sum()
  + (G通道像素 · G通道卷积核).sum()
  + (B通道像素 · B通道卷积核).sum()
  + b
输入通道数卷积核通道数偏置个数总参数输出通道数
111101
33128 (3×3×3+1)1

5. 多 Filter — 同时检测多种特征

一个卷积核只能检测一种特征(如猫的眼睛)。要同时检测眼睛、耳朵、嘴巴、鼻子,需要多个 Filter。

1009.png

  • 1 个 Filter = 1 个卷积核 + 1 个偏置 → 输出 1 个通道
  • M 个 Filter → 输出 M 个通道
输入: 6×6×3 (H×W×C_in)
卷积层: 定义 2 个 Filter,每个 Filter 的卷积核为 3×3×3
输出: 4×4×2 (H'×W'×C_out = 2)

关键:C_out = Filter 个数,C_in = 输入通道数
      每个 Filter 的卷积核通道数必须 = C_in

6. 堆叠多个卷积层

和深度神经网络一样,卷积层也可以堆叠:

原始图像(RGB, 3通道)
    ↓ 第 1 个卷积层(M₁ 个 Filter)→ 检测点、线、纹理等低级特征
特征图 1(M₁ 通道)
    ↓ 第 2 个卷积层(M₂ 个 Filter)→ 在低级特征上检测眼睛、鼻子等高级特征
特征图 2(M₂ 通道)
    ↓ ...
  • 每一层的输入通道数 = 上一层输出通道数
  • 每个 Filter 的卷积核通道数 必须 = 输入特征图的通道数
  • 浅层检测低级特征(边缘、纹理),深层组合出高级特征(器官、物体)

7. 直观理解:卷积核是”特征探测器”

7.1 竖条纹检测器

一张 3×3 图片,右侧一列亮于左侧:

[50, 50, 100]
[50, 50, 100]
[50, 50, 100]

卷积核:[[-1, 0, 1], [-1, 0, 1], [-1, 0, 1]]

计算输出 = 150(数值大 → 检测到竖条纹)。

7.2 同样的卷积核遇到纯色块

[50, 50, 50]
[50, 50, 50]
[50, 50, 50]

计算输出 = 0(没有竖条纹)。

7.3 同样的卷积核遇到横条纹

[50, 50, 50]
[50, 50, 50]
[100, 100, 100]

计算输出 = 0(没有竖条纹)。

卷积核 C1 就是一个竖条纹检测器。同理可以设计横条纹检测器、斜条纹检测器。

训练时不需要手动设计——网络会自动学到最合适的卷积核权重。


8. PyTorch 中的格式:CHW vs HWC

框架格式示例形状
本文HWC(高×宽×通道)[224, 112, 3]
PyTorchCHW(通道×高×宽)[3, 224, 112]

调试 PyTorch 代码时注意这个差异。


9. 总结

卷积操作 = 小窗口 + 滑动 + 参数共享

一个 Filter 做的事:
  z = 像素 · 卷积核 + b  (局部加权求和)
  a = 激活(z)             (过一个非线性)
  → 一个输出特征图上的"像素"

多通道输入 → 卷积核有相同通道数
多 Filter  → 输出通道数 = Filter 个数
多层堆叠   → 从低级特征提取到高级特征

一个 3×3 卷积核只有 10 个参数,就能在任意大的图上提取特征。
关键是:局部连接 + 参数共享带来的平移等变性。
继续学习本专题