CNN 主线
本页梳理卷积神经网络(CNN)经典分类架构的主线里程碑。CNN 是深度学习三大架构族之一(见 深度学习概览),专为网格状数据(图像)设计。目标检测(目标检测与 YOLO)与图像分割(图像分割)等下游任务都建立在这些骨干架构之上。
CNN 的核心思想:不要让每个神经元都看整张图,而是用小窗口逐块扫描。
想象你拿一个 3×3 的小放大镜在图片上从左到右、从上到下滑动——每到一个位置,就计算”这个小区域和放大镜里的模式有多匹配”。这个放大镜就是卷积核(filter / kernel)——一个由可学习权重组成的小矩阵,相当于一个可在整张图上复用的”特征探测器”。
- 卷积核 = 特征探测器:一个核负责检测”竖线”,另一个检测”横线”,还有一个检测”拐角”。一整层有几十上百个核,各自检测不同特征。
- 逐层抽象:浅层检测简单边缘 → 中层组合成纹理、部件 → 深层拼出完整物体。就像人眼从像素到笔画到字到句的逐层理解。
- 参数共享:同一个核在整张图上反复使用——不管”猫耳朵”出现在左上角还是右下角,同一个核都能检测到。这就是 CNN 比全连接网络参数少得多、且对位置不敏感的原因。
- 局部连接:每个输出像素只依赖输入的一小块局部区域(而非整张图),这与人眼视觉皮层的工作方式类似,也被称为局部归纳偏置(local inductive bias)。
为什么不用全连接网络处理图像? 一张 224×224×3 的图片展平后有 150528 个值,若第一个全连接层有 1000 个神经元,仅这一层就有约 1.5 亿参数——不但容易过拟合,而且完全丢失了像素之间的空间邻接关系。CNN 的卷积层对一个 224×224×3 输入、用 64 个 3×3 核,参数量仅
64 × 3 × 3 × 3 = 1728个,相差近 10 万倍。
传统 CV vs CNN
Section titled “传统 CV vs CNN”在深度学习爆发之前,计算机视觉(CV)完全依赖手工设计特征(hand-crafted features)——研究者凭经验和领域知识精心设计一套”配方”,从图像中提取边缘、角点、纹理等统计量,再交给 SVM 等分类器。CNN 的革命性在于:不再由人设计特征,而是让网络从数据中自动学习特征。更多传统 CV 方法详见传统计算机视觉与传统方法 vs 深度学习。
| 维度 | 手工特征(SIFT / HOG / SURF) | CNN 自动学习特征 |
|---|---|---|
| 特征来源 | 人工设计固定算法提取 | 从数据中端到端自动学习 |
| 典型流程 | 提特征 → 量化编码 → SVM 分类 | 端到端:像素 → 类别 |
| 优点 | 可解释、计算量小、无需 GPU | 性能远超手工特征,泛化强 |
| 缺点 | 天花板低、每换一个任务就要重新设计 | 需要大量标注数据与 GPU 算力 |
| 代表方法 | SIFT (1999)、HOG (2005)、SURF (2006) | AlexNet (2012)、ResNet (2015)、ConvNeXt (2022) |
| 历史转折 | ImageNet 2012:AlexNet Top-5 错误率 15.3% | 手工特征最佳方法约 25%,差距 10 个百分点 |
发展脉络:1999 年 Lowe 提出 SIFT(尺度不变特征变换),2005 年 Dalal & Triggs 用 HOG + SVM 做行人检测达到当时的实用水平。2012 年 AlexNet 在 ImageNet 大赛中碾压手工特征方法,标志着特征学习取代手工特征成为主流。但手工特征并未消亡——在计算资源受限的嵌入式设备上,SIFT/HOG 仍然是首选(详见传统方法 vs 深度学习)。
一个 3×3 卷积核在 5×5 特征图上滑动,每次覆盖一个局部区域,做逐元素相乘再求和:
卷积核的步长(stride)——滑窗每次移动的像素数,stride=1 表示逐像素滑动,stride=2 表示跳一格、输出尺寸约减半;填充(padding)——在输入边缘补零,用于控制输出尺寸(
"same"填充让输出与输入等大)。
卷积运算的数学公式
Section titled “卷积运算的数学公式”对于二维卷积层,设输入特征图为 X、卷积核为 W、偏置为 b,则输出特征图在位置 (i, j) 的值为:
其中 k 是卷积核边长。严格来说,深度学习中的”卷积”实际上是互相关(cross-correlation)——它不翻转卷积核,但因为权重是学出来的,翻转与否不影响表达能力,业界习惯仍叫它卷积。
对于多通道输入(如 RGB 三通道或上一层产生的 64 通道特征图),卷积核也是一个 3D 张量:核的深度始终等于输入通道数 C_in,沿输入的全部通道做逐元素乘加后求和成单个数。因此一个核无论输入多少通道,只产生一个输出通道。要产生 C_out 个输出通道,就需要 C_out 个核,所以一层卷积的参数量为:
以 Conv2d(3, 64, kernel_size=3, padding=1) 为例:参数量 = 64 × (3×3×3 + 1) = 64 × 28 = 1792 个。
Feature Map 尺寸计算公式
Section titled “Feature Map 尺寸计算公式”给定输入尺寸 W_in、卷积核大小 k、步长 s、单边填充 p,输出特征图的边长为:
例如输入 224、核 3×3、stride 1、padding 1:W_out = ⌊(224 + 2 − 3) / 1⌋ + 1 = 224(尺寸不变)。若 stride 2、padding 1:W_out = ⌊(224 + 2 − 3) / 2⌋ + 1 = 112(减半)。
这个公式是所有 CNN 尺寸推导的基础——给定输入分辨率和网络结构,沿每一层套用此式即可算出最终特征图大小,进而算出感受野和参数量。
感受野计算公式
Section titled “感受野计算公式”**感受野(receptive field)**指特征图上一个输出像素对应输入图像的区域大小。单层 3×3 卷积的感受野就是 3。堆叠两层 3×3 卷积的感受野为 5(而非 9),因为第二层的每个像素看的是第一层的 3×3 区域,而第一层每个像素又各自看了输入的 3×3 区域,合并起来的有效覆盖范围是 5×5。
递推公式:设第 l 层的感受野为 R_l、步长为 s_l,则从第 l−1 层到第 l 层的感受野递推为:
其中 s_1 × s_2 × ... × s_(l-1) 是前面所有层步长的连乘积(即当前层一个像素的跳幅对应输入上的多少像素)。初始 R_0 = 1。
以 VGG-16 为例,所有卷积都是 3×3、stride 1,5 次 stride-2 池化。最终 7×7 特征图上每个像素的感受野 = 1 + 2×(1+1+1+1+1+1+1+1+1+1+1+1+1) ≈ 196,即一个像素”看到”输入上约 196×196 的区域。
感受野决定了网络能利用多大范围的上下文。感受野太小会导致网络看不到整个物体;但单纯增大感受野也不一定提升性能——**有效感受野(effective receptive field)**呈高斯分布,中心区域贡献远大于边缘。
参数量与计算量(FLOPs)
Section titled “参数量与计算量(FLOPs)”- 参数量:一层卷积的参数量 =
C_out × (k × k × C_in + 1)(同上)。注意与全连接层相比,卷积参数量与输入分辨率无关——这是参数共享的直接体现。 - 计算量(FLOPs):每个输出像素需要
k × k × C_in次乘加,整层共H_out × W_out × C_out个输出像素,故:
可以看到计算量与输入分辨率、通道数的乘积成正比——这就是为什么高分辨率图像推理开销巨大,也是 MobileNet 等轻量网络用深度可分离卷积(depthwise separable convolution)(把标准卷积拆成逐通道卷积 + 1×1 逐点卷积两步)把计算量降到约 1/C_out + 1/k² 分之一的原因。
激活函数:ReLU
Section titled “激活函数:ReLU”卷积和加偏置本质上是线性运算——堆叠再多层,整体仍等价于一个单层线性变换。要引入非线性,必须在卷积后加激活函数。CNN 最常用的是 ReLU(Rectified Linear Unit,修正线性单元):
ReLU 把所有负值截断为 0、正值原样保留。优点:计算极快(一次比较)、在正区间梯度恒为 1(缓解梯度消失)、让网络学到稀疏表示(部分神经元输出为 0)。现代网络有时用其变体 LeakyReLU(负区间给一个小斜率如 0.01)或 GELU(Transformer 常用,平滑的 ReLU)。
批量归一化(BatchNorm)
Section titled “批量归一化(BatchNorm)”**批量归一化(Batch Normalization, BN)**在每个 mini-batch 内对一层的输出做标准化(减均值、除标准差),再用两个可学习参数 γ、β 做缩放和偏移,使各层输入分布保持稳定。公式:
BN 把”内部分布漂移(internal covariate shift)“问题大幅缓解,让学习率可以开得更大、训练更快更稳,是 2015 年以后现代 CNN 的标配组件。通常插在卷积之后、激活之前(Conv → BN → ReLU)。
推理时的 BN:测试时没有 mini-batch,BN 使用训练阶段累积的移动平均统计量(
running_mean/running_var),因此 BN 层在推理时常可被”折叠”进前一层的卷积权重中(Conv+BN → 单个 Conv),不增加任何推理开销。
ResNet 残差连接
Section titled “ResNet 残差连接”ResNet 的突破在于残差连接(skip connection):把输入直接”短路”跳过若干层,与输出相加。这让 152 层的极深网络也能正常训练——没有它,层数一深梯度就消失/爆炸。
直觉:网络只需学习”输入和输出的差异(残差)“,而不是从零学起。当最优变换接近恒等映射时,网络把残差推到 0 即可——比学一个恒等映射容易得多。
退化问题与残差块的解决
Section titled “退化问题与残差块的解决”ResNet 要解决的具体问题是退化问题(degradation problem):理论上网络越深容量越大应该更好,但实际上超过 20~30 层后准确率反而下降——这不是过拟合,而是梯度消失/爆炸导致深层根本学不动。残差连接最坏情况下 F(x) 学到 0,整体退化为恒等映射(y = x),所以更深的网络不会比浅的更差。
类比:想象老师让一个学生把试卷上每个错误都改对(学完整映射 F(x))。这很难。但如果老师说”我给你一份标准答案,你只改还错的题”(学残差 F(x)),改动量小得多,也更容易学会。残差连接就是那把”标准答案直通车”。
梯度层面的解释:残差相加让反向传播的梯度链多了一条”直通回路”——,那个 “+1” 保证梯度不会在链式求导中连乘衰减到零,这就是”梯度高速公路”的数学本质。
残差块数据流
Section titled “残差块数据流”以下是标准残差块的内部结构——两个 3×3 卷积 + 跳线连接:
注意那条从 x 直接连到 ⊕ 的”跳线”(skip connection)——即使 F(x) 学不到东西,x 也能无损通过。跳线连接构建了梯度回传的”高速公路”。
动手实践:用 PyTorch 搭一个 CNN
Section titled “动手实践:用 PyTorch 搭一个 CNN”import torchimport torch.nn as nn
# 一个最小化的 CNN:2 个卷积块 + 1 个全连接分类头class SimpleCNN(nn.Module): def __init__(self, num_classes=10): super().__init__() self.features = nn.Sequential( nn.Conv2d(3, 16, 3, padding=1), # 卷积:3通道→16通道,3×3核 nn.ReLU(), # 激活函数 nn.MaxPool2d(2), # 2× 下采样:尺寸减半 nn.Conv2d(16, 32, 3, padding=1), # 卷积:16→32通道 nn.ReLU(), nn.MaxPool2d(2), ) self.classifier = nn.Linear(32 * 8 * 8, num_classes) # 全连接分类
def forward(self, x): x = self.features(x) # 提取特征 x = x.view(x.size(0), -1) # 展平:(B, 32, 8, 8) → (B, 2048) return self.classifier(x)
model = SimpleCNN(num_classes=10)print(model)print(f"参数量: {sum(p.numel() for p in model.parameters()):,}")上面假设输入是 32×32(CIFAR-10 尺寸),两次
MaxPool2d(2)后特征图为 8×8,所以展平维度是32 × 8 × 8 = 2048。如果输入是 224×224,需要相应调整为32 × 56 × 56。
残差块 PyTorch 实现
Section titled “残差块 PyTorch 实现”以下实现标准残差块(ResNet-18/34 使用的基础块),注意跳线连接如何对齐维度:
class ResidualBlock(nn.Module): """标准残差块(ResNet-18/34 使用的基础块)""" def __init__(self, in_ch, out_ch, stride=1): super().__init__() # 主路径:两个 3×3 卷积 self.conv1 = nn.Conv2d(in_ch, out_ch, 3, stride=stride, padding=1, bias=False) self.bn1 = nn.BatchNorm2d(out_ch) self.conv2 = nn.Conv2d(out_ch, out_ch, 3, stride=1, padding=1, bias=False) self.bn2 = nn.BatchNorm2d(out_ch) self.relu = nn.ReLU(inplace=True) # 跳线:通道数或分辨率变化时需要 1×1 卷积对齐维度 self.skip = nn.Identity() if in_ch == out_ch and stride == 1 else \ nn.Sequential(nn.Conv2d(in_ch, out_ch, 1, stride=stride, bias=False), nn.BatchNorm2d(out_ch))
def forward(self, x): out = self.relu(self.bn1(self.conv1(x))) # Conv1 → BN → ReLU out = self.bn2(self.conv2(out)) # Conv2 → BN return self.relu(out + self.skip(x)) # 残差相加后 ReLU
# 验证:输入 [1, 64, 56, 56] → 输出 [1, 128, 28, 28]blk = ResidualBlock(64, 128, stride=2)x = torch.randn(1, 64, 56, 56)print(blk(x).shape) # 输出: torch.Size([1, 128, 28, 28])注意
self.skip:当主路径改变了通道数或分辨率(stride>1)时,跳线必须用 1×1 卷积做投影,把 x 的形状对齐到与主路径输出一致才能相加。bias=False是因为后面跟 BN,BN 自带可学习偏移,卷积偏置冗余。
训练技巧与最佳实践
Section titled “训练技巧与最佳实践”- 输入要归一化:图像像素值 0–255,先除以 255 缩放到 [0, 1],或做
transforms.Normalize(mean, std)标准化(ImageNet 的mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225])。不归一化会导致训练极不稳定。 - 数据增强是免费的性能提升:训练时随机翻转、裁剪、颜色抖动(ColorJitter)能让模型见过更多变化,显著抑制过拟合。进阶方法如 MixUp(把两张图及其标签线性混合)、CutMix(把一张图的局部块贴到另一张上)、RandAugment(随机组合多种增强)在 ImageNet 上普遍带来 1–3 个百分点的 Top-1 提升。
- 学习率调度:训练初期用较大学习率快速逼近,后期逐步衰减。常用 余弦退火(Cosine Annealing)(学习率沿余弦曲线降到接近 0)或 StepLR(每若干 epoch 衰减一次)。更稳的做法是配合 Warmup(前几个 epoch 学习率从 0 线性升到目标值),避免初始阶段发散。
- 优化器选择:SGD + Momentum 在大量 epoch 训练时泛化最好,是 ResNet/ImageNet 训练的经典选择;AdamW 收敛更快、调参更省心,是 ConvNeXt/ViT 等现代架构的默认选择。
- 标签平滑(Label Smoothing):把硬标签
[0, 1, 0]软化为[0.033, 0.933, 0.033],防止模型对训练标签过度自信,通常提升 0.5–1 个百分点。 - 池化层降维:
MaxPool2d(2)把特征图尺寸减半、通道数不变——既减少计算量,又让感受野逐层增大。 - 深层网络用残差连接:超过 10 层的 CNN,不加残差连接很难训练。PyTorch 的
torchvision.models.resnet18/50开箱即用。 - 不要从零训练:除非数据量超大(百万级),否则用预训练模型(
weights=ResNet18_Weights.DEFAULT)做迁移学习,效果远好于从零开始。用torchvision.models.resnet50(weights=ResNet50_Weights.DEFAULT)加载预训练权重,替换最后全连接层即可微调你的数据集——几十行代码搞定。 - 卷积核大小:几乎总是 3×3。大核用多个 3×3 堆叠替代(两个 3×3 的感受野 = 一个 5×5,但参数更少且非线性更强)。例外:2022 年起的 RepLKNet、ConvNeXt-V2 等现代架构重新启用 7×7 甚至 31×31 大核,借助**重参数化(re-parameterization)**和深度可分离卷积把大核的开销压下来。
- BatchNorm 是标配:卷积后、激活前加 BN,能加速收敛、稳定训练。现代 CNN 的标配组件。
- 池化 vs 步长卷积:下采样可以用池化(MaxPool)也可以用 stride=2 的卷积。后者可学习,通常效果略好。
- 权重初始化:默认的随机初始化(如 Kaiming 初始化)对浅网络够用;深层或自定义结构建议显式调用
nn.init.kaiming_normal_,让初始方差不随层数爆炸或消失。 - 何时不用 CNN:对于序列数据(文本、时间序列),Transformer 已取代 CNN;但图像的局部归纳偏置(平移不变性)让 CNN 在小数据量时仍比 ViT 更高效。
- ImageNet 图像分类:ResNet 在 ILSVRC 2015 以 3.57% 错误率夺冠,此后 ResNet-50 成为整个计算机视觉领域最通用的预训练 backbone,无数下游任务的默认起点。
- 视频理解:用 3D CNN(如 I3D、SlowFast)对视频帧序列提取时空特征,用于短视频平台的动作识别、内容审核和精彩片段自动剪辑。
- 人脸识别:Apple Face ID 解锁手机、支付宝刷脸支付,CNN 提取人脸深度特征并与注册模板比对,在毫秒内完成身份验证。
- 医学影像分析:腾讯觅影、Google Health 用 CNN 检测 CT / MRI 中的肺结节、眼底病变和肿瘤病灶,辅助放射科医生提高筛查效率。
- 自动驾驶感知:特斯拉、Mobileye 的视觉感知系统用 CNN 识别车道线、交通标志、行人和车辆,是辅助驾驶(ADAS)的核心感知模块。
- 工业质检:产线上用 CNN 检测产品表面的划痕、凹陷、缺件等缺陷,替代人工质检并实现 24 小时高速筛查,漏检率远低于人工。
- 卫星遥感分析:Google Earth 用 CNN 做土地利用分类、Maxar 用它识别建筑与道路的变化,支撑城市规划与灾害评估。
- 边缘设备与移动端:手机上的实时人像虚化、ARKit 体感追踪、无人机避障都依赖在端侧运行的轻量 CNN(如 MobileNet、EfficientNet-Lite),延迟低至毫秒级且无需上传云端,兼顾隐私与实时性。
CNN 主线里程碑
Section titled “CNN 主线里程碑”| 年份 | 模型 | 人物/团队 | 要点 |
|---|---|---|---|
| 1980 | Neocognitron | 福岛邦彦 | CNN 结构前身,非反向传播训练 |
| 1989/1998 | LeNet / LeNet-5 | LeCun 等(AT&T Bell Labs) | 首次 BP+卷积结合;1998 论文用于银行支票识别 |
| 2012 | AlexNet | Krizhevsky, Sutskever, Hinton(多伦多大学) | ILSVRC-2012 冠军(Top-5 错误率 15.3%,领先第二名约 10 个百分点),ReLU+Dropout+GPU,深度学习走向主流的标志 |
| 2014 | VGG / GoogLeNet | 牛津 VGG 组 / Google | 小卷积核堆叠 / Inception 模块 |
| 2015 | ResNet | 何恺明、张祥雨、任少庆、孙剑(MSRA) | 残差连接使 152 层可训练,ILSVRC-2015 冠军 |
| 2017 | DenseNet | Huang 等(康奈尔) | 密集连接,每层接所有前层 |
| 2019 | EfficientNet | Tan & Le(Google) | 复合缩放,同时缩放深度/宽度/分辨率 |
| 2022 | ConvNeXt | Liu 等(Meta) | 用现代设计纯 CNN 追平 ViT,证明 CNN 路线未死 |
| 2023 | ConvNeXt-V2 | Woo 等(Meta / KAIST) | 引入 FCMAE 自监督预训练 + 全局响应归一化(GRN),刷新纯 CNN 记录 |
| 2024 | MobileNetV4 | 硬件感知神经架构搜索(NAS)+ 通用 Inverted Bottleneck,专为移动端推理优化 | |
| 2024–2025 | InternImage / RepLKNet v2 | OpenGVLab / MEGVII | 可变形卷积 v3、超大核 + 重参数化,在检测/分割下游任务上追平或超过 ViT 骨干 |
2025–2026 前沿进展
Section titled “2025–2026 前沿进展”ConvNeXt 路线的延续
Section titled “ConvNeXt 路线的延续”2022 年 ConvNeXt 证明了”纯卷积 + 现代训练配方”可以追平当时最先进的 Vision Transformer(ViT)。2023 年的 ConvNeXt-V2 进一步加入两项改进:
- FCMAE(Fully Convolutional Masked Autoencoder):一种适配卷积的自监督预训练方法,随机遮住输入图像 60% 的 patch,让网络学会重建被遮挡部分,与 ViT 的 MAE 思路对齐。
- GRN(Global Response Normalization,全局响应归一化):在特征图通道维度做归一化,增强有用通道、抑制冗余通道,弥补深层 ConvNeXt 特征崩溃的问题。
ConvNeXt-V2 在 ImageNet-1K 上把纯 CNN 的 Top-1 准确率推到 88.9%(使用 1B 参数 + 3.8B 数据的预训练),缩小甚至抹平了与最先进 ViT 的差距,说明卷积路线并未过时。
CNN vs Vision Transformer:共识与分工
Section titled “CNN vs Vision Transformer:共识与分工”经过 2021–2025 的几年争论,学界对”CNN 还是 ViT”已形成较清晰的共识:
- ViT 的优势在”大数据、强算力”场景:当预训练数据达到数亿张图(如 JFT-300M、LAION)、模型规模上亿参数时,ViT 缺乏归纳偏置反而成为优势——容量更大、可扩展性更好,DINOv2、SigLIP、CLIP 等基础模型均采用 ViT。
- CNN 的优势在”小数据、低算力、强局部性”场景:数据量有限(几万张)、延迟敏感(移动端/边缘端)、任务依赖精细局部纹理(医学影像、工业质检)时,CNN 的局部归纳偏置让它用更少数据和算力达到更优效果。
- 融合架构成为主流:MobileViT、EfficientFormer、CoAtNet 等混合架构在前端用卷积提取局部特征、在后端用 Attention 建模全局关系,兼顾效率与表达力。
大核卷积复兴
Section titled “大核卷积复兴”2022–2025 年出现了”大核复兴”趋势:RepLKNet 使用 31×31 的超大卷积核(配合深度可分离卷积和结构重参数化把开销控制住),证明大核也能获得与 ViT 全局注意力相当的有效感受野;InternImage 把**可变形卷积 v3(Deformable Convolution v3)**作为核心算子,让采样位置可学习、自适应物体形状,在 COCO 检测和 ADE20K 分割上持续领先。
CNN 在边缘设备上的新应用
Section titled “CNN 在边缘设备上的新应用”2024–2025 年,端侧 AI 爆发让高效 CNN 重新成为焦点:
- 手机端实时推理:Google 的 MobileNetV4 用硬件感知 NAS 自动搜索在特定芯片(手机 NPU、Apple Neural Engine)上推理最快的结构,在同等精度下比 MobileNetV3 快 20–50%。
- 可穿戴设备与 IoT:智能手表的心律失常检测、智能眼镜的实时手势识别,在毫瓦级功耗预算下只能跑深度可分离 CNN。
- 端侧生成式 AI 中的 CNN:Stable Diffusion 的 VAE 解码器、扩散模型的下采样/上采样模块仍是卷积结构,2025 年的 MobileDiffusion、Snapfusion 等端侧扩散模型大量使用优化后的 CNN。
- 无人机与机器人感知:200g 以下的无人机无法搭载大 GPU,其避障与目标跟踪几乎全部依赖 Quantized CNN(INT8 量化卷积),在树莓派级算力上实现 60 FPS 实时推理。
自监督学习赋能 CNN
Section titled “自监督学习赋能 CNN”受 MAE(Masked Autoencoders)在 ViT 上成功的启发,2023–2025 年出现了多种针对 CNN 的自监督预训练方法(ConvNeXt-V2 的 FCMAE、DINO 的 CNN 变体等),让纯 CNN 也能从无标注大规模数据中受益,缩小了与 ViT 在预训练数据利用上的差距。
典型类库与工具
Section titled “典型类库与工具”| 类库 | 语言 | 说明 |
|---|---|---|
| torchvision | Python | PyTorch 官方视觉库,内置 ResNet/VGG/AlexNet 等经典 CNN 模型与预训练权重 |
| timm | Python | 第三方模型库,收录数百种预训练 CNN 与 ViT(含 ConvNeXt 全系列),迁移学习首选 |
| PyTorch | Python | 灵活的深度学习框架,nn.Conv2d 等模块让搭 CNN 像搭积木 |
| TensorFlow / Keras | Python | Google 深度学习框架,tf.keras.applications 提供开箱即用的经典 CNN |
| Detectron2 | Python | Meta 开源的视觉库,提供 CNN 骨干 + 检测/分割头,研究常用 |
| OpenCV | C++/Python | 视觉基础库,用于图像预处理、数据增强和检测结果可视化 |
| ONNX Runtime / TensorRT | Python / C++ | 把训练好的 CNN 导出为 ONNX 后做推理加速,边缘部署常用 |
| 术语 | 英文 | 解释 |
|---|---|---|
| 卷积 | Convolution | 用小窗口在输入上滑动做逐元素乘加,提取局部特征的核心运算 |
| 卷积核 | Filter / Kernel | 卷积操作中滑动的小权重矩阵,相当于一个特征探测器 |
| 特征图 | Feature Map | 卷积层的输出,每个通道对应一个核检测到的特征响应 |
| 步长 | Stride | 卷积滑窗每次移动的像素数;stride=2 会让输出尺寸约减半 |
| 填充 | Padding | 在输入边缘补零,用于控制输出尺寸,“same” 填充让输出与输入等大 |
| 池化 | Pooling | 对局部区域取最大值或平均值来降低特征图分辨率的下采样操作 |
| 感受野 | Receptive Field | 一个输出像素对应的输入图像区域大小,逐层递增 |
| 有效感受野 | Effective Receptive Field | 感受野内各像素对输出的实际贡献分布(近似高斯),中心区域远大于边缘 |
| 激活函数 | Activation Function | 引入非线性的逐元素函数,ReLU 是 CNN 最常用的一种 |
| 批归一化 | Batch Normalization (BN) | 在卷积后、激活前对特征做标准化,加速收敛、稳定训练,是现代 CNN 的标配组件 |
| 残差连接 | Skip Connection | 把输入直接跨层加到输出上,使极深网络也能正常训练 |
| 迁移学习 | Transfer Learning | 用在大数据集上预训练的模型权重作为起点,在小数据集上微调 |
| Dropout | Dropout | 训练时随机丢弃部分神经元,抑制过拟合的正则化手段 |
| 残差块 | Residual Block | ResNet 的基本单元,通过跳线将输入直接加到输出上(y = F(x) + x),使深层网络可训练 |
| 恒等映射 | Identity Mapping | 当残差 F(x) 学到 0 时整体退化为 y = x,保证更深的网络不会比浅网络更差 |
| 瓶颈结构 | Bottleneck Block | 用 1×1→3×3→1×1 的三层结构先降维再升维,在减少参数量的同时保持表达能力 |
| 深度可分离卷积 | Depthwise Separable Convolution | 把标准卷积拆成逐通道卷积 + 1×1 逐点卷积两步,大幅降低参数量和计算量,MobileNet 的核心算子 |
| 数据增强 | Data Augmentation | 通过翻转、裁剪、颜色抖动等手段人工扩充训练样本,抑制过拟合 |
| 标签平滑 | Label Smoothing | 把硬标签软化为一组概率分布,防止模型对训练标签过度自信 |
| 余弦退火 | Cosine Annealing | 学习率沿余弦曲线逐步降到接近 0 的调度策略,常配合 Warmup 使用 |
| 结构重参数化 | Structural Re-parameterization | 训练时用多分支结构、推理时等价合并为单分支,既享受训练收益又不增加推理开销 |
| 可变形卷积 | Deformable Convolution | 让卷积采样位置可学习,自适应物体几何形变,InternImage 的核心算子 |
- AlexNet 的历史定位:ILSVRC-2012 是深度学习走向主流的标志事件。不过 Schmidhuber 阵营指出 Ciresan 组 2011 年已用 GPU CNN 在竞赛中获胜,AlexNet 并非技术原创起点,而是工程集大成者。
- ResNet 发表年份:arXiv 预印本 2015-12,CVPR 2016 正式发表,两种年份标注均正确。残差连接让 152 层网络可训练,论文被引超 20 万次,残差思想已渗透所有现代架构(Transformer 每层都有残差连接)。
- 后续发展:DenseNet(2017,密集连接)、EfficientNet(2019,复合缩放)、ConvNeXt(2022,用现代设计纯 CNN 追平 ViT)、ConvNeXt-V2(2023,自监督 FCMAE + GRN)。
- CNN 与 ViT 的关系:2020 年 ViT 出现后一度有”CNN 将死”的论调,但 ConvNeXt(2022)和后续大核网络证明卷积路线仍有竞争力。目前的共识是两者互补——ViT 擅长大数据强算力场景,CNN 擅长小数据、低延迟和局部纹理敏感任务,融合架构(MobileViT、CoAtNet)是工程落地的主流选择。
- 2025–2026 趋势:端侧 AI 爆发让高效 CNN(MobileNetV4、量化 CNN)重新受到重视;可变形卷积与大核卷积让纯 CNN 在检测/分割下游任务上保持领先;自监督预训练方法(FCMAE 等)让 CNN 也能利用无标注大规模数据。可参考 Vision Transformer 主线 对比 ViT 的发展。