Skip to content

核心网络架构基础:从视觉数据到 CNN 架构设计

计算机视觉的关键,不只是“读取像素”,而是从规则排列的视觉信号中学习局部模式、空间关系与层级语义

阅读导航

  • 视觉数据:图像如何表示为数字张量?
  • 任务目标:分类、检测、分割等任务分别输出什么?
  • MLP 困局:全连接网络为何难以高效处理高分辨率图像?
  • CNN 归纳偏置:局部连接、参数共享与层级表征如何利用图像结构?
  • 卷积计算:卷积核如何扫描图像,并生成特征图?
  • 架构设计:卷积层、激活层、下采样与分类头如何组成完整 CNN?
  • 工程配置:如何正确设置 kernel_sizestridepadding 和通道数?

⭐ 核心结论 / 面试高频

CNN 的核心价值是向模型注入适合图像的归纳偏置:利用局部连接捕捉邻域模式,利用参数共享在不同位置复用检测器,并通过多层堆叠逐步扩大感受野、组合高级语义。

1. 计算机视觉:从像素到语义

1.1 计算机视觉解决什么问题?

计算机视觉(Computer Vision,CV)研究如何让机器从图像或视频中提取有意义的信息,并完成识别、定位、理解与决策。

判断整张图像属于哪个类别,例如猫、狗或汽车。模型通常输出一个类别概率分布。

💡 通俗理解:输出粒度逐步变细

图像分类回答“画面里有什么”;目标检测继续回答“它在哪里”;图像分割则精确到“每个像素属于什么”。

1.2 图像的基本单位:像素

屏幕上看似连续、自然的画面,在计算机内部实际上由大量按网格排列的离散色块组成,这些色块称为像素(Pixel)

  • 空间位置:像素位于第几行、第几列。
  • 颜色信息:灰度图通常记录一个强度值,RGB 图像通常记录红、绿、蓝三个通道。
  • 数值范围:常见 8-bit 图像的每个通道取值为 ;输入神经网络前通常会转换为浮点数并进行归一化或标准化。

一张高为 、宽为 的灰度图可表示为矩阵:

每个位置只保存一个亮度值。

1.3 神经网络接收的是数字张量

无论输入是照片、医学影像还是视频帧,送入神经网络时都必须转换为矩阵或更高维张量。

⚡ 避坑指南:矩阵布局不能混淆

图像库常使用 ,而 PyTorch 卷积层通常要求 。若维度顺序错误,轻则形状报错,重则模型在错误的轴上学习。

2. 为什么普通 MLP 不擅长图像?

2.1 小图像尚可,高分辨率迅速失控

在 MNIST 中, 灰度图展平后只有 个输入特征。使用 MLP 配合合理的学习率、初始化、归一化和正则化,可以取得不错的识别效果。

但图像分辨率和通道数增大后,全连接层参数量会迅速膨胀。若输入维度为 、隐藏层宽度为 ,第一层参数量为:

🔍 展开查看:CIFAR-10 与 ImageNet 参数量

CIFAR-10 图像大小为 ,连接到 个隐藏单元:

仅第一层就约有 157 万个参数。

ImageNet 常见输入尺寸

仅第一层就约有 7707 万个参数。

参数量膨胀会带来:

  • 训练变慢:矩阵乘法规模显著增大。
  • 内存压力:需要保存参数、梯度与优化器状态。
  • 过拟合风险:数据有限时,大量独立参数更容易记住训练样本。

⚡ 易混淆点:MLP 并非不能处理图像

MLP 在理论上可以拟合图像任务,现代视觉模型中也存在 MLP-Mixer 等架构。问题在于朴素全连接 MLP 没有天然利用二维空间先验,往往需要更多参数、数据或专门结构设计。

2.2 更深层的原因:展平破坏了显式空间关系

图像不是一串彼此独立的数字,而是具有二维空间组织关系的数据。朴素 MLP 将图像展平后,虽然信息没有在数学上直接消失,但邻接关系不再由网络结构显式表达,模型必须从数据中重新学习这些规律。

局部相关性

边缘、角点和纹理通常由相邻像素共同构成,视觉模式首先发生在局部区域。

平移等变性

同一种边缘或纹理移动到图像其他位置后,模式本身仍然存在。理想情况下,输入发生平移,卷积特征图会发生对应平移。

⚡ 易混淆点:等变性不等于不变性

  • 平移等变:输入移动,输出特征随之移动。
  • 平移不变:输入移动,最终输出基本不变。

标准卷积主要提供近似平移等变性;池化、全局平均池化、数据增强等机制有助于获得分类所需的不变性。步幅、边界填充和下采样可能破坏严格等变性。

层次结构

视觉语义通常具有层级组合关系:像素形成边缘,边缘组合成纹理与形状,形状进一步构成部件和目标。

⭐ MLP 困局的本质

参数量只是表象。更根本的问题是朴素 MLP 没有在结构上显式编码图像的局部性、空间拓扑和平移先验

3. CNN:让网络按图像规律学习

3.1 CNN 的核心思路

卷积神经网络(Convolutional Neural Network,CNN)可以概括为:先观察局部,再通过多层组合逐渐理解整体。

  • 关注局部:用小窗口观察相邻像素。
  • 复用检测器:同一组卷积核参数扫描不同位置。
  • 保留结构:输出响应仍按照空间位置排列。
  • 逐层抽象:浅层学习局部模式,深层组合更复杂语义。

💡 通俗理解:拿着模板在图像上寻找模式

可以把卷积核想象成一个小模板。它在图像上逐格滑动,每到一个位置就比较当前局部区域与模板是否匹配,最终得到一张“哪里出现了这种模式”的响应地图。

早在 20 世纪中期,神经科学家 HubelWiesel 研究视觉皮层时发现,部分神经元会对特定方向的边缘产生强烈响应。这启发了视觉系统从局部模式逐层构建复杂表征的思路。

⚡ 历史背景不等于算法推导

生物视觉研究为局部感受野和层级处理提供了重要启发,但现代 CNN 是可训练的数学与工程模型,不能简单等同于真实生物视觉系统。

3.2 卷积操作:滑动窗口如何产生特征图

卷积核在输入上滑动。每到一个位置,就对局部像素与卷积核权重进行逐元素乘加,再加上偏置,得到一个响应值。

设输入为 ,卷积核为 ,则输出通道 在位置 的响应可写为:

其中:

  • :纵向和横向步幅(Stride)
  • :纵向和横向填充(Padding)
  • :卷积核高度和宽度。
  • :卷积核数量,也就是输出通道数。

⚡ 易混淆点:深度学习中的“卷积”通常是互相关

严格数学卷积会先翻转卷积核,而 PyTorch、TensorFlow 等框架的 Conv2d 通常直接执行互相关。因为卷积核参数是学习得到的,这个差异通常不影响模型表达能力。

3.3 响应值与特征图

  • 响应值(Activation / Response):表示某个卷积核对当前位置局部模式的线性响应。
  • 特征图(Feature Map):同一个卷积核在所有空间位置上的响应按二维坐标排列形成的结果。
  • 多通道输出:多个卷积核分别学习不同模式,生成多张特征图。

⚡ 响应高不一定能直接解释为“更像”

卷积核包含正负权重,响应值还会受到偏置、归一化和激活函数影响。“响应越高越匹配”是便于入门的直觉,严格解释需要结合完整网络和可视化方法。

3.4 为什么卷积能大幅减少参数?

卷积层参数量为:

这个参数量与输入图像的 无关,因为同一卷积核会在所有空间位置共享。

🔍 展开查看:全连接与卷积参数量对比

假设输入是 图像,并产生 组输出响应。

朴素全连接层参数量约为:

若使用 卷积核:

两者输出结构并不完全等价,但这个数量级差异清楚展示了局部连接与参数共享如何降低参数成本。

3.5 两条关键设计如何对应图像性质?

  • 每个神经元只观察 等局部窗口。
  • 单层关注局部边缘、角点或纹理。
  • 层数增加后,有效感受野逐渐扩大,局部模式可以组合成整体结构。

不同卷积核可以学习横向边缘、纵向边缘、颜色组合和纹理。随着网络加深,这些简单模式可能逐步组合为形状、部件和语义概念。

3.6 输出尺寸与感受野

卷积输出的空间尺寸为:

🔍 展开查看:感受野如何随层数增长

**感受野(Receptive Field)**表示某个特征响应能够看到的原始输入区域。

令第 层感受野为 ,相邻特征在输入上的间隔为 ,卷积核大小和步幅分别为

当所有卷积都是步幅 卷积时,堆叠 层后的理论感受野为:

因此,小卷积核也能通过多层堆叠逐渐观察更大范围,同时在层间插入非线性。

⭐ 本章总结

  1. 图像是具有空间拓扑的张量,而不是普通的一维特征列表。
  2. 朴素 MLP 的主要问题是参数量大,并且缺少适合图像的结构先验。
  3. CNN 通过局部连接、参数共享和空间特征图提高参数效率与数据效率。
  4. 卷积天然更接近平移等变,而分类所需的平移不变性还依赖下采样、聚合与数据增强。
  5. 多层卷积通过扩大感受野,将局部模式逐步组合成高级语义。

4. CNN 架构设计:从卷积块到分类器

4.1 一张完整的 CNN 由什么组成?

CNN 不是靠一层卷积直接“看懂”整张图,而是通过层层堆叠,把原始像素逐渐转换为具有判别力的语义表示。

经典 CNN 前半段常重复以下结构:

  • 卷积层:提取局部模式并改变通道数。
  • 激活函数:引入非线性,常见 ReLU、GELU、SiLU。
  • 下采样:降低空间分辨率、扩大后续特征的有效感受野;可使用池化或步幅卷积。

⚡ 易混淆点:池化不是 CNN 的必选组件

早期 CNN 常用最大池化完成下采样,现代架构也经常使用 stride=2 的卷积。是否使用池化取决于网络设计,不应把 Conv → ReLU → Pool 当成唯一模板。

4.2 卷积层的职责

**卷积层(Convolutional Layer)**在不展平图像的情况下,从局部区域提取特征,并保持输出的二维空间组织。

它使用一组可学习卷积核在输入特征图上滑动。每到一个位置,就对局部窗口与卷积核进行逐元素乘加,再叠加偏置。

一个卷积核扫描全部空间位置后会生成一张特征图;多个卷积核并行工作,就会产生多个输出通道。

⭐ 卷积层核心结论

卷积层同时决定两件事:

  1. 通过 kernel_sizestridepadding 决定如何观察空间邻域
  2. 通过 in_channelsout_channels 决定如何聚合输入通道并生成新特征通道

4.3 三个空间超参数:Kernel、Stride、Padding

卷积核大小决定单层每次观察的局部窗口,例如

  • 小卷积核参数更少,便于多层堆叠和插入非线性。
  • 大卷积核单层感受范围更大,但参数量和计算量通常更高。

卷积输出尺寸的通用公式为:

其中 是 dilation;普通卷积取

🔍 展开查看:输出尺寸计算示例

假设输入空间尺寸为 ,卷积核为 ,dilation 为

保持空间尺寸

因此输出仍为

下采样

因此输出变为

⚡ 避坑指南:same 不总等于左右对称填充

当步幅大于 、卷积核为偶数或 dilation 不为 时,为得到目标输出尺寸,边界两侧的填充量可能不同。应以框架的精确定义和输出形状为准。

4.4 多通道卷积:一个输出通道如何产生?

真实 CNN 必须同时处理空间维度和通道维度。RGB 图像的单样本输入形状通常为:

此时,一个普通二维卷积核并非简单的 ,而会覆盖全部输入通道,其形状为:

对每个空间位置,卷积核分别与全部输入通道做乘加,再沿输入通道求和,最终得到一个输出通道在该位置的一个响应值

⭐ 通道关系 / 面试高频

  • 一个普通卷积核组 聚合全部 个输入通道,产生一张特征图。
  • 设置 个卷积核组,就会产生 张特征图。
  • 完整权重张量形状为:

⚡ 易混淆点:卷积核“个数”和“深度”是两个概念

out_channels=64 表示有 个输出卷积核组;但每组都必须覆盖 个输入通道。不能只设置输出通道而忽略上一层通道数,in_channels 必须与实际输入一致。

4.5 PyTorch 配置:从需求反推 nn.Conv2d

假设输入是 RGB 图像,希望输出 个通道,卷积核为 ,并保持空间尺寸:

🔍 展开查看:`nn.Conv2d` 示例
python
import torch
import torch.nn as nn

conv = nn.Conv2d(
    in_channels=3,
    out_channels=64,
    kernel_size=3,
    stride=1,
    padding=1,
    bias=True,
)

x = torch.randn(8, 3, 32, 32)
y = conv(x)

print(y.shape)           # torch.Size([8, 64, 32, 32])
print(conv.weight.shape) # torch.Size([64, 3, 3, 3])
print(conv.bias.shape)   # torch.Size([64])

参数之间的对应关系是:

  • 输入通道数
  • 输出通道数 / 卷积核组数
  • 单组卷积核形状,即
  • 完整权重形状,即
  • 偏置形状,每个输出通道一个偏置。

4.6 参数量与计算量

普通 Conv2d 在启用偏置时的参数量为:

bias=False

对于

参数量与输入空间尺寸 无关,但计算量与输出尺寸有关。忽略偏置加法时,乘加次数近似为:

⚡ 易混淆点:参数量不变不代表计算量不变

同一卷积层可以处理不同分辨率,参数量确实不变;但分辨率越高,卷积核需要扫描的位置越多,因此激活内存和计算量会随 增长。

4.7 卷积层配置检查表

  1. 输入张量是否为
  2. in_channels 是否等于输入张量的
  3. out_channels 是否符合当前阶段所需的特征容量?
  4. stride 是否会意外过早丢失空间细节?
  5. padding 是否产生预期输出尺寸?
  6. 是否需要 bias?卷积后紧接 BatchNorm 时通常可以关闭偏置。
  7. 是否同时检查了参数量、MACs 和激活内存

⭐ 本章总结

  1. CNN 通常由特征提取器与任务头组成,不限于固定的 Conv → ReLU → Pool 模板。
  2. kernel_sizestridepadding 决定空间变换,通道参数决定特征如何混合与扩展。
  3. 普通卷积的完整权重形状是
  4. 每个输出通道由一个覆盖全部输入通道的卷积核组生成。
  5. 卷积参数量与输入高宽无关,但计算量和激活内存与输出分辨率直接相关。

Last updated: