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 nn

class VGG16(nn.Module):
    def __init__(self, num_classes=1000):
        super(VGG16, self).__init__()
        self.features = nn.Sequential(
            # 卷积块1
            nn.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)通过残差连接和瓶颈设计进一步优化了深度网络的训练效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值