卷积神经网络(CNN)的发展
- 基础CNN: 初始的CNN模型主要包括卷积层(Convolutional Layer)、激活函数(如ReLU)、池化层(Pooling Layer)和全连接层(Fully Connected Layer)。
- 更深的网络: 随着硬件的进步(尤其是GPU),研究人员开始设计更深的网络,例如VGG、ResNet等。
- 特殊架构和模块: 随着研究的深入,人们也设计出了一些更高效或者针对特定任务更有效的架构和模块,如Inception模块、Residual Block等。
- 迁移学习: 当前,预训练模型在多个任务和领域中都有广泛应用,这就是迁移学习(Transfer Learning)。
- 端到端训练和多任务学习: 最近,越来越多的模型开始支持从输入到输出(或多个输出)的端到端训练,这样可以同时解决分类、检测、分割等多个任务。
神经网络架构与模型
- 神经网络架构: 神经网络架构是一个固定的结构,它定义了模型的基本组件和组织方式,包括层的类型、层的数量、参数等。
- 神经网络模型: 当一个神经网络架构经过具体的训练(如在某个数据集上进行反向传播等)后,它就变成了一个“模型”。这个模型包含了经过训练的权重和偏置。
名门神经网络架构
- LeNet: 用于手写数字识别,主要包括卷积层和池化层。
- AlexNet: 在2012年的ImageNet竞赛中表现出色,包括5个卷积层和3个全连接层。
- VGG: 由多个3x3的卷积核组成,模型结构深,最多有19层。
- ResNet: 通过添加残差连接来解决深度模型的梯度消失和爆炸问题。
这些架构因其在特定任务上的优秀表现而广为人知,因此它们的名字已经成为描述这类特定结构的标签。
预训练模型
- 定义: “预训练模型"是指那些已经在大规模数据集上进行过训练的模型。
- 优点: 预训练模型通常已经学习到了很多通用的特征,这些特征可以用于其他相关的任务。
- 应用场景: 例如,VGG和AlexNet通常在ImageNet这样的大规模图像分类数据集上进行训练,然后可以用于其他视觉任务,如目标检测或图像分割。
- 迁移学习: 利用预训练模型进行其他任务的训练过程通常被称为“迁移学习”。
总体来说,神经网络架构是一个设计蓝图,而通过在特定数据集上训练这一架构,你将得到一个可以执行特定任务(如分类、回归等)的模型。
一些名门的架构因其优异的性能而成为行业标准,经常被用作新任务的起点,这就是所谓的预训练模型。
使用预训练模型的步骤
-
选择预训练模型: 根据你的任务和需求(例如,需要高准确度还是低计算复杂度),选择一个合适的预训练模型(如VGG, AlexNet, ResNet等)。
-
数据预处理: 将你的数据集调整到与预训练模型兼容的格式和大小。这通常包括图像缩放、归一化等。
-
特征提取或微调:
特征提取(Feature Extraction)
-
加载预训练模型: 首先,你需要加载一个预训练模型(比如VGG、AlexNet等)。
-
移除全连接层: 接下来,你通常会移除模型末端的全连接层(分类层)。
-
数据预处理: 将你自己的数据集预处理成模型需要的格式。
-
特征生成: 通过将你的数据集传递通过预训练模型的卷积层,你会得到一系列特征图(feature maps)。
-
新模型构建: 然后,你可以添加一个或多个全连接层,这些层会依据特征图来进行你自己任务的分类或回归。
-
训练与测试: 最后,你只需要训练这些新添加的全连接层,并在测试集上进行评估。 实质上使用预训练模型训练自己的数据集,就是在用我们数据集的特征向量来做分类和回归1,我们在用优化算法2训练一种分类和回归模型3。
微调(Fine-tuning)
与特征提取不同,微调是在预训练模型的基础上继续训练整个模型(包括卷积层和全连接层),以适应新任务。这通常在新数据集足够大并且与预训练模型的数据集相似时才会这么做。
注意事项:
-
学习率: 通常微调的学习率会设置得比较小,以防止快速地“遗忘”有用的特征。
-
训练与验证: 使用你的数据集进行训练和验证。如果是特征提取,你只需要训练你添加的新层;如果是微调,你可能需要在整个网络上进行训练。
-
-
评估: 在测试集上评估模型性能,使用诸如准确度、F1分数、IoU等指标。
输入和输出
以R-CNN为例:
- 输入: 你首先会有一个图像,这个图像将经过预处理以适应预训练模型的输入要求。
- 中间输出(特征向量): 当图像通过预训练模型(如VGG或AlexNet)时,你得到的是一个特征向量。这个特征向量是预训练模型的输出,也是接下来步骤的输入。
- 全连接层和最终输出: 这个特征向量会被传递到一个全连接层进行分类(或回归)。全连接层的权重和偏置通常是在训练过程中从数据中学习的。
针对特征向量要做的事:
- 分类: 你可以在特征向量后面添加一个或多个全连接层,进行目标检测任务的分类。
- 定位(Bounding Box Regression): 同时,也可以进行边界框回归来更精确地定位目标。
如何确定全连接层:
- 结构: 通常情况下,全连接层在预训练模型的最后,你可以根据需要添加额外的全连接层或调整已有层的神经元数量。
- 位置: 在大多数深度学习框架(如TensorFlow或PyTorch)中,可以很方便地查看模型的架构,包括全连接层的位置。