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

VGG-19(Visual Geometry Group)模型

VGG-19 是由牛津大学视觉几何组和 Google DeepMind 的研究人员在 2014 年提出的一个非常经典的深度卷积神经网络模型

一 核心结构

(1)深度: 模型名称中的 "19" 指的是模型拥有 19 层带有权重的层(通常指:16 个卷积层 + 3 个全连接层 = 19。如果严格数带参数的层,输入层和 ReLU 激活层不计入深度统计)。

(2)简单范式: VGG 系列模型(包括 VGG-11, VGG-13, VGG-16, VGG-19)的核心思想非常简单:只使用非常小的 3x3 卷积核,并通过连续堆叠多个这样的卷积层来构建一个很深的网络。这种设计在保持相同感受野的同时,大大减少了参数量(相比大卷积核),并增加了网络的深度和非线性。

(3)结构图:

输入图像 (224x224x3 RGB)
-> 2 x [卷积 (3x3, 64)] -> 最大池化 (2x2)  // Block 1
-> 2 x [卷积 (3x3, 128)] -> 最大池化 (2x2) // Block 2
-> 4 x [卷积 (3x3, 256)] -> 最大池化 (2x2) // Block 3
-> 4 x [卷积 (3x3, 512)] -> 最大池化 (2x2) // Block 4
-> 4 x [卷积 (3x3, 512)] -> 最大池化 (2x2) // Block 5
-> 3 x [全连接 (4096, 4096, 1000)]        // FC Layers
-> Softmax -> 1000 类输出概率

(4)激活函数: 所有卷积层和全连接层后都使用 ReLU (Rectified Linear Unit) 激活函数,这是深度学习中常见的非线性激活函数。

(5)池化层: 使用 2x2 的最大池化层(Max Pooling),步长为 2,在每组卷积块之后将特征图的空间尺寸减半。总共有 5 次空间下采样(池化)。

(6)全连接层: 在卷积部分之后,通常有两个 4096 单元的全连接层,最后是一个 1000 单元(对应 ImageNet 的 1000 个类别)的输出层。

二 模型特点

(1)深度有效: 通过堆叠多个小的 3x3 卷积核,VGG-19 证明了增加网络深度(层数)能显著提升模型理解复杂视觉特征的能力。

(2)结构统一: 所有卷积层都使用相同的 3x3 核大小(步幅为 1,填充为 1 以保持空间分辨率直到池化),设计非常一致且易于理解。

(3)参数量大: VGG-19 是一个非常大的模型,拥有约 1.38 亿个参数,主要集中在最后几个全连接层。这使得它训练和推理都非常耗费计算资源和内存

(4)高精度 (At the time): 在 2014 年的 ImageNet 竞赛中,VGG-19 展现出了当时最顶尖的识别精度。(虽然当年冠军是 GoogLeNet/Inception-v1,但 VGG 因其结构简单、效果显著而极具影响力)

三 与之前版本的区别

VGG-16(13 个卷积层 + 3 个全连接层)举例:

VGG-16 和 VGG-19 的结构非常相似,主要区别在于 Block 3、4、5 中卷积层的数量

Block 3, VGG-16 有 3 层卷积,VGG-19 有 4 层。

Block 4, VGG-16 有 3 层卷积,VGG-19 有 4 层。

Block 5, VGG-16 有 3 层卷积,VGG-19 有 4 层。

VGG-19 比 VGG-16 更深(多 3 个卷积层),参数量也略多(但量级都在 1.38 亿附近)。精度通常略高于 VGG-16,但提升边际效应递减。

输入图像 (224x224x3 RGB)
-> 2 x [卷积 (3x3, 64)] -> 最大池化 (2x2)  // Block 1
-> 2 x [卷积 (3x3, 128)] -> 最大池化 (2x2) // Block 2
-> 3 x [卷积 (3x3, 256)] -> 最大池化 (2x2) // Block 3
-> 3 x [卷积 (3x3, 512)] -> 最大池化 (2x2) // Block 4
-> 3 x [卷积 (3x3, 512)] -> 最大池化 (2x2) // Block 5
-> 3 x [全连接 (4096, 4096, 1000)]        // FC Layers
-> Softmax -> 1000 类输出概率
# VGG-16模型定义
class VGG16(nn.Module):def __init__(self, num_classes=10):super(VGG16, self).__init__()self.features = nn.Sequential(# Block 1nn.Conv2d(3, 64, kernel_size=3, padding=1),nn.BatchNorm2d(64),nn.ReLU(inplace=True),nn.Conv2d(64, 64, kernel_size=3, padding=1),nn.BatchNorm2d(64),nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=2, stride=2),# Block 2nn.Conv2d(64, 128, kernel_size=3, padding=1),nn.BatchNorm2d(128),nn.ReLU(inplace=True),nn.Conv2d(128, 128, kernel_size=3, padding=1),nn.BatchNorm2d(128),nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=2, stride=2),# Block 3nn.Conv2d(128, 256, kernel_size=3, padding=1),nn.BatchNorm2d(256),nn.ReLU(inplace=True),nn.Conv2d(256, 256, kernel_size=3, padding=1),nn.BatchNorm2d(256),nn.ReLU(inplace=True),nn.Conv2d(256, 256, kernel_size=3, padding=1),nn.BatchNorm2d(256),nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=2, stride=2),# Block 4nn.Conv2d(256, 512, kernel_size=3, padding=1),nn.BatchNorm2d(512),nn.ReLU(inplace=True),nn.Conv2d(512, 512, kernel_size=3, padding=1),nn.BatchNorm2d(512),nn.ReLU(inplace=True),nn.Conv2d(512, 512, kernel_size=3, padding=1),nn.BatchNorm2d(512),nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=2, stride=2),# Block 5nn.Conv2d(512, 512, kernel_size=3, padding=1),nn.BatchNorm2d(512),nn.ReLU(inplace=True),nn.Conv2d(512, 512, kernel_size=3, padding=1),nn.BatchNorm2d(512),nn.ReLU(inplace=True),nn.Conv2d(512, 512, kernel_size=3, padding=1),nn.BatchNorm2d(512),nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=2, stride=2),)

四 VGG优缺点

优点缺点
 历史贡献:深度验证
首创使用连续小卷积堆叠深度网络
- 证明了网络深度对性能的关键作用
参数量过大(主要缺陷)
- 全连接层(FC)参数量爆炸:
- FC1: 25088×4096 ≈ 1.03亿参数
- 总参数量高达 1.38亿
结构统一性
- 仅用 3×3小卷积核 + 2×2最大池化
- 模块化堆叠(64→128→256→512通道)
计算资源消耗大
- 大量卷积+全连接导致:
训练/推理速度慢
- 显存占用高(移动端难以部署)
特征表达能力强大
- 深层网络捕获多尺度特征
- 特征通用性极优(适用于迁移学习)
梯度问题
- 原始版本未用BN层(Batch Normalization)
- 训练易出现梯度消失/爆炸(需配合Dropout)
广泛迁移应用
- 预训练特征成为早期CV任务标准骨干
- 如目标检测、图像风格迁移等
全连接冗余严重
- FC层参数占整体 >90%
- 后发模型(如ResNet)用全局池化替代FC
简洁设计理念
- 架构规整透明,易于复现/改进
- 小卷积堆叠优于大核(更多非线性+更少参数)
训练成本高昂
- 需大数据集(ImageNet级)防止过拟合
- 对超参数敏感

VGG-19 尽管它取得了显著的高精度,但因其庞大的参数量和计算开销,在新模型设计和效率敏感的部署场景中已被 ResNet 等更现代的网络结构所取代。但在图像表示学习、迁移学习和理解深度网络基础方面,VGG-19 仍然是一个非常重要和经典的基准模型。 

http://www.lryc.cn/news/571829.html

相关文章:

  • Linux系统移植11:修改网络驱动
  • 获取jenkins中的构建数据
  • FPGA基础 -- Verilog行为级建模之时序控制
  • markRaw
  • 【java中使用stream处理list数据提取其中的某个字段,并由List<String>转为List<Long>】
  • 爱普特APT32F1104C8T6单片机 高抗干扰+硬件加密双保障
  • 支持向量机(SVM)例题
  • VS Code自动删除末尾空行设置
  • 无需公网IP:Termux+手机+内网穿透实现Minecraft远程多人联机
  • Python从入门到精通
  • Python数据操作
  • Docker搭建RabbitMQ集群环境
  • 机器学习重构光子学设计范式:从智能器件到前沿系统
  • 【力扣每日一题】划分数组并满足最大差限制
  • iOS开发中的安全实践:如何通过Ipa混淆与加固确保应用安全
  • AI 技术落地实战:开发流程优化、行业场景重塑与前沿应用洞察
  • Evertz SVDN 3080ipx-10G Web管理接口任意命令注入及认证绕过漏洞(CVE-2025-4009)
  • Hive 逻辑优化器
  • 持续集成 CI/CD-Jenkins持续集成GitLab项目打包docker镜像推送k8s集群并部署至rancher
  • 京东618带火四大消费 即时零售和生活服务迎来爆发
  • 几种大功率远距传输WiFI解决方案
  • Spring Boot 常用注解整理
  • 支持selenium的chrome driver更新到137.0.7151.119
  • 面向智能制造场景的永磁同步电机预测控制系统设计
  • python大学校园旧物捐赠系统
  • 火山 RTC 引擎12----合流转推 集成
  • (LeetCode 每日一题) 2966. 划分数组并满足最大差限制 (贪心、排序)
  • [Python][Flask][Gunicorn] 搭建一个服务器-初步-小白式教程 - 1
  • 【系统分析师】第3章-基础知识:计算机系统(核心总结)
  • 如何在 MX Linux 上安装 Blender CAD 软件