深度学习-CNN-VGG

VGG 是由英国牛津大学的 Visual Geometry Group 提出的经典卷积神经网络模型。它在 2014 年的 ImageNet 大规模视觉识别挑战赛(ILSVRC)中表现优异,尤其是 VGG16VGG19,分别包含 16 层和 19 层参数化层。

VGG 的关键特点
  1. 深度网络结构
    VGG 网络的主要特点在于其深度。相比于早期的 AlexNet 等网络,VGG 通过增加网络的深度来提高模型的性能。VGG16 和 VGG19 分别包含 16 和 19 层(不包括池化层和全连接层)。

  2. 小卷积核
    VGG 网络的另一个特点是使用了非常小的卷积核,所有卷积层的卷积核大小均为 3x3,而池化层的步长为 2x2。这种设计不仅保持了网络结构的简单性,还能够提取更细粒度的特征信息。

  3. 堆叠卷积层
    VGG 使用了多个 3x3 的卷积核层堆叠,这种方式能够在保持相对较小参数量的同时,增加网络的非线性能力。每堆叠几层卷积后,会使用池化层进行下采样,从而降低特征图的空间尺寸。

  4. 全连接层与 Softmax 输出
    在 VGG 网络的末端,会连接多个全连接层,最终使用 Softmax 激活函数进行分类。VGG16 和 VGG19 通常用于 1000 类分类任务,因此最终输出 1000 个类别。

网络结构

在这里插入图片描述

以下是 VGG16 的简化网络结构:

  • 输入层:输入图像的大小为 224x224x3(ImageNet 图片大小)。
  • 卷积层:多个 3x3 卷积层叠加,每经过几层卷积后使用 2x2 最大池化进行下采样。
  • 全连接层:3 层全连接层,最后通过 Softmax 输出类别。

VGG 网络的详细结构以其深度和简单性闻名,主要有两个常见版本:VGG16VGG19,它们分别包含 16 层和 19 层参数化层。以下是这两个版本的详细结构。

VGG16 网络结构

VGG16 由 13 个卷积层、5 个最大池化层和 3 个全连接层组成,总共有 16 个可训练的层(参数层)。卷积层的卷积核大小为 3x3,步幅为 1,所有池化层使用 2x2 的最大池化。

VGG16 结构具体如下:
层类型输出尺寸详细配置参数数量
输入层224x224x3-0
卷积层1-1224x224x643x3 卷积, 64 个卷积核, 步长 1, Same 填充1,792
卷积层1-2224x224x643x3 卷积, 64 个卷积核, 步长 1, Same 填充36,928
最大池化层1112x112x642x2 最大池化, 步长 20
卷积层2-1112x112x1283x3 卷积, 128 个卷积核, 步长 1, Same 填充73,856
卷积层2-2112x112x1283x3 卷积, 128 个卷积核, 步长 1, Same 填充147,584
最大池化层256x56x1282x2 最大池化, 步长 20
卷积层3-156x56x2563x3 卷积, 256 个卷积核, 步长 1, Same 填充295,168
卷积层3-256x56x2563x3 卷积, 256 个卷积核, 步长 1, Same 填充590,080
卷积层3-356x56x2563x3 卷积, 256 个卷积核, 步长 1, Same 填充590,080
最大池化层328x28x2562x2 最大池化, 步长 20
卷积层4-128x28x5123x3 卷积, 512 个卷积核, 步长 1, Same 填充1,180,160
卷积层4-228x28x5123x3 卷积, 512 个卷积核, 步长 1, Same 填充2,359,808
卷积层4-328x28x5123x3 卷积, 512 个卷积核, 步长 1, Same 填充2,359,808
最大池化层414x14x5122x2 最大池化, 步长 20
卷积层5-114x14x5123x3 卷积, 512 个卷积核, 步长 1, Same 填充2,359,808
卷积层5-214x14x5123x3 卷积, 512 个卷积核, 步长 1, Same 填充2,359,808
卷积层5-314x14x5123x3 卷积, 512 个卷积核, 步长 1, Same 填充2,359,808
最大池化层57x7x5122x2 最大池化, 步长 20
全连接层14096输入 7x7x512, 输出 4096 个节点102,764,544
全连接层24096输入 4096, 输出 4096 个节点16,781,312
全连接层31000输入 4096, 输出 1000 个分类4,097,000
总参数量-约 138 百万参数-

VGG19 网络结构

VGG19 和 VGG16 的主要区别是 VGG19 在每个卷积层块中多增加了几层卷积层,导致网络的深度增加到 19 层参数化层。它有 16 个卷积层,5 个最大池化层,以及 3 个全连接层,总共 19 层。

VGG19 结构具体如下:
层类型输出尺寸详细配置参数数量
输入层224x224x3-0
卷积层1-1224x224x643x3 卷积, 64 个卷积核, 步长 1, Same 填充1,792
卷积层1-2224x224x643x3 卷积, 64 个卷积核, 步长 1, Same 填充36,928
最大池化层1112x112x642x2 最大池化, 步长 20
卷积层2-1112x112x1283x3 卷积, 128 个卷积核, 步长 1, Same 填充73,856
卷积层2-2112x112x1283x3 卷积, 128 个卷积核, 步长 1, Same 填充147,584
最大池化层256x56x1282x2 最大池化, 步长 20
卷积层3-156x56x2563x3 卷积, 256 个卷积核, 步长 1, Same 填充295,168
卷积层3-256x56x2563x3 卷积, 256 个卷积核, 步长 1, Same 填充590,080
卷积层3-356x56x2563x3 卷积, 256 个卷积核, 步长 1, Same 填充590,080
卷积层3-456x56x2563x3 卷积, 256 个卷积核, 步长 1, Same 填充590,080
最大池化层328x28x2562x2 最大池化, 步长 20
卷积层4-128x28x5123x3 卷积, 512 个卷积核, 步长 1, Same 填充1,180,160
卷积层4-228x28x5123x3 卷积, 512 个卷积核, 步长 1, Same 填充2,359,808
卷积层4-328x28x5123x3 卷积, 512 个卷积核, 步长 1, Same 填充2,359,808
卷积层4-428x28x5123x3 卷积, 512 个卷积核, 步长 1, Same 填充2,359,808
最大池化层414x14x5122x2 最大池化
VGG 的实现示例(使用 TensorFlow/Keras)
import tensorflow as tf
from tensorflow.keras import layers, models

# VGG Block,包含多个 3x3 卷积层 + 最大池化层
def vgg_block(x, num_convs, num_filters):
    for _ in range(num_convs):
        x = layers.Conv2D(num_filters, (3, 3), padding='same', activation='relu')(x)
    x = layers.MaxPooling2D((2, 2), strides=(2, 2))(x)
    return x

# 创建 VGG 模型(VGG16)
input_layer = layers.Input(shape=(224, 224, 3))

# 构建 VGG 网络
x = vgg_block(input_layer, 2, 64)  # 第一个 VGG Block,包含 2 个 3x3 卷积层,64 个滤波器
x = vgg_block(x, 2, 128)           # 第二个 VGG Block,包含 2 个 3x3 卷积层,128 个滤波器
x = vgg_block(x, 3, 256)           # 第三个 VGG Block,包含 3 个 3x3 卷积层,256 个滤波器
x = vgg_block(x, 3, 512)           # 第四个 VGG Block,包含 3 个 3x3 卷积层,512 个滤波器
x = vgg_block(x, 3, 512)           # 第五个 VGG Block,包含 3 个 3x3 卷积层,512 个滤波器

# 全连接层
x = layers.Flatten()(x)
x = layers.Dense(4096, activation='relu')(x)
x = layers.Dense(4096, activation='relu')(x)
output_layer = layers.Dense(1000, activation='softmax')(x)  # 假设有 1000 个分类

# 创建和编译模型
model = models.Model(inputs=input_layer, outputs=output_layer)
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# 打印模型概况
model.summary()
总结

VGG 网络以其简单且深度较大的架构闻名,尽管它的计算和参数量较大,但其性能仍然出色,尤其是在图像分类任务中。然而,随着更为复杂的网络如 ResNet 的出现,VGG 网络逐渐被取代,但其设计理念依然对现代深度学习网络产生了重要影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值