L3 · 专题文章

CNN

计算机视觉图像分类卷积网络

本页只讲 4 条最关键判断,不写百科

4核心点
先记住卷积核大小决定感受野,步长控制下采样

不掌握这两点就无法正确设计网络或排查特征丢失问题

LIVE
CORE CNN
01 WHAT

是什么

CNN 是一种专为图像设计的神经网络,通过局部感受野和权值共享提取空间特征。

02 WHY

为什么

图像数据具有强局部相关性,全连接网络参数量爆炸且无法平移不变,CNN 用更少参数实现更高精度。

03 HOW

怎么做

用 PyTorch 或 TensorFlow 定义卷积层+池化层+全连接层,输入归一化图像张量即可训练。

04 WHEN

什么时候

图像分类、目标检测、分割等视觉任务必选;纯文本或表格数据不用。

FOCUS

先记住这些

只留最重要的判断,细节见下方实践
01 局部感受野

不掌握就无法正确设计网络

卷积核只扫描局部区域,过大则失去局部性,过小则无法捕获上下文

02 权值共享

与全连接网络的本质差异

同一组权重在全图复用,参数量从 O(N²) 降至 O(K²),训练更稳定

03 池化下采样

最高频踩坑点

过度池化导致细节丢失,特征图过小后分类器无法恢复空间信息

04 特征层级化

决定模型上限的关键

浅层提取边缘/纹理,深层组合为部件/对象,层级断裂则精度骤降

PROBLEM / POSITION / INTERFACE

先弄清它为什么存在,以及谁在使用

不从历史开始,从真实工作关系开始。
  1. 01 解决的问题

    需要让机器理解图像内容时

    全连接网络参数过多、过拟合严重、无法捕捉局部模式

    成功标准
    模型在验证集上稳定收敛,泛化到新图像仍保持高准确率
  2. 02 AI 生态位

    视觉感知模块的核心,上游接图像预处理,下游接分类器或检测头

    上游
    图像预处理(缩放、归一化、增强)
    下游
    分类器、目标检测器、分割网络或下游业务逻辑
  3. 03 人的生态位

    负责数据标注、架构选择、超参调优与结果验收

    适合使用
    输入为图像或具有网格结构的数据,且需提取空间局部特征
    不必使用
    数据无空间结构(如表格)、或已有预训练视觉模型可直接微调
  4. 04 独特价值

    参数共享+局部连接,天然适配图像平移不变性,训练效率远高于全连接

    感受野设计不当导致信息丢失;过拟合与梯度消失需靠正则与归一化控制

    复杂度判断
    复杂度不是功能数量,而是控制与验证成本。

INTERFACE FLOW

谁在操作,信息怎样流动

  1. WHO OPERATES

    HUMAN选择架构、准备数据、调参、评估结果

    SYSTEM执行前向传播、反向传播、权重更新

  2. INPUT

    归一化后的图像张量(如 3×224×224)

  3. CONTROL

    卷积核大小、步长、填充、激活函数、学习率、数据增强策略

  4. OUTPUT

    特征图或分类概率,供下游模块或人工判断

CODE / PYTHON最小 PyTorch 调用
import torch
import torch.nn as nn
import torch.optim as optim

class SimpleCNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv = nn.Conv2d(3, 16, kernel_size=3, padding=1)
        self.pool = nn.MaxPool2d(2, 2)
        self.fc = nn.Linear(16 * 56 * 56, 10)

    def forward(self, x):
        x = self.pool(torch.relu(self.conv(x)))
        x = x.view(x.size(0), -1)
        return self.fc(x)

model = SimpleCNN()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 假设 inputs 为 [batch, 3, 224, 224]
outputs = model(torch.randn(4, 3, 224, 224))
print(outputs.shape)

最短闭环:定义卷积+池化+全连接 → 前向传播 → 打印输出形状。真实训练需加损失与数据加载。

JSON / RESPONSE典型输出张量形状(示意)
{
  "batch_size": 4,
  "output_shape": [
    4,
    10
  ],
  "feature_map_after_conv": [
    4,
    16,
    224,
    224
  ],
  "feature_map_after_pool": [
    4,
    16,
    112,
    112
  ]
}

PRACTICE

训练前必查清单

图像已归一化到 [0,1] 或标准化到 ImageNet 均值方差
卷积核大小与步长匹配任务尺度(小目标用小核)
池化次数不超过 3 次,避免特征图过小
使用 BatchNorm 或 LayerNorm 稳定训练
验证集与训练集分布一致,无数据泄露

FAQ

常见问题

选型、用法与失败,不复述定义。
01CNN 和全连接网络在图像处理上有什么区别?

CNN 用局部连接和权值共享,参数量少且保留空间结构;全连接破坏局部性且极易过拟合。

避免用错架构导致训练崩溃或精度低下。
02最小可用 CNN 长什么样?

1 个卷积层 + 1 个池化层 + 1 个全连接层,输入归一化图像即可跑通。

帮助快速验证数据管线与训练流程。
03什么时候不需要自己搭 CNN?

有现成预训练模型(如 ResNet、EfficientNet)时,直接微调即可,无需从零设计。

节省算力与调参时间,提升基线精度。
04训练时 loss 不下降怎么排查?

检查学习率是否过大、数据是否未归一化、卷积核是否过小导致感受野不足。

快速定位常见训练失败原因,避免盲目调参。