Convolutional Neural Network (CNN)
卷积神经网络(CNN)通过共享的滑动滤波器学习图像特征。介绍其层、特性、关键模型,以及 CNN 与 ViT 的比较。
卷积神经网络 (CNN) 是一种深度学习架构,它使用可学习的小型滤波器处理网格状数据,最常见的是图像;这些滤波器会在输入上滑动。每个滤波器在所有位置重复使用相同的权重,因此 CNN 能够识别图像中任意位置的边缘或车轮等模式,同时使用的参数远少于全连接网络。层层堆叠会形成特征层级:浅层提取边缘和纹理,深层则提取物体部件和完整物体。自 AlexNet 于 2012 年赢得 ImageNet 挑战赛以来,CNN 推动了大部分计算机视觉进展;如今,它们仍是边缘硬件实时视觉中最常见的选择。
CNN 的工作原理#
CNN 会分阶段重复使用几种层类型,每个阶段的分辨率都比前一个阶段低:
- 卷积层:每层都会将一组可学习的滤波器(通常为 3×3)沿输入的高和宽滑动。每个滤波器生成输出特征图的一个通道,因此包含 64 个滤波器的层会输出 64 个通道。
- 归一化和激活:批归一化会在训练期间使每层的输出保持在稳定范围内;ReLU 或 SiLU 等非线性激活函数则让堆叠的层能够表示不止一种线性变换。ReLU和 SiLU都是常见的激活函数。
- 下采样:最大池化或步幅为 2 的卷积会将高和宽减半,从而扩大后续层的感受野并减少计算量。许多现代架构主要使用步幅卷积进行下采样。
- 头部:对于图像分类,全局平均池化会将最终每个通道缩减为一个数值,全连接层再将这些数值映射为类别分数。检测和分割模型会将此头部替换为预测边界框或逐像素掩码的层。
CNN 的关键特性#
三个特性解释了为什么卷积适用于图像。局部连接意味着每个输出只取决于输入的一个小邻域,这与相邻像素之间的高度相关性相吻合。权重共享意味着一个滤波器可用于整张图像,因此无论输入大小如何,参数数量都保持不变。平移等变性意味着输入平移时特征图也会平移相同的距离,因此在一个角落学到的模式可以在任何位置识别;池化层还会进一步增强模型对小幅平移的容忍度。这些特性共同构成了 CNN 的归纳偏置,也就是让 CNN 能够用比Transformer更少的图像进行学习的内在假设。
下面的 PyTorch代码片段将卷积层与应用于同一张 224×224 RGB 图像的全连接层进行比较。
import torch
from torch import nn
image = torch.randn(1, 3, 224, 224)
# 64 learnable 3x3 filters, each reused at every position of the RGB image
conv = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, padding=1)
# A fully connected layer mapping the same flattened image to only 64 numbers
dense = nn.Linear(3 * 224 * 224, 64)
conv_params = sum(p.numel() for p in conv.parameters())
dense_params = sum(p.numel() for p in dense.parameters())
print(f"Conv2d: output {tuple(conv(image).shape)}, {conv_params:,} parameters")
print(f"Linear: output {tuple(dense(image.flatten(1)).shape)}, {dense_params:,} parameters")它会输出 Conv2d: output (1, 64, 224, 224), 1,792 parameters 和 Linear: output (1, 64), 9,633,856 parameters。通过权重共享,卷积层仅用 1,792 个参数就能生成 64 张全分辨率特征图;而全连接层需要多出 5,376 倍的参数,却只能输出 64 个数值。
CNN 代表性架构#
- LeNet-5 (1998):Yann LeCun 开发的手写数字识别网络确立了卷积层与池化层交替出现、后接全连接层的架构模式;该网络曾用于商业银行支票识别。
- AlexNet (2012):该网络使用两块 GPU 进行训练,并采用 ReLU 激活和 dropout;它以 15.3% 的 top-5 测试错误率赢得 ILSVRC 2012 挑战赛,第二名的错误率为 26.2%。
- VGG (2014):该架构证明,将小型 3×3 卷积堆叠至 16 到 19 层权重层,能显著提高 ImageNet 准确率。
- ResNet (2015):残差连接使深达 152 层的网络也能训练,ResNet 集成模型赢得了 ILSVRC 2015。
- U-Net (2015):这是一种带有跳跃连接的编码器-解码器 CNN,后来成为生物医学图像分割的标准架构。
- ConvNeXt (2022):它是在 ResNet 中融入 Transformer 时代的设计选择后形成的架构,ImageNet top-1 准确率达到 87.8%,在 COCO 检测任务上优于 Swin Transformer。
CNN 的应用场景#
- 目标检测:单阶段 CNN 检测器只需一次前向传播,就能发现并分类物体,速度足以支持摄像头、手机和嵌入式开发板上的视频处理。
- 医学图像分析:U-Net 风格的 CNN 会在 CT 和 MRI 扫描中分割器官、肿瘤和病灶,这类任务需要对每个像素进行分类。
- 姿态估计:CNN 会预测人体关键点,用于体育分析、人机工程学和健身应用。
- 图像以外的信号:一维卷积可处理音频波形和传感器时间序列,二维 CNN 则可在语音识别中对频谱图进行分类。
CNN 与视觉 Transformer 的比较#
视觉 Transformer (ViT)会将图像拆分为图块,并通过自注意力让每个图块与其他所有图块建立关联,因此从第一层起就能获得全局上下文。不过,它较弱的归纳偏置也有代价:只用 ImageNet 训练时,最初的 ViT 表现不及规模相近的 ResNet;只有先在 1,400 万到 3 亿张图像上预训练后,它才能与 ResNet 持平或胜过 ResNet。注意力的计算成本还会随图块数量的平方增长,使高分辨率输入代价高昂;卷积的成本则只随像素数量线性增长。因此,许多当前模型会将二者结合起来:在高分辨率下保留卷积阶段,并在特征图较小时加入注意力。YOLO26采用了这种模式:Conv 块(卷积、批归一化和 SiLU)与 C3k2 块承担大部分计算,多头自注意力则只作用于步幅为 32 的特征图;对于 640×640 图像,该特征图是 20×20 网格。










