一、VGG 网络诞生背景VGGNet 由牛津大学视觉几何组 VGG 联合 Google DeepMind 提出亮相于 2014 年 ImageNet 图像分类竞赛 ILSVRC-2014最终拿下亚军当年冠军为 GoogLeNet。日常大家口中的 VGG默认指VGG-16包含 13 层卷积层 3 层全连接层总权重层 16 层另有加深版本 VGG-1919 层权重。 对比初代深度 CNN AlexNetVGG 核心优势网络深度更深特征提取能力更强结构规整、模块化易复现、易迁移泛化性能优秀后续检测、分割任务大量用作骨干网络 VGG-16 总参数量约 1.38 亿相比 AlexNet 参数量更大对硬件算力、存储有更高要求。二、VGG 全套网络配置6 种结构 A/A-LRN/B/C/D/E论文一共给出 6 种不同深度的 VGG 结构区别仅在于卷积层堆叠数量表格结构权重层数核心差异总参数量百万A11 层最少卷积无重复堆叠133A-LRN11 层在 A 基础上增加 LRN 局部归一化层133B13 层增加两组 3×3 卷积堆叠133C16 层在 B 基础上插入 1×1 卷积134D(VGG16)16 层全部使用 3×3 卷积堆叠工业最常用138E(VGG19)19 层进一步加深卷积堆叠层数144实验证明两点关键结论AlexNet 中的 LRN 局部响应归一化层提升极小后续主流 VGG16/19 全部舍弃单纯堆叠 3×3 卷积比插入 1×1 卷积效果更好因此 VGG16 (D) 成为标准版本。三、VGG 核心结构VGG Block 模块化设计VGG 最标志性设计就是VGG 块vgg-block整套网络由重复的卷积块 池化层串联而成结构高度统一 单个 Block 标准流程多层3×3卷积ReLU激活 → 2×2最大池化MaxPool卷积统一超参所有卷积层通用卷积核3×3步幅 stride1填充 padding1 作用卷积前后特征图宽高尺寸不变方便多层堆叠。池化统一超参所有池化层通用池化核2×2步幅 stride2 作用每经过一个 Block特征图宽、高减半尺寸规整递减224 → 112 → 56 → 28 → 14 → 7四、VGG16 逐层完整维度拆解输入 224×224×3 RGB 图VGG16 一共 5 个 VGG 卷积块5 次下采样池化末尾接三层全连接 Softmax 输出。Block12 层 Conv输入224×224×3 → Conv3-64 → 224×224×64 ReLUConv3-64 → 224×224×64 ReLUMaxPool2×2/2 → 输出 112×112×64Block22 层 Conv输入112×112×64 → Conv3-128 → 112×112×128 ReLUConv3-128 → 112×112×128 ReLUMaxPool2×2/2 → 输出 56×56×128Block33 层 Conv输入56×56×128 → Conv3-256 ×3 → 56×56×256MaxPool2×2/2 → 输出 28×28×256Block43 层 Conv输入28×28×256 → Conv3-512 ×3 → 28×28×512MaxPool2×2/2 → 输出 14×14×512Block53 层 Conv输入14×14×512 → Conv3-512 ×3 → 14×14×512MaxPool2×2/2 → 输出 7×7×512全连接分类头Flatten 展平7×7×512 25088 一维特征FC14096 神经元 ReLU DropoutFC24096 神经元 ReLU DropoutFC31000 神经元ImageNet1000 分类Softmax输出各类别概率模型代码import torch from torch import nn from torchsummary import summary class VGG16(nn.Module): def __init__(self): super(VGG16,self).__init__() self.block1 nn.Sequential( nn.Conv2d(in_channels1,out_channels64,kernel_size3,padding1), nn.ReLU(), nn.Conv2d(in_channels64, out_channels64, kernel_size3, padding1), nn.ReLU(), nn.MaxPool2d(kernel_size2,stride2) ) self.block2 nn.Sequential( nn.Conv2d(in_channels64, out_channels128, kernel_size3, padding1), nn.ReLU(), nn.Conv2d(in_channels128, out_channels128, kernel_size3, padding1), nn.ReLU(), nn.MaxPool2d(kernel_size2, stride2) ) self.block3 nn.Sequential( nn.Conv2d(in_channels128,out_channels256,kernel_size3,padding1), nn.ReLU(), nn.Conv2d(in_channels256, out_channels256, kernel_size3, padding1), nn.ReLU(), nn.Conv2d(in_channels256, out_channels256, kernel_size3, padding1), nn.ReLU(), nn.MaxPool2d(kernel_size2,stride2) ) self.block4 nn.Sequential( nn.Conv2d(in_channels256,out_channels512,kernel_size3,padding1), nn.ReLU(), nn.Conv2d(in_channels512, out_channels512, kernel_size3, padding1), nn.ReLU(), nn.Conv2d(in_channels512, out_channels512, kernel_size3, padding1), nn.ReLU(), nn.MaxPool2d(kernel_size2,stride2) ) self.block5 nn.Sequential( nn.Conv2d(in_channels512, out_channels512, kernel_size3, padding1), nn.ReLU(), nn.Conv2d(in_channels512, out_channels512, kernel_size3, padding1), nn.ReLU(), nn.Conv2d(in_channels512, out_channels512, kernel_size3, padding1), nn.ReLU(), nn.MaxPool2d(kernel_size2,stride2), ) self.block6 nn.Sequential( nn.Flatten(), nn.Linear(7 * 7 * 512, 256), nn.ReLU(), nn.Dropout(0.5), nn.Linear(256, 128), nn.ReLU(), nn.Dropout(0.5), nn.Linear(128, 10), ) for m in self.modules(): if isinstance(m, nn.Conv2d): nn.init.kaiming_normal_(m.weight, nonlinearityrelu) if m.bias is not None: nn.init.constant_(m.bias, 0) elif isinstance(m, nn.Linear): nn.init.normal_(m.weight, 0, 0.01) if m.bias is not None: nn.init.constant_(m.bias, 0) def forward(self,x): x self.block1(x) x self.block2(x) x self.block3(x) x self.block4(x) x self.block5(x) x self.block6(x) return x if __name__ __main__: device torch.device(cuda if torch.cuda.is_available() else cpu) modelVGG16().to(device) summary(model,(1,244,244))五、VGG 四大核心设计亮点1. 全程使用 3×3 小卷积核替代大尺寸卷积以往 AlexNet 使用 11×11、5×5 大卷积VGG 全部统一 3×3两层 3×3 卷积堆叠感受野等价于 1 层 5×5 卷积三层 3×3 等价 7×7多层非线性激活叠加特征拟合能力更强同等感受野下3×3 组合参数量更少、计算更高效。2. 模块化 Block结构极简易扩展5 组结构相似的卷积块重复堆叠只需要调整每个 Block 内卷积层数就能轻松实现 VGG11/VGG16/VGG19工程实现、网络修改成本极低。3. 特征图尺寸规整递减便于计算与调试依靠padding1、stride1卷积保尺寸2×2池化stride2固定减半每层输出维度可精准推导调参、可视化特征更友好。4. 迁移学习能力极强虽然 VGG 参数量大、推理速度慢但浅层卷积提取通用边缘、纹理特征深层提取高级语义特征至今仍是图像分类、目标检测、语义分割任务中最常用的预训练骨干网络之一。六、VGG 网络优缺点总结优点结构简单、逻辑清晰新手友好极易代码复现小卷积堆叠带来更强非线性表达分类精度高预训练权重通用性强迁移学习效果稳定网络分层规律特征可视化、消融实验方便。缺点参数量巨大VGG16 1.38 亿大量参数集中在全连接层内存占用高全连接层计算量大推理速度慢不适合移动端实时部署无残差结构深度无法无限加深对比后续 ResNet 上限更低没有分组卷积、空洞卷积等轻量化设计算力开销大。七、VGG 实战使用场景图像分类 baseline小型数据集训练首选预训练 VGG微调成本低目标检测骨干早期 Faster R-CNN 标配骨干网络图像分割FCN、U-Net 早期版本使用 VGG 提取编码器特征特征提取无需分类头截取卷积层输出做图像检索、相似度匹配。