外观
CNN 与计算机视觉
概念定义:用局部性先验看世界
卷积神经网络(Convolutional Neural Network, CNN)是专门为图像等网格结构数据设计的神经网络。它的核心假设是局部性:图像中相邻像素的关系远比远处像素重要——一只猫的耳朵、眼睛、胡须都是局部特征,通过滑动窗口(卷积核)提取,再逐层组合成"猫"的语义。
原始图像 → 卷积层(提取局部特征)→ 池化层(压缩尺寸)
→ 卷积层 → 池化层 → … → 展平 → 全连接层 → 类别概率CNN 相比全连接网络的两个决定性优势:
- 参数共享:一个卷积核在全图滑动复用——一张 224×224×3 的图像,全连接第一层就有千万级参数,CNN 只用几千个;
- 平移不变性:猫在图像左上角还是右下角,卷积核都能识别——全连接网络做不到。
二、CNN 的三大构件
1. 卷积层:滑动的特征探测器
一个卷积核(如 3×3×3)在输入上滑动,每个位置做加权求和,输出一张特征图(feature map)。多个核 = 多个特征图(检测不同模式:边缘、颜色、纹理)。两个超参数:
- 步长(stride):核每次滑动的像素数,>1 时输出尺寸缩小;
- 填充(padding):边缘补零,保持输出尺寸(same padding)。
感受野(receptive field):每个输出像素"看到"的输入区域大小。浅层感受野小(看局部),深层感受野大(看整体)——这就是"浅层学边缘、深层学语义"的机制。
2. 池化层:压缩与不变性
最大池化(Max Pooling):在 2×2 窗口取最大值——保留最强响应、丢弃精确位置。作用:降维(减少计算量)、带来一定平移不变性、防止过拟合。现代网络(ResNet 后)倾向用"步长 2 的卷积"代替池化,但思想一致。
3. 残差连接:让网络变深的钥匙
2015 年 ResNet 之前的困境:网络加到 20+ 层,训练误差反而上升(退化问题——不是过拟合,是深层网络难优化)。ResNet 的解法极其简单:
输出 = F(x) + x (F 是卷积块,x 是输入,即"残差")让网络学习"残差"而不是完整映射:如果某层已经最优,残差学习只需把 F 学到 0(输出 = 输入),学习难度骤降。ResNet 借此做到 152 层,ImageNet top-5 错误率 3.57% 首次超过人类(约 5.1%)。残差连接今天已是所有深层网络的标配(Transformer 里也有)。
三、架构演进时间线
| 年份 | 模型 | 关键贡献 | ImageNet top-5 错误率 |
|---|---|---|---|
| 2012 | AlexNet | GPU + ReLU + Dropout + 数据增强,引爆深度学习 | 15.3%(前一年冠军 26.2%) |
| 2014 | VGG | 小卷积核(3×3)堆深,结构规整 | 7.3% |
| 2014 | GoogLeNet(Inception) | 多尺度卷积并行 + 1×1 卷积降维 | 6.7% |
| 2015 | ResNet | 残差连接,152 层 | 3.57%(超过人类) |
| 2017 | DenseNet | 层间稠密连接,特征复用 | 3.46% |
| 2019 | EfficientNet | 神经架构搜索(NAS)联合缩放深度/宽度/分辨率 | 2.9% 以下 |
| 2020 | ViT | Transformer 直接吃图像 patch,视觉大模型开端 | 追平 CNN |
趋势:从"手工设计架构"(VGG/ResNet)到"NAS 自动搜架构"(EfficientNet),再到"Transformer 统一视觉与语言"(ViT)。2021 年后的视觉大模型(CLIP、SAM、DINO)基本以 ViT 或 CNN 混合为主,但CNN 的局部性先验仍在轻量、移动端场景占优。
四、图像任务家族
| 任务 | 目标 | 代表模型 | 指标 |
|---|---|---|---|
| 图像分类 | 整图 → 类别 | ResNet、EfficientNet、ViT | top-1/top-5 准确率 |
| 目标检测 | 定位 + 分类多个目标 | YOLO(单阶段)、Faster R-CNN(两阶段) | mAP |
| 语义分割 | 每个像素 → 类别 | U-Net、DeepLab | mIoU |
| 实例分割 | 分割 + 区分个体 | Mask R-CNN | mAP |
| 姿态估计 | 关键点定位 | HRNet、OpenPose | OKS/AP |
| 图像检索/嵌入 | 图像 → 向量 | 度量学习、CLIP | Recall@K |
检测 vs 分割:检测给"框 + 类别",分割给"像素级掩码"。业务上:质检用分类/检测,医学影像、自动驾驶用分割,跨模态搜索用嵌入。
五、图像任务的黄金配方:迁移学习
几乎所有实际图像项目都从预训练模型开始,而不是从零训练:
- 加载预训练权重:ImageNet 上训练好的 ResNet/EfficientNet(免费、质量高);
- 替换分类头:把最后全连接层换成自己任务的输出维度;
- 两阶段训练:先冻结主干只训新分类头(几轮),再解冻主干小学习率微调(few epochs);
- 数据增强:随机裁剪、翻转、颜色抖动(每 epoch 变着花样喂数据,等于免费扩数据)。
python
import torchvision.models as models
import torch.nn as nn
backbone = models.resnet18(weights=models.ResNet18_Weights.IMAGENET1K_V1)
backbone.fc = nn.Linear(512, num_classes) # 换分类头
# 冻结主干(先只训分类头)
for p in backbone.parameters():
p.requires_grad = False
for p in backbone.fc.parameters():
p.requires_grad = True为什么有效:ImageNet 上学到的底层特征(边缘、纹理、形状)是通用的,小数据集任务只需适配高层语义。冻结 + 微调的分层策略是小数据图像项目的核心套路。
迁移学习的三条纪律
- 数据增强别过度:翻转/裁剪对"方向敏感"任务(车牌识别、医学图像)会毁掉标签语义;
- 微调学习率要小:预训练权重已经很好了,学习率大一步就毁了;
- 类别不平衡照旧要处理:预训练解决的是"特征",不是"样本分布"。
六、训练图像模型的关键技巧
- BatchNorm:CNN 标配,稳定训练、加速收敛、自带轻微正则化(放在卷积后、激活前);
- 学习率:warmup + 余弦退火,峰值 1e-3 量级(微调时 1e-4~1e-5);
- 标签平滑(Label Smoothing):分类头输出软化(不追求 100% 置信),抑制过拟合;
- EMA(指数滑动平均):对权重做滑动平均,推理用均值权重,稳定涨点;
- 混合精度训练:FP16 前向/反向 + FP32 主权重,显存减半、速度翻倍(PyTorch AMP 一行开启)。
七、视觉大模型与现状(2023–2026)
CNN 之后,视觉进入"大模型"时代:
- CLIP(2021):图像 + 文本联合训练,图像编码器学到跨模态语义——"猫的照片"和"cat"映射到相近向量,支撑文生图(Stable Diffusion 用它做文本编码)与零样本分类;
- SAM(2023):分割一切(Segment Anything),提示词驱动(点/框/文本)的通用分割模型;
- 视觉-语言模型(VLM):GPT-4V、Gemini、Qwen-VL 等把视觉理解并入 LLM,图像问答、文档理解成为主流;
- 视觉 tokenizer 趋势:越来越多系统把图像切成 token 喂给 Transformer——CNN 的"局部先验"正在被"数据规模"替代。
给从业者的现状判断:工业界视觉项目 = 预训练 CNN/ViT 微调 + 检测/分割框架(MMDetection、Detectron2)+ 数据增强 + 蒸馏(大模型蒸馏成小模型部署)。大模型(VLM)负责"理解",小模型负责"高速推理"。
八、权衡与取舍
- CNN vs ViT:数据小、资源少 → CNN(先验强、效率高);数据大、要跨模态 → ViT/视觉大模型;
- 精度 vs 速度:检测用 YOLO(快)还是 Faster R-CNN(准)——按实时性需求定;部署量化 + TensorRT/ONNX 加速;
- 微调 vs 蒸馏:小模型直接微调简单,大模型蒸馏到小模型质量更高但工程重;
- 监督 vs 自监督:标注贵时用自监督预训练(MAE、DINO)或 CLIP 零样本,再少量标注微调。
延伸阅读
- 深度学习基础——CNN 的数学与网络底座
- Transformer 与 NLP——ViT 的架构来源
- 大语言模型(LLM)——视觉-语言模型的融合
- 生成式模型——扩散模型与文生图
- 经典论文精读——AlexNet/ResNet 精读
- 数据集与工具档案——ImageNet、COCO 等公开数据集
参考资料
- Krizhevsky et al. ImageNet Classification with Deep Convolutional Neural Networks(AlexNet, NeurIPS 2012)
- He et al. Deep Residual Learning for Image Recognition(ResNet, CVPR 2016)
- Simonyan & Zisserman. Very Deep Convolutional Networks(VGG, ICLR 2015)
- Tan & Le. EfficientNet: Rethinking Model Scaling(ICML 2019)
- Dosovitskiy et al. An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale(ViT, ICLR 2021)
- Redmon et al. You Only Look Once(YOLO, CVPR 2016)
- Radford et al. Learning Transferable Visual Models From Natural Language Supervision(CLIP, ICML 2021)
- Kirillov et al. Segment Anything(SAM, ICCV 2023)
- Deng et al. ImageNet: A Large-Scale Hierarchical Image Database(CVPR 2009) —— ImageNet 数据集论文