孙书宁
(盐城市实验高级中学,江苏盐城,224000)
目前,在物联网、互联网背景下形成的移动互联网上,通过几行代码就可以很容易获得海量的样本数据集。为了进一步提高各种实际应用中所需的分类和识别任务的精度和准确率,基于这些积累的海量数据集的各种深度学习算法被提出来。同时,近些年来的竞赛结果表明,这些算法也确实较好地提升了分类和识别任务的性能。
然而,一些在线和实时监测等深度学习应用需求的涌现和发展,例如,为取得战场主动权的全天候、实时和动态的合成孔雷达等相关的在线深度学习应用。考虑到新的类别识别需求不断增加和新类别的数据量在短期内严重缺乏,使得这些深度学习算法在这种场景下分类和识别的性能严重下降。另外,随着深度学习的发展,基于移动互联网的海量数据集的训练模型不断地公开。为此,我们研究样本严重缺乏的迁移深度学习算法,也就是我们可以迁移这些训练模型到上面的实际深度学习任务中,从而有效地解决了实际场景中样本数据量不足和非实时性带来的识别性能下降的问题。
近些年来,深度学习算法在图像识别、视觉对象分类、语音和视频识别等领域得到了较好的发展, 深度迁移学习作为一种有效的方式将会被广泛使用。本质上,深度学习是一种包含多个隐藏层的多层人工神经网络学习算法。它是将一系列低层通用型特征通过非线性变换,从而形成高层的语义表示。目前,比较流行的网络模型有:AlexNet、GoogLeNet、VGG 和 ResNet。AlexNet描述了一个由三个全连接层和5个卷积神经网络层组成的网络训练模型。重叠的池层使用使得该网络模型较好地避免了样本数据训练过程中而导致的过度拟合。VGG模型可以理解为一种纯深度层次扩展网络模型,作者利用3x3卷积过滤较好地实现了深度层次的扩展。在GoogLeNet网络模型中,作者不仅从深度层次,而且从网络模型的宽度层次对现有模型进行了扩展。ResNet是一种可以比前面几种网络模型训练层次更多的残差网络模型。
迁移学习是一种将已经学习到的一般知识迁移到当前的网络学习中,从而得到一个具有更高层的语义表达的新网络模型。在深度学习中,迁移学习主要是指将基于海量数据集训练得到的具有通用特征网络模型迁移到新的具有特定的全局的网络训练模型中,由此较好地体现了类间区分性和类内不变形。
本文采用深度学习模型的是上面提到的VGG网络训练模型。VGG模型是牛津大学于2014年提出的计算机视觉领域ILSVRC竞赛获胜的算法。类似于具有层次数为8的AlexNet模型,VGG也主要关注于通过提高网络训练层次的深度来提升性能的深度学习算法,但它做了两个方面的改进:一是使用最小的过滤器和最小步长;二是对整张图片进行多尺度测试和训练。由此,使得它的训练层次深度达到或超过AlexNet模型的两倍,例如具有深度层次分别为16和19的VGG16模型和VGG19模型。它在图像识别和视觉分类等应用中可以达到较高的准确率。VGG卷积采用的是核大小为3*3的小卷积核,跨度为stride为1,填充参数padding为1,网络是分区块卷积网络,每个区块通过池大小为2x2的最大池(max-pooling)方式进行池化操作来达到无缝连接,从而达到逐层训练的更深的网络层次。基本过程可概括为如下几步:
(1)裁剪图片为大小224x224x3的图片,并以此大小作为VGG16的输入,分别经过64个卷积核大小为3*3*3和3*3*64的两次卷积后,进行池化操作max-pooling。卷积核大小为3*3*3每次卷积后,VGG16将增加(3x3x3)个权训练参数,而卷积核大小为3*3*64每次卷积后,VGG16将增加(3x3x64)个权训练参数。
(2)分别经过 128 个卷积核大小为 3*3*64 和 3*3*128的两次卷积后,进行池化操作max-pooling。
(3)分别经过 256 个卷积核大小为 3*3*128、3*3*256和3*3*256的三次卷积后,进行池化操作max-pooling。
(4)对下面过程重复两次:分别经过512个卷积核大小为 3*3*256、3*3*512 和 3*3*512 的三次卷积后,进行池化操作max-pooling。
(5)最后执行三次全连接FC过程。
整个过程只有13个卷积层和3个全连接层(即16个隐藏层的激活单元使用了ReLU)。经过13个卷积层的堆叠和三个全连接层后,最后将得到的特征映射单元输入softmax层。VGG通过感受野来将一个较大的卷积核替换为多个较少的3*3的小卷积核的堆叠,由此减少了需要训练的参数和通过增加了较多的非线性映射而达到增加网络的快速拟合能力。
深度迁移学习是指通过使用一个已训练好的适用于不同但是相关的深度学习任务模型,从而有利于缩小深度学习可能模型的搜索范围。它主要有冻结(Frozen)和微调(Finetuning)两种实现方式。在本文,我们主要考虑只有少量源数据情况下的深度学习,为了达到更好的性能,因此我们使用上面的两种实现方式来进行迁移训练出具有更高性能的网络模型,并对它们进行了比较。
这部分将使用VGG16来对图像进行分成分五个类别,使用的数据集见如下链接http://download.tensor fl ow.org/example_images/ fl ower_photos.tgz。 本文实验是基于deeplearning4j开发环境的。
本文训练数据采用的是和VGG相似的数据生成方式,如果要使用224×224的数据生成方式,当图片的最小边为224时,直接将另一边多余的部分裁剪为224即可。当最短边大于224时,可以将这个图片裁剪为包含所要训练数据的对象即可。在具体操作时,本文使用的是多尺度训练,即把原始图缩放到最短边大于224,进而在整张图上裁剪出包含训练对象的224×224的图片片断。有两种方式选取最短边,一是最短边分别为256和384来进行训练,我们这两个训练结果的平均值作为训练值;当最短边在一个上下界都大于224的区间上随即选取一个值,基于这个随机选取的图片,我们裁剪出224×224的图片片断来进行训练,并将这个随机裁剪的图片作为训练值。概括地说,在这个生成过程中,也就是首先准备好下面实验所需的训练数据和相应的测试数据;其次是考虑打到特定领域图像的均值文件可能与在某个数据集(ImageNet)上具有更一般的数据均值不同,因此需要重新计算实验所需的数据集均值文件;然后再对数据集进行预处理。因此,下面介绍的两种迁移方法的实验是基于上面裁剪和预处理后数据集的。
(1)冻结(Frozen):首先,为了和设置的分类目标任务一致,我们让除了指定block5_pool所在的层和该层以下的所有各层处于被冻结(Frozen)状态,即保持被冻结的层的参数是迁移过来的常量,我们考虑了指定的层分别block5_pool和fc2。当指定层为block5_pool时,则block5_pool和它以下的个层被冻结并block5_pool-> fl atten->fc1->fc2->predictions(1000 classes)更 改 为block5_pool-> fl atten->fc1->fc2->fc3->newpredictions(5 classes)后训练得到的模型。
(2)微调(Finetuning):首先,基于预训练和上面的冻结方法产生一个供微调使用的已保存状态存在的基于微调的训练模型。此处重载那些未被冻结的层参数设置,例如学习速率等,但采用的优化算法仍然不变。然后,调用上面训练并保存好的模型,设置好微调参数进行仔细训练,以期达到更好性能。概括地说,就是先修改最后一层网络的输出类别为实验要求的类别后,在这一层设置较快的学习速率;然后微调总的学习速率、步长和迭代次数(稍微减少)等参数;为了提高速度,训练中尽量装载已保存的预训练的模型参数。
(1)正确率(accuracy) 对于二分类来说,正确率=(TP+TN)/(P+N),其中TP是指正例样本中被划分为正例的样本实例数,即第一个字母是类别划分是正确(T)还是错误的(F),第二个字母是分类器分类为的类别。P是指正例的样本数,TN和N的定义与TP和P正好相反。 因此,正确率是所有的样本实例数除被正确分类的样本数。
(2)精度(precision)精度=TP/(TP+FP),即被分类为正例的样本示例中实际的类别为正例的比率。
(3)召回率(recall)召回率=TP/(TP+FN)=TP/P(实际为正例总数)=灵敏度(sensitive)。
(4)F1 Score它是精度(precision)和召回率(recall)的调和平均,它是根据表达式F1=[2*P*R]/(P+R)计算得到的,其中P和R分别指的是精度和召回率。
在下面的表1~3中,我们分别测试了迭代次数为80、120和160是的性能比较,其中当迭代次数为160时基于Frozen的模型训练结束。结果表明,当冻结为block5_pool及以下层时且微调的学习速率是1e-5时微调的性能要比冻结(学习速率是5e-5)的性能更好,如表1~3所示。
表1 迭代次数为80时冻结和微调方法的性能比较
表2 迭代次数为120时冻结和微调方法的性能比较
表3 迭代次数为160时冻结和微调方法的性能比较
本文主要介绍了深度迁移学习的研究背景、意义和现状,以及深度迁移学习的一般方法和步骤,重点介绍了一种学术界最新的深度迁移学习的预处理、分析评价等方法。基于公开的最新数据集,对冻结和微调两种深度学习方法进行了比较。这两种方法都可以适用于样本数据缺少的条件下的视觉对象分类等深度学习应用。