典型卷积神经网络(LeNet-5,AlexNet,VGG,GoogLeNet)

发布时间 2023-12-31 23:33:23作者: 楚千羽

3.1 LeNet-5网络

LeNet-5 曾被大规模用于自动识别美国银行支票上的手写数字。该网络是卷积神经网络 (CNN)。CNN 是现代最先进的基于深度学习的计算机视觉的基础。这些网络建立在 3 个主要思想之上:局部感受野、共享权重和空间子采样。具有共享权重的局部感受野是卷积层的本质,下面描述的大多数架构都以某种形式使用卷积层。

LeNet 是一个重要架构的另一个原因是,在它被发明之前,字符识别主要通过手工使用特征工程来完成,然后使用机器学习模型来学习对手工设计的特征进行分类。LeNet 使手工设计特征变得多余,因为该网络会自动从原始图像中学习最佳的内部表示。

按照现代标准,LeNet-5 是一个非常简单的网络。它只有 7 层,其中有 3 个卷积层(C1、C3 和 C5)、2 个子采样(池化)层(S2 和 S4)和 1 个全连接层(F6),后跟输出层。卷积层使用步幅为 1 的 5 x 5 卷积。子采样层是 2 x 2 平均池化层。整个网络都使用 Tanh sigmoid 激活函数。

首先,层 C3 中的各个卷积核不使用层 S2 产生的所有特征,这与当今标准非常不同。这样做的一个原因是为了降低网络的计算需求。另一个原因是为了让卷积核学习不同的模式。这是非常合理的:如果不同的核接收不同的输入,它们将学习不同的模式。

其次,输出层使用 10 个欧几里得径向基函数神经元,这些神经元计算 84 维输入向量与手动预定义的相同维度的权重向量之间的 L2 距离。数字 84 来自于权重本质上表示一个 7x12 的二进制掩码,每个数字一个。这迫使网络将输入图像转换为内部表示,这将使层 F6 的输出尽可能接近输出层 10 个神经元的硬编码权重。

LeNet-5 能够在 MNIST 数据集上实现低于 1% 的错误率,这在当时非常接近最先进水平(由三个 LeNet-4 网络的提升集成产生)
image

LeNet-5架构

image
image

3.2 AlexNet网络

image

2012年的论文里输入224x224,2014年论文里输入227x227

image
image

AlexNet 架构
架构本身相对简单。有 8 个可训练层:5 个卷积层和 3 个全连接层。除了使用 softmax 激活的输出层外,所有层都使用 ReLU 激活。局部响应归一化仅在 C1 和 C2 层之后使用(在激活之前)。在 C1、C2 和 C5 层之后使用重叠最大池化。Dropout 仅在 F1 和 F2 层之后使用。

由于网络位于 2 个 GPU 上,因此必须将其分成 2 部分,并且只能部分通信。请注意,C2、C4 和 C5 层仅接收位于同一 GPU 上的前一层输出作为输入。GPU 之间的通信仅发生在 C3 层以及 F1、F2 和输出层。

该网络使用带动量和学习率衰减的随机梯度下降法进行训练。此外,在训练期间,每当验证错误率停止提高时,学习率都会手动降低 10 倍。

计算卷积层和最大池化层的输出图像的维度
image
AlexNet模型由八层组成,分别是:(copilot-creative)

  • 输入层:接收一个227x227x3的彩色图像作为输入(224+1P+2P),图像中的每个像素值被归一化到[0,1]区间。

  • 卷积层C1:使用96个11x11x3的卷积核对输入层进行卷积操作,得到96个55x55的特征图,每个特征图中的每个元素是输入图像中一个11x11x3的区域的加权和,加上一个偏置项,然后经过一个ReLU激活函数。这一层的特点是使用了较大的卷积核,以捕捉更多的图像细节,同时使用了较大的步长(4),以减少特征图的尺寸,增加计算效率。

  • 池化层P1:使用96个3x3的最大池化核对卷积层C1进行池化操作,得到96个27x27的特征图,每个特征图中的每个元素是上一层中一个3x3的区域的最大值,然后乘以一个可训练的系数,加上一个可训练的偏置项,再经过一个ReLU激活函数。这一层的作用是降低特征图的空间分辨率,减少计算量和参数量,同时增加特征的不变性。

  • 卷积层C2:使用256个5x5x48的卷积核对池化层P1进行卷积操作,得到256个27x27的特征图,每个特征图中的每个元素是上一层中一个5x5x48的区域的加权和,加上一个偏置项,然后经过一个ReLU激活函数。这一层的特点是使用了较小的卷积核,以提高特征的灵敏度,同时使用了较小的步长(1),以保持特征图的尺寸,增加特征的丰富度。另外,这一层也使用了分组卷积的方法,将上一层的96个特征图分为两组,每组48个,然后每个卷积核只与同一组的特征图相连,得到256个特征图,其中前128个属于第一组,后128个属于第二组,这样可以减少参数量和计算量,同时增加特征的多样性。

  • 池化层P2:使用256个3x3的最大池化核对卷积层C2进行池化操作,得到256个13x13的特征图,每个特征图中的每个元素是上一层中一个3x3的区域的最大值,然后乘以一个可训练的系数,加上一个可训练的偏置项,再经过一个ReLU激活函数。这一层的作用与池化层P1相同。

  • 卷积层C3:使用384个3x3x256的卷积核对池化层P2进行卷积操作,得到384个13x13的特征图,每个特征图中的每个元素是上一层中一个3x3x256的区域的加权和,加上一个偏置项,然后经过一个ReLU激活函数。这一层的特点是使用了更多的卷积核,以增加特征的数量,同时使用了较小的卷积核,以提高特征的灵敏度,同时使用了较小的步长(1),以保持特征图的尺寸,增加特征的丰富度。另外,这一层也取消了分组卷积的方法,使得每个卷积核都与上一层的所有特征图相连,以增加特征的复杂度。

  • 卷积层C4:使用384个3x3x192的卷积核对卷积层C3进行卷积操作,得到384个13x13的特征图,每个特征图中的每个元素是上一层中一个3x3x192的区域的加权和,加上一个偏置项,然后经过一个ReLU激活函数。这一层的特点与卷积层C3相似,只是卷积核的数量和深度有所变化,同时恢复了分组卷积的方法,将上一层的384个特征图分为两组,每组192个,然后每个卷积核只与同一组的特征图相连,得到384个特征图,其中前192个属于第一组,后192个属于第二组,这样可以减少参数量和计算量,同时增加特征的多样性。

  • 卷积层C5:使用256个3x3x192的卷积核对卷积层C4进行卷积操作,得到256个13x13的特征图,每个特征图中的每个元素是上一层中一个3x3x192的区域的加权和,加上一个偏置项,然后经过一个ReLU激活函数。这一层的特点与卷积层C4相似,只是卷积核的数量和深度有所变化。

  • 池化层P3:使用256个3x3的最大池化核对卷积层C5进行池化操作,得到256个6x6的特征图,每个特征图中的每个元素是上一层中一个3x3的区域的最大值,然后乘以一个可训练的系数,加上一个可训练的偏置项,再经过一个ReLU激活函数。这一层的作用与池化层P1和P2相同。

  • 全连接层F1:将池化层P3的所有特征图展平为一个一维向量,然后与4096个神经元全连接,得到一个4096维的向量,每个元素是上一层的所有元素的加权和,加上一个偏置项,然后经过一个ReLU激活函数。这一层的作用是将卷积层提取的局部特征转化为全局特征,同时减少特征的维度,增加特征的抽象程度。另外,这一层也使用了Dropout技术,即在训练过程中,以一定的概率随机丢弃一些神经元的输出,以防止过拟合,提高泛化能力。

  • 全连接层F2:将全连接层F1的输出与4096个神经元全连接,得到一个4096维的向量,每个元素是上一层的所有元素的加权和,加上一个偏置项,然后经过一个ReLU激活函数。这一层的作用与全连接层F1相似,只是神经元的数量没有变化,同时也使用了Dropout技术。

  • 全连接层F3:将全连接层F2的输出与1000个神经元全连接,得到一个1000维的向量,每个元素是上一层的所有元素的加权和,加上一个偏置项,然后经过一个线性激活函数。这一层的作用是将全局特征转化为分类结果,每个元素对应一个图像类别的得分,最后使用softmax函数将得分转化为概率。

AlexNet模型是卷积神经网络的突破之作,为后续的深度学习发展开辟了新的道路。
AlexNet网络中的ReLU
image
AlexNet网路中的响应归一化
image
AlexNet网路中的重叠池化
image
AlexNet网路中的数据增强
image
数据增强是一种正则化策略(一种防止过拟合的方法)。AlexNet 使用两种数据增强方法。

第一种方法对输入图像进行随机裁剪、旋转和翻转,并在训练期间将它们用作网络的输入。这可以极大地增加数据量;作者提到了增加 2048 倍。另一个好处是,增强是在 CPU 上即时执行的,而 GPU 则训练前一批数据。换句话说,这种类型的增强本质上是计算免费的,也不需要将增强后的图像存储在磁盘上。

第二种数据增强策略是所谓的 PCA 颜色增强。首先,对 ImageNet 训练数据集的所有像素执行 PCA(为此目的,将像素视为 3 维向量)。结果,我们得到一个 3x3 协方差矩阵,以及 3 个特征向量和 3 个特征值。在训练期间,将基于 PCA 分量的随机强度因子添加到图像的每个颜色通道,这相当于改变光照的强度和颜色。此方案将 top-1 错误率降低了 1% 以上,这是一个显着的降低。

AlexNet网络中的测试时增强
image
AlexNet网络中的dropout
image
AlexNet 的优点

  1. AlexNet 被认为是用于图像分类的 CNN 的里程碑。

  2. 卷积+池化设计、dropout、GPU、并行计算、ReLU 等多种方法,仍然是计算机视觉的工业标准。

  3. AlexNet 的独特优势在于直接将图像输入到分类模型中。

  4. 卷积层可以自动提取图像的边缘,全连接层学习这些特征

  5. 理论上,通过添加更多卷积层可以有效地提取视觉模式的复杂性

AlexNet 的缺点

  1. 与 VGGNet、GoogLENet 和 ResNet 等后续模型相比,AlexNet 不够深。

  2. 不久之后,不再鼓励使用大卷积滤波器 (5*5)。

  3. 使用正态分布来初始化神经网络中的权重,无法有效解决梯度消失的问题,后来被 Xavier 方法取代。

  4. 性能被更复杂的模型(如 GoogLENet (6.7%) 和 ResNet (3.6%))超越

3.3 VGG 16 网络

VGG网络是由牛津大学的视觉几何组(Visual Geometry Group,简称VGG)于2014年提出的一种卷积神经网络,用于图像分类。它的网络架构如下:
image
VGG网络由多个卷积层和全连接层组成,每个卷积层都使用3x3的卷积核和1x1的步长,每个池化层都使用2x2的最大池化核和2x2的步长,网络深度达到了16或19层,是当时最深的卷积神经网络之一,是2014年ImageNet挑战赛的亚军,具有较好的可视化特征和迁移学习能力。

VGG网络的特点是使用了统一的卷积核大小和池化核大小,以及逐渐增加的卷积核数量,从而简化了网络的设计和优化,同时提高了网络的性能和泛化能力。VGG网络的缺点是参数量和计算量较大,需要较多的内存和时间来训练和测试。
image
不同VGG的网络的网络配置
image

3.4 GoogLeNet网络

GoogLeNet版本
image
GoogLeNet 网络架构与技术
image
GoogLeNet网络的inception机制
Inception机制是GoogLeNet网络中使用的一种技术,用于构建多尺度的特征提取模块,提高网络的性能和效率。它的原理是对每个输入特征图,同时使用不同大小的卷积核和池化核进行操作,然后将所有的输出特征图拼接在一起,形成一个更高维度的输出特征图,从而同时捕捉不同尺度的特征,增加特征的丰富度和多样性。具体的结构如下:
image

一个简单的Inception模块
Inception机制的作用是模仿人类视觉系统的多尺度处理,即在自然界中,不同的物体可能在不同的尺度上有不同的特征,从而需要不同的感受野来识别,从而增强网络的表达能力和泛化能力。在GoogLeNet网络中,Inception机制被应用在多个层次上,形成了多个Inception模块,每个Inception模块都有不同的卷积核和池化核的组合,以适应不同的输入和输出的特征 ![image](https://img2023.cnblogs.com/blog/1951423/202312/1951423-20231231232034058-1131056875.png)
GoogLeNet网络中具有降维功能的Inception模块

Inception模块内部有4个并行的分支。第一个分支使用1x1的卷积核,第二个分支先使用1x1的卷积核再使用3x3的卷积核,第三个分支先使用1x1的卷积核再使用5x5的卷积核,第四个分支先使用3x3的最大池化再使用1x1的卷积核。这四个分支都使用了合适的填充来使得输入和输出的尺寸相同,然后将这四个分支的输出在通道维度上进行连接,形成Inception模块的输出。

Inception模块的设计有两个主要的考虑:

  1. 维度约减:在3x3和5x5的卷积之前,先使用1x1的卷积进行降维,这样可以减少模型的参数和计算量。

  2. 多尺度:1x1,3x3,5x5的卷积核和3x3的最大池化可以捕捉不同尺度下的图像信息。

1x1的卷积进行降维处理
image
(Inception V1)网络结构
image

参考网址:

https://medium.com/analytics-vidhya/concept-of-alexnet-convolutional-neural-network-6e73b4f9ee30

https://medium.com/@pechyonkin/key-deep-learning-architectures-alexnet-30bf607595f1

https://medium.com/@siddheshb008/alexnet-architecture-explained-b6240c528bd5

https://www.bilibili.com/read/cv7181322/ 较真AlexNet:到底是224还是227?- 哔哩哔哩 (bilibili.com)

https://arxiv.org/pdf/1409.4842v1.pdf GoogLeNet 论文

https://wxler.github.io/2020/11/24/223407/ 深入解读GoogLeNet网络结构(附代码实现) | Layne's Blog (wxler.github.io)

转自: https://mp.weixin.qq.com/s/nV-t6FT5xtkmidksJlEH7Q