从零搭建GoogLeNet,ResNet18,ResNet50,vgg、mobilenetv1、mobilenetv2、shufflenetv1、shufflenetv2模型(Pytorch代码示例)
@TOC
GoogLeNet
GoogLeNet 是由 Google 团队提出的一种深度卷积神经网络架构,主要特点包括:
- Inception 模块:这是 GoogLeNet 的核心组成部分,通过在一个层内并行使用不同大小的卷积核(1x1, 3x3, 5x5)和池化操作,然后将它们的结果拼接在一起,形成一个更丰富的特征表示。
- 辅助分类器:为了缓解梯度消失问题,GoogLeNet 在网络的中间层添加了两个辅助分类器,这些分类器在训练过程中提供额外的梯度信号,并且有助于正则化模型。
- 全局平均池化:在网络的最后,GoogLeNet 使用全局平均池化替代全连接层,这不仅减少了参数量,还提高了模型的泛化能力。
1 | |
ResNet18
ResNet18 是 ResNet(残差网络)系列中的一个较小型号,由 Microsoft Research 提出。ResNet 通过引入残差块(Residual Block)解决了深度神经网络中的梯度消失问题,使得网络可以更深,从而提高模型的性能。以下是 ResNet18 的主要特点和结构:
主要特点
- 残差块:每个残差块包含两个卷积层,每个卷积层后面跟着一个批量归一化(Batch Normalization)层和一个 ReLU
激活函数。残差块通过跳跃连接(Skip Connection)将输入直接加到输出上,这样可以缓解梯度消失问题。 - 简单的结构:ResNet18 只有 18 层,相对于其他更深的 ResNet 模型(如 ResNet50、ResNet101)来说,计算量较小,适合资源有限的场景。
结构
ResNet18 的结构可以分为以下几个部分:
输入层:
- 卷积层:7x7 卷积核,64 个输出通道,步长为 2,填充为 3。
- 批量归一化层。
- ReLU 激活函数。
- 最大池化层:3x3 核,步长为 2,填充为 1。
残差块:
- 4 个残差块组,每个组包含 2 个残差块。
- 每个残差块包含两个 3x3 卷积层,每个卷积层后面跟着一个批量归一化层和一个 ReLU 激活函数。
- 跳跃连接将输入直接加到输出上。
全局平均池化层:
- 将特征图缩小到固定大小,通常为 1x1。
全连接层:
- 输出分类结果,通常用于图像分类任务。
1 | |
示例
1 | |
ResNet50
1 | |
vgg
VGG(Visual Geometry Group)是由牛津大学的 Visual Geometry Group 提出的一种经典的卷积神经网络架构。VGG 网络在 2014 年的 ImageNet 大规模视觉识别挑战赛(ILSVRC)中取得了优异的成绩,以其简单而有效的设计而闻名。
主要特点
- 简单且一致的架构:VGG 使用了非常简单的架构,主要由多个 3x3 的卷积层和最大池化层组成。
- 多层卷积:通过堆叠多个小卷积层(3x3)来增加网络的深度,而不是使用更大的卷积核。
- 全连接层:在网络的最后部分,使用了几个全连接层来进行分类。
结构
VGG 网络有多种变体,其中最常用的是 VGG16 和 VGG19。以下是 VGG16 的结构:
输入层:
- 输入图像尺寸:224x224x3。
卷积层:
- 2 个 3x3 卷积层,64 个输出通道,后接一个 2x2 最大池化层。
- 2 个 3x3 卷积层,128 个输出通道,后接一个 2x2 最大池化层。
- 3 个 3x3 卷积层,256 个输出通道,后接一个 2x2 最大池化层。
- 3 个 3x3 卷积层,512 个输出通道,后接一个 2x2 最大池化层。
- 3 个 3x3 卷积层,512 个输出通道,后接一个 2x2 最大池化层。
全连接层:
- 2 个 4096 维的全连接层,每个全连接层后面跟着一个 ReLU 激活函数和一个 Dropout 层(防止过拟合)。
- 1 个 1000 维的全连接层,用于输出分类结果。
1 | |
mobilenetv1
MobileNetV1 是一种轻量级的卷积神经网络架构,主要用于移动设备和嵌入式视觉应用。以下是 MobileNetV1 的一些关键特点:
- 深度可分离卷积:MobileNetV1 引入了深度可分离卷积,将标准卷积分解为深度卷积(depthwise
convolution)和逐点卷积(pointwise convolution)。这种设计大大减少了模型的参数数量和计算复杂度。
结构简单:MobileNetV1 的结构相对简单,由多个深度可分离卷积层堆叠而成,每个层后面通常跟着批量归一化(Batch Normalization)和ReLU激活函数。
高效:由于其轻量级的设计,MobileNetV1 在资源受限的设备上表现出色,适用于实时图像分类、物体检测等任务。
MobileNetV1 的基本结构
一个典型的 MobileNetV1 模型包括以下几个部分:
- 输入层:接受输入图像。
- 初始卷积层:一个标准的3x3卷积层,后面跟着批量归一化和ReLU激活。
- 深度可分离卷积层:多个深度可分离卷积层,每个层包括深度卷积、批量归一化、ReLU激活、逐点卷积、批量归一化和ReLU激活。
- 全局平均池化层:将特征图降维为固定大小的向量。
- 全连接层:输出分类结果。
1 | |
mobilenetv2
MobileNetV2 是 MobileNetV1 的改进版本,进一步优化了模型的性能和效率。MobileNetV2 引入了一些新的设计理念,使其在保持轻量级的同时,提高了模型的准确性和鲁棒性。以下是 MobileNetV2 的一些关键特点:
- 倒残差结构(Inverted Residuals):与传统的残差块不同,MobileNetV2 使用“膨胀-压缩”的策略,即先通过1x1卷积增加通道数,再进行深度卷积,最后通过1x1卷积减少通道数。
- 线性瓶颈(Linear Bottlenecks):在每个残差块的末端使用线性层,而不是ReLU激活函数,以保留更多的信息。
- 跳跃连接(Skip Connections):类似于ResNet中的跳跃连接,有助于梯度传播,提高训练效果。
MobileNetV2 的基本结构
一个典型的 MobileNetV2 模型包括以下几个部分:
- 输入层:接受输入图像。
- 初始卷积层:一个标准的3x3卷积层,后面跟着批量归一化和ReLU6激活。
- 倒残差块(Inverted Residual Blocks):多个倒残差块,每个块包括1x1卷积、深度卷积、1x1卷积和跳跃连接。
- 全局平均池化层:将特征图降维为固定大小的向量。
- 全连接层:输出分类结果。
1 | |
shufflenetv1
ShuffleNetV1 是一种专门为移动设备和嵌入式系统设计的高效卷积神经网络架构。它通过引入通道混洗(Channel Shuffle)操作,有效利用了分组卷积(Group Convolution)的优势,同时避免了分组卷积导致的信息隔离问题。以下是 ShuffleNetV1 的一些关键特点:
- 分组卷积(Group Convolution):通过将输入通道分成多个组,分别进行卷积操作,减少计算量和模型参数。
- 通道混洗(Channel Shuffle):在分组卷积之后,通过通道混洗操作重新组合通道,确保信息在不同组之间充分交流。
- 瓶颈结构(Bottleneck Structure):使用1x1卷积进行降维和升维,中间使用3x3深度卷积进行特征提取。
ShuffleNetV1 的基本结构
一个典型的 ShuffleNetV1 模型包括以下几个部分:
- 输入层:接受输入图像。
- 初始卷积层:一个标准的3x3卷积层,后面跟着批量归一化和ReLU激活。
- 瓶颈块(Bottleneck Blocks):多个瓶颈块,每个块包括1x1卷积、深度卷积、1x1卷积和通道混洗操作。
- 全局平均池化层:将特征图降维为固定大小的向量。
- 全连接层:输出分类结果。
1 | |
shufflenetv2
ShuffleNetV2 是 ShuffleNetV1 的改进版本,旨在进一步提高模型的效率和准确性。ShuffleNetV2 通过一系列实验和理论分析,提出了一套更有效的设计原则,并在此基础上构建了新的网络架构。以下是 ShuffleNetV2 的一些关键特点:
- 平衡计算负载:确保每个阶段的计算负载均匀分布,避免某些层的计算量过大。
- 避免信息丢失:通过设计合理的跳跃连接,确保信息在不同层之间有效传递。
- 减少内存访问成本:通过优化数据布局和操作顺序,减少内存访问次数,提高运行效率。
- 通道混洗(Channel Shuffle):在分组卷积之后,通过通道混洗操作重新组合通道,确保信息在不同组之间充分交流。
ShuffleNetV2 的基本结构
一个典型的 ShuffleNetV2 模型包括以下几个部分:
- 输入层:接受输入图像。
- 初始卷积层:一个标准的3x3卷积层,后面跟着批量归一化和ReLU激活。
- 基本块(Basic Blocks):多个基本块,每个块包括1x1卷积、深度卷积、1x1卷积和通道混洗操作。
- 全局平均池化层:将特征图降维为固定大小的向量。
- 全连接层:输出分类结果。
1 | |