🎯 学习目标

  • 了解经典CNN架构的演进历程
  • 理解各架构的核心创新点
  • 掌握ResNet残差连接的实现
  • 学会使用torchvision预训练模型
CNN架构演进

CNN发展历程

自2012年AlexNet在ImageNet竞赛中取得突破性成绩以来,卷积神经网络经历了飞速发展。 从LeNet的雏形,到VGG的深度探索,再到ResNet的残差革命,每一代架构都带来了重要的技术突破。

📜 经典架构时间线

1998

LeNet-5

Yann LeCun提出,用于手写数字识别。奠定CNN基础架构:卷积-池化-全连接。

2012

AlexNet

深度学习复兴之作,引入ReLU、Dropout、数据增强,在ImageNet上取得突破。

2014

VGGNet

探索网络深度,使用小卷积核(3x3)堆叠,证明深度对性能的重要性。

2014

GoogLeNet (Inception)

引入Inception模块,多尺度特征提取,大幅减少参数量。

2015

ResNet

残差连接解决深层网络训练难题,可训练上百层网络,成为现代网络基石。

2017

DenseNet

密集连接,每一层与前面所有层连接,特征重用,参数效率高。

⚖️ 经典架构对比

架构 深度 参数量 Top-1准确率 核心创新
LeNet-5 5层 ~60K - CNN基本架构
AlexNet 8层 ~60M 63.3% ReLU, Dropout
VGG-16 16层 ~138M 71.5% 小卷积核堆叠
ResNet-50 50层 ~25M 76.1% 残差连接
ResNet-152 152层 ~60M 78.3% 残差连接
DenseNet-121 121层 ~8M 74.9% 密集连接

🔧 ResNet残差块实现

import torch import torch.nn as nn class BasicBlock(nn.Module): """ResNet基础残差块""" def __init__(self, in_channels, out_channels, stride=1): super().__init__() self.conv1 = nn.Conv2d(in_channels, out_channels, 3, stride=stride, padding=1, bias=False) self.bn1 = nn.BatchNorm2d(out_channels) self.relu = nn.ReLU(inplace=True) self.conv2 = nn.Conv2d(out_channels, out_channels, 3, stride=1, padding=1, bias=False) self.bn2 = nn.BatchNorm2d(out_channels) # 如果输入输出维度不同,需要shortcut连接进行调整 self.shortcut = nn.Sequential() if stride != 1 or in_channels != out_channels: self.shortcut = nn.Sequential( nn.Conv2d(in_channels, out_channels, 1, stride=stride, bias=False), nn.BatchNorm2d(out_channels) ) def forward(self, x): identity = x out = self.conv1(x) out = self.bn1(out) out = self.relu(out) out = self.conv2(out) out = self.bn2(out) # 残差连接:F(x) + x out += self.shortcut(identity) out = self.relu(out) return out

💻 使用预训练模型

import torchvision.models as models # 加载预训练的ResNet-50 resnet = models.resnet50(pretrained=True) # 修改最后一层适应自定义任务 num_features = resnet.fc.in_features resnet.fc = nn.Linear(num_features, 10) # 10分类 # 可用的预训练模型 vgg16 = models.vgg16(pretrained=True) densenet = models.densenet121(pretrained=True) mobilenet = models.mobilenet_v2(pretrained=True) efficientnet = models.efficientnet_b0(pretrained=True) # 查看模型结构 print(resnet)

📊 架构创新点解析

🔗

残差连接

ResNet
H(x) = F(x) + x
解决梯度消失

🌐

Inception

多尺度卷积
1x1, 3x3, 5x5并行
捕获多尺度特征

🔗

密集连接

DenseNet
特征重用
参数高效

🚀 现代架构趋势

# 轻量化模型 # MobileNet: 深度可分离卷积 mobilenet_v3 = models.mobilenet_v3_small(pretrained=True) # ShuffleNet: 通道混洗 shufflenet = models.shufflenet_v2_x1_0(pretrained=True) # 高效模型 # EfficientNet: 复合缩放 efficientnet = models.efficientnet_b0(pretrained=True) # Vision Transformer (ViT) vit = models.vit_b_16(pretrained=True) # ConvNeXt: 现代化CNN convnext = models.convnext_tiny(pretrained=True)
💡
模型选择建议

图像分类首选ResNet系列(ResNet-50/101),资源受限场景选MobileNet或EfficientNet,追求极致精度可尝试Vision Transformer或ConvNeXt。

深度神经网络
图:经典CNN架构奠定了现代深度视觉的基础

📝 本节小结

  • • LeNet奠定CNN基础架构,AlexNet开启深度学习时代
  • • VGG证明深度重要性,使用3x3小卷积核堆叠
  • • ResNet残差连接解决深层网络训练难题
  • • torchvision.models提供丰富的预训练模型
  • • 现代趋势:轻量化、注意力机制、Transformer架构