当前位置: 首页 > news >正文

VGGNet详解

VGGNet 由牛津大学视觉几何组(Visual Geometry Group)在2014年提出,凭借极简的 3×3卷积核堆叠设计 成为经典模型,影响了后续大量网络架构。


1. 网络结构

VGGNet 的核心思想是 通过多层小卷积核(3×3)替代大卷积核,在保持感受野的同时减少参数量并增强非线性。共有6种配置(VGG11-VGG19),最常用的是 VGG16VGG19(数字代表带权重的层数)。
VGG16 为例(输入224×224×3 RGB图像):

层类型参数说明输出尺寸
卷积块12层3×3卷积(64通道),步长1,填充1224×224×64
最大池化2×2池化,步长2112×112×64
卷积块22层3×3卷积(128通道)112×112×128
最大池化2×2池化,步长256×56×128
卷积块33层3×3卷积(256通道)56×56×256
最大池化2×2池化,步长228×28×256
卷积块43层3×3卷积(512通道)28×28×512
最大池化2×2池化,步长214×14×512
卷积块53层3×3卷积(512通道)14×14×512
最大池化2×2池化,步长27×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有效?

  1. 深度的重要性:证明堆叠更多卷积层可提升特征抽象能力(VGG16比AlexNet深3倍)。
  2. 小卷积核的高效性:参数量更少,且能捕捉更复杂的非线性特征。
  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)通过残差连接和瓶颈设计进一步优化了深度网络的训练效率。

相关文章:

  • 裸辞8年前端的面试笔记——JavaScript篇(一)
  • 深入理解 Docker 网络原理:构建高效、灵活的容器网络
  • 在Lua中使用轻量级userdata在C/C++之间传递数据和调用函数
  • MySQL中MVCC的实现原理
  • 【MySQL】存储引擎 - InnoDB详解
  • 区块链内容创作全攻略:海报、白皮书与视频的视觉化革命
  • commonmark.js 源码阅读(一) - Block Parser
  • 【Linux】FreeRTOS与Linux:实时与通用的终极对比
  • DApp开发:开启去中心化应用新时代
  • Solidity语言基础:区块链智能合约开发入门指南
  • Windows Server 2025 安装AMD显卡驱动
  • C++内存管理与模板初阶详解:从原理到实践
  • Webug4.0靶场通关笔记22- 第27关文件包含
  • systemd vs crontab:Linux 自动化运行系统的全面对比
  • 架空输电线巡检机器人轨迹优化设计
  • 阿里云ddos云防护服务器有哪些功能?ddos防御手段有哪些??
  • C++入门(下)--《Hello C++ World!》(2)(C/C++)
  • 金仓数据库征文-金仓KES数据同步优化实践:逻辑解码与增量同步
  • 深度 |提“智”向新,奔向未来——当前机器人产业观察
  • 实时操作系统:航空电子系统的安全基石还是创新枷锁?
  • 国防部:菲方应停止一切侵权挑衅危险举动,否则只会自食苦果
  • 30平米的无障碍酒吧里,我们将偏见折叠又摊开
  • 重庆市委原常委、政法委原书记陆克华被决定逮捕
  • 俄官员说将适时宣布与乌克兰谈判代表
  • 硅料收储挺价“小作文”发酵光伏板块罕见大涨,知情人士:确实在谈
  • 商务部召开外贸企业圆桌会:全力为外贸企业纾困解难,提供更多支持