VGGNet详解
VGGNet 由牛津大学视觉几何组(Visual Geometry Group)在2014年提出,凭借极简的 3×3卷积核堆叠设计 成为经典模型,影响了后续大量网络架构。
1. 网络结构
VGGNet 的核心思想是 通过多层小卷积核(3×3)替代大卷积核,在保持感受野的同时减少参数量并增强非线性。共有6种配置(VGG11-VGG19),最常用的是 VGG16 和 VGG19(数字代表带权重的层数)。
以 VGG16 为例(输入224×224×3 RGB图像):
层类型 | 参数说明 | 输出尺寸 |
---|---|---|
卷积块1 | 2层3×3卷积(64通道),步长1,填充1 | 224×224×64 |
最大池化 | 2×2池化,步长2 | 112×112×64 |
卷积块2 | 2层3×3卷积(128通道) | 112×112×128 |
最大池化 | 2×2池化,步长2 | 56×56×128 |
卷积块3 | 3层3×3卷积(256通道) | 56×56×256 |
最大池化 | 2×2池化,步长2 | 28×28×256 |
卷积块4 | 3层3×3卷积(512通道) | 28×28×512 |
最大池化 | 2×2池化,步长2 | 14×14×512 |
卷积块5 | 3层3×3卷积(512通道) | 14×14×512 |
最大池化 | 2×2池化,步长2 | 7×7×512 |
全连接层 | 展平为25088维 → 4096神经元 | 4096 |
全连接层 | 4096 → 4096神经元 | 4096 |
输出层 | 4096 → 1000神经元(ImageNet类别) | 1000 |
2. 核心设计特点
(1) 小卷积核堆叠
- 3×3卷积的优势:
- 两层3×3卷积的感受野等效于一层5×5卷积,但参数量更少(2×3²=18 vs 5²=25)。
- 三层3×3卷积的感受野等效于7×7,同时引入更多非线性(ReLU)。
- 1×1卷积:在部分版本(如VGG16)中用于通道变换(类似Inception的降维)。
(2) 统一设计
- 所有卷积层使用 相同填充(padding=1) 和 步长1,保持空间分辨率不变(池化层负责降采样)。
- 全连接层参数量极大(占总数约90%),后续模型(如ResNet)通过全局平均池化(GAP)减少参数。
(3) 其他细节
- 激活函数:全部使用ReLU(AlexNet的改进延续)。
- 池化层:仅用最大池化(2×2,步长2),无重叠池化。
- 无归一化层:未使用BatchNorm(2015年后成为标配)。
3. 为什么VGGNet有效?
- 深度的重要性:证明堆叠更多卷积层可提升特征抽象能力(VGG16比AlexNet深3倍)。
- 小卷积核的高效性:参数量更少,且能捕捉更复杂的非线性特征。
- 结构规整:便于迁移学习(如提取中间层特征用于其他任务)。
4. 代码实现(PyTorch示例)
import torch.nn as nnclass VGG16(nn.Module):def __init__(self, num_classes=1000):super(VGG16, self).__init__()self.features = nn.Sequential(# 卷积块1nn.Conv2d(3, 64, kernel_size=3, padding=1),nn.ReLU(inplace=True),nn.Conv2d(64, 64, kernel_size=3, padding=1),nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=2, stride=2),# 卷积块2-5(类似结构,通道数增加)# ...(详见完整代码)# 卷积块5后接池化nn.MaxPool2d(kernel_size=2, stride=2),)self.avgpool = nn.AdaptiveAvgPool2d((7, 7)) # 自适应池化兼容不同输入尺寸self.classifier = nn.Sequential(nn.Linear(512*7*7, 4096),nn.ReLU(inplace=True),nn.Dropout(p=0.5),nn.Linear(4096, 4096),nn.ReLU(inplace=True),nn.Dropout(p=0.5),nn.Linear(4096, num_classes),)def forward(self, x):x = self.features(x)x = self.avgpool(x)x = x.view(x.size(0), -1)x = self.classifier(x)return x
5. 参数量与计算成本
- VGG16:约1.38亿参数,其中:
- 卷积层:约1470万参数(占10.6%)。
- 全连接层:约1.23亿参数(占89.4%)。
- VGG19:约1.44亿参数,深度增加但参数量增长不明显(因全连接层占比大)。
6. 优缺点
优点
- 结构简单:易于实现和扩展。
- 迁移学习友好:预训练特征广泛用于目标检测(如Faster R-CNN)、语义分割(如FCN)。
缺点
- 全连接层冗余:参数量大,易过拟合(需依赖Dropout和数据增强)。
- 计算成本高:FLOPs远超后续模型(如ResNet)。
7. 后续改进
- 全连接层替代:用全局平均池化(GAP)减少参数(如NiN、ResNet)。
- 加入BatchNorm:加速训练并提升精度(VGG16-BN)。
- 轻量化变体:如VGG-M(减少通道数)。
总结
VGGNet 以极简的 3×3卷积堆叠 证明了深度对特征学习的重要性,其规整的结构使其成为迁移学习的基石。尽管参数量大,但它在许多任务中仍是可靠的基准模型。后续模型(如ResNet)通过残差连接和瓶颈设计进一步优化了深度网络的训练效率。