4、深度学习基础回顾:卷积神经网络(CNN)核心概念、感受野、池化与上采样

各位同学,欢迎来到第四章。说实话,每次讲到这一章,我都觉得特别重要。因为后面我们要做的去马赛克算法,本质上就是在跟卷积神经网络打交道。你如果对CNN的理解不够深,后面那些花里胡哨的网络结构,你根本看不懂它在干嘛。

这一章,我们不搞那些虚的。直接上干货:卷积核、感受野、池化、上采样。这四个东西,是CNN的四大支柱。我当年刚入行的时候,就是靠把这四个概念吃透,才慢慢在图像处理领域站稳脚跟的。

4.1 卷积核:CNN的“眼睛”

卷积核是什么?说白了,就是一个滑动的小窗口。它在图像上滑来滑去,提取特征。

我习惯把卷积核比作“特征探测器”。比如一个3x3的卷积核,它每次只看9个像素。但它能从中发现边缘、纹理、颜色变化这些信息。

核心要点:卷积核的权重是可学习的。训练过程中,网络会自动调整这些权重,让卷积核学会检测它该检测的东西。

举个例子,一个用于检测水平边缘的卷积核,它的权重分布可能是这样的:

[[-1, -1, -1],
 [ 0,  0,  0],
 [ 1,  1,  1]]

你看,上面一行是负的,下面一行是正的。当这个核滑过一条水平边缘时,上下像素差异大,输出值就大。这就是卷积核工作的基本原理。

在实际项目中,我遇到过一个问题:卷积核大小怎么选?

  • 3x3:最常用,计算量小,堆叠多层可以扩大感受野。
  • 5x5:感受野更大,但参数多,容易过拟合。
  • 7x7:一般只在网络最开始用,后面都用小核堆叠。

我的建议:除非你有特别明确的理由,否则优先用3x3。VGGNet当年就是用一堆3x3堆出了深度,效果比用大核好得多。

4.2 感受野:网络到底看到了多大范围?

感受野这个概念,很多人一开始觉得抽象。其实很简单:输出特征图上的一个像素,对应输入图像上的多大区域?

你想想看,一个3x3的卷积核,它的感受野就是3x3。但如果你堆叠两层3x3卷积呢?

第一层:感受野3x3。
第二层:在3x3的基础上再卷积,每个输出像素能看到第一层3x3的区域。而第一层的每个像素又对应原始图像的3x3区域。所以第二层的感受野是5x5。

为什么会这样?因为第二层的卷积核,实际上是在“看”第一层特征图上的一个3x3区域,而这个区域里的每个点,又包含了原始图像3x3的信息。叠加起来,就是5x5。

感受野的计算公式:

RF_out = RF_in + (kernel_size - 1) * stride

其中RF_in是上一层的感受野,kernel_size是卷积核大小,stride是步长。

避坑指南:我曾经在一个去马赛克项目里,网络设计得太浅,感受野不够大,导致大面积的马赛克区域恢复不出来。后来加了两个卷积层,感受野翻了一倍,效果立竿见影。记住:感受野必须大于你要恢复的纹理区域大小。

下面这张图,展示了不同层数的感受野变化:

感受野随卷积层数变化示意图 输入图像 感受野: 1x1 Conv1 (3x3) 感受野: 3x3 Conv2 (3x3) 感受野: 5x5 关键规律 • 每增加一层3x3卷积,感受野增加2 • 3层3x3卷积 = 感受野7x7 • 但参数量远小于1层7x7卷积 • 这就是为什么现代CNN偏爱小核堆叠

4.3 池化:降维的艺术

池化层,说白了就是“下采样”。它的作用很明确:缩小特征图尺寸,减少计算量,同时保留最重要的特征。

最常见的两种池化方式:

池化类型 操作方式 特点 适用场景
最大池化 取窗口内最大值 保留最显著特征,对纹理敏感 分类、边缘检测
平均池化 取窗口内平均值 保留整体信息,更平滑 背景提取、全局特征

我个人习惯在去马赛克任务中,尽量少用池化。为什么?因为池化会丢失空间信息。你去马赛克,需要精确知道每个像素的位置关系。池化一下,位置信息就模糊了。

我的经验:在图像恢复任务中,如果非要用池化,优先考虑平均池化。最大池化太“暴力”,容易把一些微弱的纹理信号直接丢掉。

4.4 上采样:把图像“放大”回来

上采样是池化的逆操作。池化把图变小,上采样把图变大。在去马赛克任务中,我们经常需要把特征图恢复到原始图像尺寸。

常用的上采样方法有三种:

  1. 最近邻插值:最简单,直接复制像素。速度快,但会有锯齿。
  2. 双线性插值:用周围四个像素加权平均。平滑,但会丢失高频细节。
  3. 转置卷积:也叫反卷积。可学习的上采样,效果最好,但参数量大。

转置卷积的原理,我简单说一下:它相当于把卷积操作反过来。卷积是“多对一”,转置卷积是“一对多”。一个输入像素,通过转置卷积核,会映射到输出特征图的多个像素上。

# 转置卷积的简单实现示意
# 输入: 2x2 特征图
# 转置卷积核: 3x3, stride=2
# 输出: 5x5 特征图

# 输入特征图
input = [[1, 2],
         [3, 4]]

# 每个输入像素会生成一个3x3的块
# 这些块在输出上叠加,重叠部分相加

避坑指南:我曾经在训练一个去马赛克网络时,用了转置卷积做上采样,结果发现输出图像有“棋盘格”伪影。后来查资料才发现,这是转置卷积的固有问题——当卷积核大小不能被步长整除时,就会出现不均匀重叠。解决办法是:先用插值放大,再用普通卷积细化。这个组合拳,比单纯用转置卷积稳定得多。

4.5 本章小结:CNN四要素的关系

卷积核、感受野、池化、上采样,这四个东西不是孤立的。它们共同构成了CNN处理图像的基本流程:

  • 卷积核提取特征,感受野决定能看到多大范围。
  • 池化压缩信息,上采样恢复分辨率。
  • 在去马赛克任务中,我们通常先下采样提取深层特征,再上采样恢复到原图大小。