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

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)通过残差连接和瓶颈设计进一步优化了深度网络的训练效率。

http://www.xdnf.cn/news/4615.html

相关文章:

  • java集成telegram机器人
  • [特殊字符]【实战教程】用大模型LLM查询Neo4j图数据库(附完整代码)
  • 赋能金融科技创新,Telerik打造高效、安全的金融应用解决方案!
  • Linux58 ssh服务配置 jumpserver 测试双网卡 为何不能ping通ip地址
  • 从ellisys空口分析蓝牙耳机回连手机失败案例
  • 正则表达式(Regular Expression)详解
  • 关于ubuntu下交叉编译arrch64下的gtsam报错问题,boost中boost_regex.so中连接libicui18n.so.55报错的问题
  • 【Python 字符串】
  • Java常用API:深度解析与实践应用
  • 【Spring Boot 多模块项目】@MapperScan失效、MapperScannerConfigurer 报错终极解决方案
  • 安装 Docker
  • ZC706开发板教程:windows下编译ADRV9009
  • vue 中如何使用region?
  • PyTorch 实战:从 0 开始搭建 Transformer
  • 解决word里插入公式后打不开的问题
  • Linux-openeuler更换yum镜像源
  • uniapp + vue3 + 京东Nut动作面板组件:实现登录弹框组件(含代码、案例、小程序截图)
  • 村田与RohdeSchwarz联合开发用于测量Digital ET省电效果的RF系统
  • 网络化:DevOps 工程的必要基础(Networking: The Essential Foundation for DevOps Engineering)
  • 幂等的几种解决方案以及实践
  • STM32G070xx将Flash页分块方式存储,固定数据块存储,实现一次擦除多次写入
  • 【C语言】文件操作(续)
  • 一个用C#开发的记事本Notepads开源编辑器
  • Python实现中文数字与阿拉伯数字映射生成器(支持0-9999)
  • WebFlux与HttpStreamable关系解析
  • HuggingFace与自然语言处理(从框架学习到经典项目实践)[ 01 API操作 ]
  • 极简远程革命:节点小宝 — 无公网IP的极速内网穿透远程解决方案
  • 《开源先锋Apache软件基金会:历史沿革、顶级项目与行业影响》
  • 新能源汽车赛道变局:传统车企子品牌私有化背后的战略逻辑
  • java 破解aspose.words 18.6 使用