基于迁移学习改进VGG模型的场景分类
2022-07-21程飞飞王龙谌洪茂
程飞飞 王龙 谌洪茂
(东华理工大学信息工程学院,南昌,330013)
0 引言
图像的场景分类在互联网及各种应用中有着广泛的需求,如何使得电脑能够像人一样准确地将一个场景做出精准而详尽的分类被认为是一项有重要意义的基础研究[1]。机器视觉和深度学习是人工智能技术的重要研究方向和发展热点,其帮助构建深度人工神经网络,基于物理特征提取和学习的算法对图片特征进行分类,通过深层神经网络,把逐层提取出的数据由底层到高层传送[2]。本文提出的一种基于迁移学习方法改进VGG模型,应用在图片的场景分类上,能极大提高图片场景分类精度和速度。
1 数据集
本文中所使用的数据集是Baidu AI Studio人工智能学习与实训社区的场景相结合进行分类中的一个数据集,从一万张的图片中筛选得出了3500张比较好的场景,分别归纳为5个不同的实训场景,分别为草坪、河水、冰雪、沙漠、教堂。从这些图片中再筛选出大约75%左右的图片作为一个训练集,大约15%的图片作为检测测试集,大约10%左右的图片作为检测验证集,其中每张图像的尺寸都是不尽相同的。
2 场景分类算法设计步骤
2.1 图像预处理
由于每张图片的尺寸和大小不同,首先将数字化图像切割并对其进行一个小幅度的缩放,然后缩放后的整张数字化图片再次进行裁剪,即可以得出224×224大小的整张数字化图片,再进行像素的归一化处理,将处理好的图像存储到数组中。
2.2 数据增强
采用随机数据图片加权长度增强分析算法,将每一个输入的图片数据长度量化到0~1之间;再将计算得出来的每张输入照片的图像分别进行一定的频率和幅度不同的水平旋转,本文中各个频率和幅度旋转点的角度分别为15°、30°、90°;每一张输入的图片都是可以被认为在空间和宽度上同时进行了随机的、非固定水平方向的均值平移;每一张输入的图片,还可以被认为在高度方向上进行了随机的水平和垂直方向的平移,通过这种方向的偏移,得到对于一个整张输入图片的非固定高度水平百分比;对于某一张图片,可以一定的随机概率对其他图片分别进行随机的任何一个水平方向的翻转。
2.3 模型的构造和训练
本文选择VGG16卷积神经网络结构模型,同时考虑数据集中所使用图片的总量只有3500张图片,比较深的网络结构容易产生过拟合,故设计采用迁移学习改进VGG16卷积深度神经网络,使用已经训练好的参数进行网络的初始化。
3 基于迁移学习卷积神经网络算法原理
3.1 卷积神经网络结构
本文选取基于 VGG16 网络架构的来构建深度学习神经网络结构,为了达到提高和增强模型的泛化性和适应力的目的,也防止在小数据上产生或者造成过拟合的情况,采取迁移式机器学习的方法,使用先前在ImageNet上训练的VGG16神经网络的参数来对网络信号进行初始化设置。
VGG16的网络设计采用卷积式多层神经网络,如图1为VGG16网络结构图,通过对卷积核心层进行反复计算,添加3×3的卷积优化核和2×2最大的卷积池化层。VGG16共有16层,包括13层卷积优化层和3层完整的全方向连接层[1,3]。VGG16输入224×224×3的卷积池化核结构图片,经过两次继续连接一块含有64个卷积池化核的最小卷积池化层后,连接一个最大的卷积池化层;之后,又经过两次继续连接一个含有128个卷积池化核的卷积池化层后,连接一个最大的卷积池化层;再经过三次继续连接一个含有256个卷积池化核的最小卷积池化层之后,连接一个最大的卷积池化层;重复两次三个最小卷积核中分别含有512个卷积再进行了三个核卷的池积后,再对其他核进行最大的卷积池化[4]。最后将提取之后的特征送入到这三个全连接层中。
图1 卷积神经网络结构
图1中,conv表示该层是卷积优化层,pool表示池化层,fc表示全连接层,Size表示该层处理的图片大小,比如,Size:224表示该层处理的图片像素大小为224×224。
3.2 过拟合及解决方法
过拟合是模型参数在拟合过程中,由于训练数据中包括一些抽样误差,网络模型把抽样时产生的误差考虑在内,从而产生过拟合。过拟合表现为训练集的数量级和模型的复杂度不匹配;训练集和测试集特征分布不一致,权值学习迭代次数足够多,拟合了训练数据中的噪声和训练样例中没有代表性的特征[5]。为了解决过拟合问题,笔者首先想到采用数据增强获取更多的数据,让模型“看见”尽可能多的例外情况,它就会不断地修正自己,从而得到更好的结果;其次采用k折交叉验证的方法,可以获取一个安全、可靠、稳定的验证模型。
由于卷积神经网络的结构比较复杂,需要大量的训练和数据库来支撑和维护其进行训练,故采用图像增强是一种常见有效的手段,也是一种很常见的提升卷积神经网络的鲁棒性并且可以减少过拟合的有效手段[6]。本文通过对图像进行旋转、平移、镜像、裁剪、缩放等多种方式进行扩充,从而拓展数据的训练集。图2为数据增强前后对比。
图2 图片数据增强
3.3 k折交叉验证
如图3所示,通过10折交叉方法对数据进行检验其是否合格,将所有测试数据集各自分解为9-10份,轮流将其中9份分别当作一次训练,1份每次都要进行一次交叉的验证[5]。10次的交叉验证测试结果的算法平均值,一般都可以直接用来计算作为对于测试算法评价准确性和精度的平均值估计,一般还很有可能会根据实际应用情况重新计算多次10折交叉对象进行验证测试,以便重新寻找它们的平均值。交叉数据验证不仅可以很好地做到充分利用大量的验证数据,在一个有效无限量的验证数据集上快速寻找合适的验证模型和计算参数,并能有效地减少过拟合。
如图3所示,Training set是一个训练集,分10次迭代,在训练集中轮流取测试组进行迭代。其中,1st iteration表示第一次迭代,2st iteration表示第二次迭代,依此类推;Training fold表示在训练集中选取的训练组,Test fold表示在训练集中选取的测试组;E1表示第一轮迭代输出,E2表示第二轮迭代输出,依此类推。
图3 10折交叉验证图
3.4 迁移学习
把在ImageNet数据集上已经训练的VGG16的模型进行迁移,用来解决对场景分类的现实需求,这一方面可以有效地降低实验的成本和精力的消耗,另一方面可以提高实验的预期,因为仅仅需要进行参数的微调就会达到尽可能高的预期结果,更重要的是有了前人的参数经验,对后续的实验实现更加优化的分类模型的构建奠定了基础。
3.5 模型的损失函数和优化方法
在场景分类任务中,模型训练的时候会产生一定的训练损失,所以为了降低训练损失,需要添加交叉熵损失的函数,并且在其中添加一个合理的正则化项,使用的计算方法主要有两大公式,如公式(1)、公式(2)所示,这样可以有效地减少过拟合的风险,正则化项可以使用L2范数[2]。
本文采用的随机直接优化下降算法是 Adam(Adaptive Moment Estimation)随机直接优化下降算法,是一种通过直接优化替代传统随机优化算法来直接实现的,可以代替随机优化梯度的下降[5],还可以通过对现有训练神经数据模型进行迭加替代和数据更新来快速获得训练神经网络的精确权重。Adam所运用的原理是,运用梯度中的一阶矩阵和二阶矩阵来对估计的各个参数进行动态调整的学习率[6],它的主要优势之一是经过偏执性的校正后,每一次迭代的学习频率都能够在一个相对稳定的范围内,使得该参数在运算时不会发生很大的振动或者震荡,而是更加平稳地发生变化。其公式定义见公式(3)。
4 研究应用与成果
使用前面提到的数据集和百度Baidu AI Studio平台进行模型设计与训练实验结果如下:
在全连接层中,一层包含有256个神经元,笔者采用随机失活(Dropout), 失活比例为0.5,学习率 (lr)=0.001,批次数量 (batchsize)=64。
正确分类的场景图片占全部的场景图片的比例称为准确率,当模型处于最后一个预测阶段,如果全连接层输出的预测数据与真实场景中的预测数据类别相同,则认为这个样本被归类正确。
通过对实验结果分析可得,在网络参数如表1的条件下,训练集的最终准确率可达到0.984375,训练损失值仅为0.00740643,准确率和损失值曲线基本趋向一致。
表1 网络所含参数
表2 模型评估标准值
由图4可知,该图片中有大量草地,应该归类于草坪(lawn)类,故模型预测的结果完全正确。该神经网络的准确率达到分类的需要,可以正常使用。然而,即便达到了这么高的准确率,但是模型提升的空间是非常巨大的,暂时还不能对多场景进行分类,还需要对模型识别的广泛性进行研究,以完善模型结构,获得更优秀的结果。
图4 模型预测样本结果
模型训练20轮的训练损失以及训练的准确率如图5、图6所示。
图5 训练损失
图6 训练准确率
如图7所示,随着Epoch 的增加(神经网络训练信息的次数),使用训练的数据和对测试的数据进行评价的识别精确性都大大提高,并且这两个信息的识别精确性和准确率几乎完全不存在任何差异(这两条信息线基本重叠在一起)。因此,可以认为这次神经网络在训练的过程中没有出现任何被拟合的情况,该神经网络是可以正常使用的。
图7 多轮训练下的识别准确率
5 总结
本文设计基于迁移学习改进的VGG16卷积神经网络对场景进行分类,采用图片增强进行数据预处理来解决过拟合问题,采用k折交叉验证方法改变全连接层的结构,实验结果证明效果良好,模型的泛化能力较强,识别准确率较高,能达到98%左右。但是,由于实验分类类别过少,分类背景不够复杂,模型和方法在适应更复杂同类任务时可能还要做进一步的优化和改进。