Dark Dwarf Blog background

VGGNet 网络

VGGNet 网络

VGGNet 这一网络架构揭示了网络深度对模型性能的影响,它只使用简单的 3x3 卷积核就得到了非常好的结果。

1. 网络架构

VGGNet 网络的设计哲学如下:

  1. 使用小卷积核:全部使用很小的 3x3 卷积核。
  2. 使用小池化核:使用 2x2 的最大池化。
  3. 保持总体结构统一:通过 Padding 保持卷积后的尺寸不变,通过池化来缩小尺寸,并且每次池化后通道数翻倍。

这种“尺寸减半,通道翻倍”的设计促使网络学习一种层级化的特征表示:牺牲空间精度来换取更丰富的语义信息。

VGGNet 的整个网络都使用 3x3 小卷积核代替 AlexNet 中的大卷积核。根据感受野的计算,三层 3x3 卷积核的感受野和一个 7x7 的卷积核是有一样的,但是全部使用 3x3 的有如下的优点:

  1. 参数量更少了:7×7>3×3×37\times 7 \gt 3\times 3\times 3
  2. 3层卷积核之间可以穿插 ReLU、引入更多非线性。

2. 简单实现

下面我们使用在 AlexNet 中使用的 CIFAR-10 数据集测试一下 VGG 架构的效果。我们的核心模块是下面的 3x3 卷积核:

nn.Conv2d(c1, c2, 3, padding=1),
nn.BatchNorm2d(c2),
nn.ReLU(inplace=True),
nn.MaxPool2d(2, 2),

完整实现如下:

可以看到,只通过堆叠 3x3 的卷积核,我们的网络就达到了和仿 AlexNet 网络差不多的结果。