首页 理论教育迁移学习模型的训练和验证方法

迁移学习模型的训练和验证方法

【摘要】:设计本章的迁移学习模型。将特征提取模块和分类器模块级联,即为本章设计的迁移学习模型。设置模型训练的超参数值。在初步训练分类器模块时,设置学习率为0.001,初步训练的轮数设为两轮。对整个模型进行微调训练。

由于深度CNN模型具有大规模的参数数量,要使CNN模型具备好的识别能力,必须利用海量的带标签的训练样本对CNN模型进行充分的训练,如果缺乏足够的训练样本,对模型的训练不充分,则很容易产生过拟合现象。过拟合现象是指模型在训练集上能获得好的性能,但应用于测试集时效果较差。所以,要求最终训练的CNN模型不仅在训练集上有好的表现,在测试集上也有好的性能,即具有较好的泛化能力。

虽然预先训练的VGG-16模型已经在ImageNet大规模图像数据集上经过了充分的训练,但是ImageNet不是专门的纹理图像数据库,无法充分体现纹理图像的多样性和复杂性,并且目前也不存在大规模的专用的纹理图像训练数据集,而在现实场景中能获取的纹理图像样本数量也非常有限。因此,为了对新构建的迁移学习模型进行充分的训练,并且防止模型过拟合现象的发生,可首先采用数据增强(Data Augmentation)的方法对有限的训练样本进行某些基本的变换操作,从而生成更多数量的训练样本。有效的数据增强不仅能扩充训练样本的数量,还能增加训练样本的多样性,从而提高CNN模型的识别性能和泛化能力。

常用的数据增强方法有图像缩放、左右/上下翻转、平移变换、图像旋转、随机裁剪、增加噪声、模糊处理等,在执行上述操作时还可以设置图像缩放的程度、图像旋转的角度、平移的距离等参数,通过将上述不同的操作方法和参数值进行组合使用,可以将训练样本的数量扩充至原有数量的几十倍甚至上百倍。图6-10展示了图像旋转的效果,图6-11展示了图像左右翻转和上下翻转的效果,图6-12展示了图像在水平和垂直方向平移的效果,图6-13展示了图像剪切变换(shear transformation)的效果,在上述图像中,最左侧的子图像是一幅原始图像,可以看出,通过执行数据增强操作可以使一幅原始图像生成更多数量的图像,扩充了训练样本集,可用于对深度CNN模型进行充分训练。由于人眼的识别能力非常高,并且已经在长期的生活中见识过了多种场景的图像变换,人眼很容易识别利用数据增强方法产生的图像,但对于识别能力比较有限的机器来说,它的初始识别能力和“阅历”都远不及人眼的识别能力,所以利用数据增强方法产生的大量图像能让机器“见识”到更多种变换场景的图像,提高机器对该类图像的“阅历”,从而进一步提高机器的识别能力。

图6-10 数据增强:图像旋转

图6-11 数据增强:水平和垂直翻转

图6-12 数据增强:图像平移

图6-13 数据增强:剪切变换

在针对某个具体的识别任务时,不一定需要使用所有的数据增强操作,这时应该充分考虑数据集的性质和待识别问题的特点,从而选择合适的数据增强方法,同时要保持数据增强前后样本的对应类别标签不能改变。在本章的实验中,采用随机缩放、左右翻转和图像旋转这三种数据增强的操作组合,在对训练样本进行数据增强时,设最大的缩放因子为0.2倍,最大的旋转角度为60度。

本实验采用Python 3.5、Tensorflow 1.15.0、Keras 2.0.8构建软件仿真平台,硬件平台为CPU和GPU双处理器,Windows 10操作系统,内存为16 GB。CNN模型具有庞大的参数数量,并且需要对大规模的训练样本进行学习,这使训练过程中数据的读取、特征的提取、梯度的反向传播及权值的更新都需要强大的计算能力,而图形处理单元(Graphics Processing Unit,GPU)能够实现对图像数据的加速并行运算,可显著提高CNN模型的训练速度,因此采用基于Nvidia 公司高性能的RTX系列GPU加速CNN模型的训练。同时,训练CNN模型的优化方法选为Adam算法,最大训练轮数为50轮,损失函数设为分类交叉熵函数,每次送入CNN模型进行训练的批量样本数为10个,即批尺寸batchSize=10。

本节首先在KTH-TIPS纹理库上开展实验,为了和其他纹理图像识别方法的结果进行比较,本章采用相同的训练样本个数,即每类选择一半样本作为训练数据集,具体的样本划分如下:在KTH-TIPS纹理库上,每类的40个样本作为训练集,10个样本作为验证集,31个样本作为测试集。

为了获得稳定的实验结果,在KTH-TIPS纹理库上开展实验时,独立进行10次实验并记录实验结果,计算这10次实验结果的平均值,将其作为最终的纹理识别结果。

本章方法的具体实现步骤可总结如下:

(1)对图像进行预处理。因为所使用的预训练模型是基于ImageNet数据集训练出来的,所以为了适应模型的输入要求,需将输入图像红、绿、蓝三个通道的数据分别减去ImageNet数据集对应三个通道的均值(103.939,116.779, 123.680),同时将输入图像的分辨率调整为224×224。

(2)对训练样本进行数据增强。由于纹理图像的训练样本数量较少,为了抑制模型的过拟合,对每个样本进行随机缩放和旋转,利用随机生成的样本来扩充训练样本集的数量。

(3)设计本章的迁移学习模型。首先,载入预训练的VGG-16模型,去掉最后的FC层等,将剩下的部分作为特征提取器;其次,设计后面的分类器模块,包括一个全局平均池化(Global Average Pooling, GAP)层、一个FC层和一个Softmax分类概率输出层。将特征提取模块和分类器模块级联,即为本章设计的迁移学习模型。

(4)设置模型训练的超参数值。主要包括指定优化器、损失函数、批尺寸、初始学习率、最大训练轮数等超参数的值。

(5)对分类器模块进行初步训练。因为分类器模块的参数值是随机初始化的,在开始训练时会产生较大的梯度更新,这会破坏特征提取模块已经预先训练好的参数值,所以在对整个迁移学习模型进行微调训练之前,需要先对分类器模块进行初步的训练,即先冻结特征提取模块的参数,仅将分类器模块的参数设为可训练,然后利用现有的纹理图像训练样本对模型进行较少次数的训练,从而使分类器模块获得较好的初步训练参数值。在初步训练分类器模块时,设置学习率为0.001,初步训练的轮数设为两轮。

(6)对整个模型进行微调训练。根据模型的结构特征,随机指定模型中需要冻结的层数和可训练的层数,然后利用训练集对整个模型进行训练,即不断调节可训练层的参数值,每完成一轮训练,就利用验证数据集对训练的模型进行验证。以验证数据集上的损失值为监测指标,当验证损失进入平台期时,可将学习率调低到原来的一半继续进行训练,最后保存验证损失最小的模型作为当前的优选模型。

(7)对当前的优选模型进行测试。在测试数据集上运行上述第(6)步保存的当前优选模型,计算在测试集上的识别精度。

(8)获得最佳的模型。为了确定最合适的冻结层数,逐步调节模型中需要冻结的层数和可训练的层数,重复上述(5)~(6)的训练和测试过程,当测试集上的识别精度最高时,冻结层数和可训练层数为最佳,此时的模型可作为最佳的深度CNN模型。

图6-14展示了当冻结层数等于15时,迁移学习模型在KTH-TIPS纹理库的训练数据集和验证数据集上的损失函数值变化情况,图6-15展示了当冻结层数等于15时模型在KTH-TIPS纹理库的训练数据集和验证数据集上的识别精度变化情况。通过逐层实验可得,当冻结层数等于10,即冻结本章迁移学习模型的前三个卷积模块时,所获得的CNN模型具有最好的识别性能,因此本章设置迁移学习模型的冻结层数为10。

图6-14 当冻结层数为15时的训练损失曲线和验证损失曲线

图6-15 当冻结层数为15时的训练识别精度和验证识别精度