一些经典 CNN

在计算机视觉的发展过程中,出现了很多经典的卷积神经网络模型,它们对后来的研究有很大影响,这篇文章简要谈谈 LeNet-5、AlexNet 和 VGGNet.

LeNet-5

LeNet-5 是由 LeCun 在 1998 年的一篇论文中提出的,与今天的一些神经网络相比,LeNet-5 是一个小型神经网络,它只有大约 60000 个参数,而今天经常会有包含千万到亿量级参数的神经网络,我们先来看一下 LeNet-5 的模型:

如图所示,输入是一张维度为 (32, 32, 1) 的图片,在这个例子中该图片是一张手写体数字的灰度图片,内容为数字 7,由于这是一张灰度图,因此通道数为 1,下面依次对该网络每层进行说明:

  • 第一层:
    • 6 个大小为 5 × 5 的过滤器,Padding = 1,Stride = 1. 输出维度为 (28, 28, 6) 的图片。
    • 均值池化层,过滤器大小为 2 × 2,Stride = 2. 输出维度为 (14, 14, 6) 的图片。
  • 第二层:
    • 6 个大小为 5 × 5 的过滤器,Padding = 1,Stride = 1. 输出维度为 (10, 10, 6) 的图片。
    • 均值池化层,过滤器大小为 2 × 2,Stride = 2. 输出维度为 (5, 5, 6) 的图片。
  • 第三层:全连接层,共 120 个结点
  • 第四层:全连接层,共 84 个结点
  • 第五层:输出层,输出预测值

Note: 由于池化层并不包含任何参数,因此将其与前一个卷积层共算作一层。

这个网络可以完成手写体数字识别的任务,输入一张大小为 32 × 32 的灰度图,最终输出对图中数字的预测,其中池化层用的是均值池化,而目前更常用的最大池化,另外,现在输出层通常使用 softmax 函数,而当时使用的是另一种函数。

该网络中用到结构在现今仍非常常用,即先使用一层或几层卷积层,再使用一层池化层,然后再使用一层或几层卷积层,再使用一层池化层,最后再使用几层全连接层,最后输出结果。这种结构方式在今天也非常常见。

AlexNet

与 LeNet-5 只有大约 60000 个参数不同,AlexNet 有大约 6 千万个参数,不过这二者拥有很相似的结构,只是 AlexNet 拥有更多的隐藏神经元,在更大的数据上训练,这使得它有更好的性能,它的结构如下

  • 第一层:
    • 96 个大小为 11 × 11 的过滤器,Padding = 1,Stride = 4. 输出维度为 (55, 55, 96).
    • 最大池化层,过滤器大小为 3 × 3,Stride = 2. 输出维度为 (27, 27, 96).
  • 第二层:
    • 256 个大小为 5 × 5 的过滤器,Padding = same,Stride = 1. 输出维度为 (27, 27, 256).
    • 最大池化层,过滤器大小为 3 × 3,Stride = 2. 输出维度为 (13, 13, 256).
  • 第三层:384 个大小为 3 × 3 的过滤器,Padding = same,Stride = 1. 输出维度为 (13, 13, 384).
  • 第四层:384 个大小为 3 × 3 的过滤器,Padding = same,Stride = 1. 输出维度为 (13, 13, 384).
  • 第五层:
    • 256 个大小为 3 × 3 的过滤器,Padding = same,Stride = 1. 输出维度为 (13, 13, 256).
    • 最大池化层:过滤器大小为 3 × 3,Stride = 2. 输出维度为 (6, 6, 256).
  • 第六层:全连接层,共 4096 个结点
  • 第七层:全连接层,共 4096 个结点
  • 第八层:输出层,使用 softmax 输出预测类别

另一个与 LeNet-5 不同之处是,AlexNet 的激活函数使用了 ReLU,而非 LeNet-5 使用的 sigmoid 或者 tanh,这也使得其性能更好一些。

实际上上面列出的结构是原始 AlexNet 的简化,原始的 AlexNet 中还有局部响应归一层,但后来并不太常用,因此这里做了简化。

VGG-16

VGG-16 中的 16 是指该网络中有 16 层带有权重的层,这是一个很大的神经网络,这导致该网络中的参数多达 1 亿 3 千 8 百万个。但是 VGG 的结构非常统一,该网络中的所有卷积层的过滤器大小都是 3 × 3,Stride 都是 1,Padding 都是 same,而池化层过滤器的大小全为 2 × 2,Stride 全为 2。结构方面,总是现有几层卷积层,然后是池化层,再来几层卷积层,再来一个池化层。由于该网络层数很多,结构图稍微简化了一些:

其中,

  • [CONV 64] × 2 是指两层各有 64 个过滤器的卷积层
  • POOL 指池化层
  • FC 指全连接层

可以看到,虽然 VGG-16 是一个比较大的网络,但是由于其结构统一,因此受到了许多研究者的青睐,另外还有 VGG-19,指拥有 19 层带有权重的层的 VGG,但由于其性能与 VGG-16 差不多,因此大多数人还是选择用 VGG-16。

以上是对三个经典卷积神经网络的简单介绍,文末附上 AlexNet 和 VGG 的相关论文。

[Krizhevsky et al., 2012. ImageNet classification with deep convolutional neural networks]

[Simonyan & Zisserman 2015. Very deep convolutional networks for large-scale image recognition]

搭建经典CNN模型,需要完成预训练模型选择、全连接层重新训练、proposals提取和CNN特征计算、SVM训练以及边界框回归等步骤,还涉及到模型配置和训练等操作。 首先选择一个预训练的神经网络,如AlexNet、VGG等。接着使用需要检测的目标重新训练最后全连接层。利用选择性搜索算法提取所有proposals(大约2000幅images),调整它们成固定大小以满足CNN输入要求,并将feature map保存到本地磁盘。然后利用feature map训练SVM来对目标和背景进行分类(每个类一个二进制SVM)。最后训练将输出一些校正因子的线性回归分类器进行边界框回归[^1]。 在配置模型时,使用如下代码: ```python model.compile(optimizer='adam', loss='mean_squared_error', metrics=['mae', 'acc']) model.fit(x_train, y_train, batch_size=256, epochs=45, validation_split=2.0) ``` 此代码用于配置模型的优化器、损失函数和评估指标,并进行模型训练[^2]。 在头歌平台使用Pytorch搭建时,示例代码如下: ```python import torch import torchvision.datasets as dsets import torchvision.transforms as transforms import os import sys path = os.path.split(os.path.abspath(os.path.realpath(sys.argv[0])))[0] + os.path.sep path = path[:-10] + '/data/' # 下载训练集 MNIST 训练集,设置 root = path,train=False ,download=False,赋值给变量train_dataset train_dataset = dsets.MNIST(root=path, train=False, transform=transforms.ToTensor(), download=False) # 创建batch_size=100, shuffle=True的DataLoader变量data_loader data_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=100, shuffle=True) # 获取数据集中的第四个元素的图片信息和类别 print('Number of samples: ', len(train_dataset)) img, target = train_dataset[3] # load 4th sample # 按照格式“Image Size: ...”输出该图片大小 print("Image Size: ", img.size()) # 按照格式“Image Target: ...”输出该图片的类别 print("Image Target: ", target) ``` 这段代码主要完成了数据集的下载、数据加载器的创建以及对数据集中元素信息的输出等操作,是搭建CNN模型的基础步骤之一[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值