一、什么是卷积神经网络(CNN)

卷积神经网络(Convolutional Neural Network,CNN)是一种专门处理网格结构数据(图像 = 二维网格、语音 = 一维网格、视频 = 三维网格)的深度学习模型。
它最大的特点:不用人工提取特征,模型自己从数据中学到边缘、纹理、形状、物体特征。
传统机器学习需要人工设计特征(如 HOG、SIFT),而 CNN 是端到端自动学习。

二、CNN 三大核心思想(必须懂)

这是 CNN 能工作、能高效处理图像的根本原因:

  1. 局部感受野(Local Receptive Field)
    人眼看东西,一次只看一小块区域。CNN 也是:只对局部像素做计算,不看全图,保留空间位置关系。
  2. 权值共享(Weight Sharing)
    同一个卷积核(过滤器)在整张图片上滑动。→ 参数数量爆炸式减少一张 224×224 的图,传统网络参数几百万;CNN 可能只要几千。
  3. 池化(下采样)
    压缩特征图尺寸,保留关键信息,降低计算量,防止过拟合。

三、CNN 完整结构(逐层级深度讲解)

CNN 标准流程:输入层 → 卷积层 → 激活层 → 池化层 → 卷积 / 池化堆叠 → 全连接层 → 输出层

  1. 输入层(Input Layer)
    输入一般是图像张量:(高度 H, 宽度 W, 通道数 C)
    灰度图:(H, W, 1)
    RGB 彩色图:(H, W, 3)
    必须做的预处理:
    缩放到统一尺寸(224×224、32×32)
    归一化(像素值 0~1 或 -1~1)
    数据增强(翻转、裁剪、旋转)

  2. 卷积层(Convolutional Layer)【核心!灵魂!】
    (1)卷积是什么?
    卷积 = 一个小矩阵(卷积核)在图像上滑动,做乘加运算,提取特征。
    (2)卷积核(Kernel / Filter)
    常用大小:1×1、3×3、5×5
    作用:提取边缘、角点、纹理、颜色、形状
    模型训练时,卷积核的值自动学习,不需要人工设置

(3)卷积运算公式
Output(i,j)=∑m=0h​∑n=0w​Input(i+m,j+n)∗Kernel(m,n)大白话:对应位置相乘 → 全部相加 → 得到一个值
(4)步长(Stride)
卷积核每次滑动几格
stride=1 → 每次移动 1 像素
stride=2 → 尺寸缩小一半

(5)填充(Padding)
给图像外围补 0
valid:不填充,图像会变小
same:填充,让输出和输入尺寸一样

(6)特征图(Feature Map)
卷积后的输出叫特征图它存储的不是像素,而是抽象特征。

  1. 激活函数(引入非线性)
    没有激活函数,CNN 就是线性模型,无法识别复杂图案。
    最常用:ReLU
    ReLU(x)=max(0,x)优点:
    解决梯度消失
    计算极快
    深度网络必备
    其他激活函数
    Sigmoid:二分类、输出概率
    Tanh:归一化 - 1~1
    LeakyReLU:防止神经元死亡

  2. 池化层(Pooling Layer)【降维层】
    作用:缩小尺寸、减少计算、保留关键特征、防止过拟合
    两种最常用池化
    最大池化(Max Pooling)取区域内最大值 → 保留最突出特征(图像任务首选)
    平均池化(Avg Pooling)取区域内平均值 → 保留整体信息
    例子:2×2 池化、stride=2 → 尺寸直接缩小为原来的 1/4

  3. 全连接层(Fully Connected Layer)
    把卷积提取的二维特征展平成一维向量,送到分类器。
    例如:(7,7,512) → 展平 → 1×25088
    然后接入全连接层做分类。

  4. 输出层
    分类任务:Softmax → 输出各类别的概率和为 1
    二分类:Sigmoid
    回归任务:Linear(无激活)

四、CNN 输出尺寸计算公式(必考必用)

Output=StrideInput−Kernel+2×Padding​+1例子:输入 32×32,kernel=3,padding=1,stride=1输出 = (32-3+2)/1 +1 = 32

五、CNN 训练过程(完整流程)

  1. 前向传播
    输入图像 → 卷积 → 激活 → 池化 → 全连接 → 输出预测值

  2. 计算损失
    分类任务用:交叉熵损失 Cross Entropy Loss回归任务用:均方误差 MSE

  3. 反向传播
    根据损失,用链式法则更新卷积核、全连接层权重。

  4. 优化器更新参数
    常用:
    SGD
    Adam(最常用)
    RMSprop

  5. 正则化(防止过拟合)
    Dropout
    Batch Normalization
    L2 正则
    数据增强

六、经典 CNN 模型(发展史 + 特点)

  1. LeNet-5(1998)
    第一个成功的 CNN用于:手写数字识别(MNIST)
  2. AlexNet(2012)
    深度学习里程碑首次在 ImageNet 夺冠,引爆 AI 浪潮使用:ReLU、Dropout、GPU 训练
  3. VGGNet(2014)
    全部使用3×3 卷积结构简单、非常稳定工业界最常用基础网络
  4. ResNet(2015)
    残差连接解决深度网络梯度消失问题可以训练 100 层、1000 层超深网络
  5. MobileNet / EfficientNet
    轻量化模型,用于手机端、嵌入式设备

七、CNN 变体(扩展用途)

  1. 1D CNN
    处理:文本、语音、时序数据提取局部时序特征
  2. 2D CNN
    处理:图像(最常用)
  3. 3D CNN
    处理:视频、CT 医学影像
  4. 空洞卷积(Dilated Conv)
    增大感受野,不丢失分辨率用于分割模型
  5. 深度可分离卷积(Depthwise Separable Conv)
    轻量化必备,参数减少 8~9 倍

八、CNN 实际应用(全覆盖)

  1. 图像分类
    猫狗分类、花卉分类、交通标志识别
  2. 目标检测
    定位物体位置 + 分类代表模型:YOLO、Faster R-CNN、SSD应用:自动驾驶、人脸识别、安防
  3. 语义分割
    给每个像素分类应用:医疗影像分割、自动驾驶路面分割模型:U-Net、Mask R-CNN
  4. 人脸识别
    1:1 比对、1:N 检索手机解锁、支付
  5. 医疗影像
    CT、X 光、核磁病灶检测癌细胞识别、眼底疾病诊断
  6. 自然语言处理
    文本分类、情感分析、意图识别用 1D CNN 做,速度非常快
  7. 图像生成与重建
    GAN、超分辨率、去噪、上色

九、PyTorch 完整 CNN 代码(可直接运行)

import torch
import torch.nn as nn
import torch.optim as optim

定义CNN模型

class CNN(nn.Module):
    def __init__(self, num_classes=10):
        super(CNN, self).__init__()
        # 卷积组 1
        self.conv1 = nn.Sequential(
            nn.Conv2d(3, 16, kernel_size=3, padding=1),
            nn.BatchNorm2d(16),
            nn.ReLU(),
            nn.MaxPool2d(2)
        )
        # 卷积组 2
        self.conv2 = nn.Sequential(
            nn.Conv2d(16, 32, kernel_size=3, padding=1),
            nn.BatchNorm2d(32),
            nn.ReLU(),
            nn.MaxPool2d(2)
        )
        # 全连接层
        self.fc = nn.Linear(32 * 8 * 8, num_classes)

    def forward(self, x):
        x = self.conv1(x)
        x = self.conv2(x)
        x = torch.flatten(x, 1)
        x = self.fc(x)
        return x

初始化模型

model = CNN()
print(model)

训练配置

criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

十、CNN 的优势与局限

优势
✅ 自动提取特征,无需人工设计✅ 参数少、计算快✅ 空间特征提取极强✅ 平移、缩放、旋转鲁棒性好✅ 适合图像、语音、时序、文本等网格数据
局限
❌ 需要大量标注数据❌ 对对抗样本脆弱❌ 全局建模能力不如 Transformer❌ 超深网络训练困难

十一、总结(最核心的几句话)

CNN = 卷积提取特征 + 池化降维 + 全连接分类
卷积层是特征提取器,从边缘→纹理→形状→物体逐层抽象
权值共享 + 局部感受野让 CNN 高效处理图像
应用覆盖图像分类、检测、分割、医疗、自动驾驶、NLP
是计算机视觉的基石,也是深度学习最必须掌握的模型

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐