本发明涉及一种基于半监督学习的增量式图片分类方法。
背景技术:
随着深度学习的发展,很多相关的研究领域以及实际应用都有了重大突破,其中一个研究方向就是图像分类。然而,目前的深度学习模型的训练必须要求预先将所有的训练数据送入模型中训练,而无法进行增量式的学习。但是在实际的应用中,无法一次性拿到完整的数据,尤其是对于流数据场景更是如此,这就需要深度学习模型能够根据后续提供的新数据不断地学习,来更新自身的参数。在增量分类的学习过程中,模型需要能够在学习新知识的同时,还能够避免对旧知识的遗忘——这就是增量学习过程中需要克服的灾难性遗忘问题。
灾难性遗忘的解决方式可以通过对之前遇到的所有旧类样本做采样,但是对于部署增量学习模型的智能体,随着越来越多的新类到来,如果要存储所有类别的采样样本,其存储成本也会越来越大。即使存在其他间接的方法可以不存储旧数据样本,也依然存在模型效率降低的问题。比如,使用生成对抗网络模型(gan)从旧数据中学习到数据特征,然后构造一些训练数据。但是这一过程也是显著增加了整个增量学习过程需要的时间。另外,随着新类的到来,也要不断地增加gan模型的学习,这样就很难支持长时间的增量学习过程了。
另一方面,半监督学习作为机器学习的一个分支,涉及使用标记的数据和未标记的数据来执行某些学习任务。从概念上讲,它位于有监督的学习和无监督的学习之间,它允许利用许多训练样本中包含的大量无标签数据,同时也使用的较少的有标签数据集。半监督学习就可以通过无标签数据来提升模型的学习效果。
基于半监督学习的启发,考虑到目前公开的图片数据集之间也有很多相似性,那么在流数据场景下的增量学习的过程中,我们不仅可以利用有标签的新数据,同时也可以使用这种从第三方数据集获取的数据作为无标签数据来提高模型的性能。
技术实现要素:
发明目的:为了解决类增量学习过程中的遗忘灾难问题,同时兼具空间效率和时间效率,本发明提出了基于半监督学习的增量式图像数据分类方法,通过利用辅助数据来提高模型对旧知识的记忆能力,从而提高模型整体分类精度。
本发明包括如下步骤:
包括如下步骤:
步骤1,对流数据中出现的新类图片和和第三方公开图片数据集作为辅助数据进行预处理,得到集合a和集合b;
步骤2,将当前模型备份副本,并将副本作为旧模型,存储到目前为止已经学习到的网络参数和prototype向量,所述网络参数包括底层网络参数和分头网络参数,prototype向量也是模型中的一部分,用来表征每个类别的特征,网络参数和prototype向量均由之前的图片训练得到;分头网络数目与当前模型能分类的图像类别数相关,每个类别对应一个分头网络,所述当前模型是由之前流数据训练好的模型,训练方式与本次迭代相同,区别仅在于图片类别;
在实际部署过程中,底层网络需要根据图像数据集的具体情况选择。比如对于mnist数据集,使用一般的cnn网络就可以了,对于更复杂的cifar-10,可以选择resnet-18作为底层网络抽取中间特征。分头网络相对于底层网络独立,是由一个中间层(隐藏层)和一个分类层构成的模块。
步骤3,使用集合a,训练一个专门用于分类新类数据的深度学习模型,称为teacher模型(参考文献:class-incrementallearningviadeepmodelconsolidation);teacher模型的训练与之前的旧模型训练方式完全相同,区别仅在于使用的训练数据不同而已。
步骤4,在当前模型基础之上,根据集合a中的新的图像类别数目,增加对应的分头网络个数,同时,需要为每个新图像类设置一个prototype向量初始值,所设初始值为全0向量;初始值设置为全0向量有两点考虑:(1)到目前而言,模型对于该类图像没有任何先验知识;(2)在接下来的模型训练过程中,prototype向量会不断调整,逐渐具有代表该类图像特征的语义。截至到上一迭代训练过程中学习到的针对所有已有训练好的网络参数和prototype向量,以及在本轮迭代训练过程中为遇到的新的图像类别而增加的分头网络参数和prototype向量,构成了参数待更新的新模型;
步骤5,将集合a,集合b中的数据进行shuffle操作,构成本次迭代使用的训练数据;shuffle操作的主要目的是让本次训练过程中,新模型可以交错接触新数据与辅助数据,从而提高学习效果。
步骤6,根据目标向量生成算法,使用teacher模型和旧模型计算训练数据的目标向量y;
步骤7,将训练数据送入新模型,然后计算每个分头网络的特征向量到prototype的距离d,得到分数向量
步骤8,使用二元交叉墒损失函数,计算本批次的损失值loss;
步骤9,根据损失值loss,使用梯度下降算法,计算模型各个权重参数对应的梯度,并使用优化器调整对应的参数;
步骤10,对截至本次迭代遇到的每个图像类别,从每个类选取20%的样本作为测试图像,用来测试新模型的图像分类准确率。
在实际的模型部署中,其实可以通过使用部分旧数据来提高模型性能。而整个训练过程可以直接使用上面描述的训练过程。
步骤1包括:对新类图片做边界填充(一般为2个像素大小),并进行随机剪裁,最终缩放到32*32像素,计算rgb图片对应3个通道的均值、方差,然后对这些图片做归一化处理,放在集合a中,对辅助数据做相同处理,放在集合b中;
步骤1中,所述新类图片是之前训练模型时未出现的图片类别;所述辅助数据中的数据是从第三方图片数据集采样的图片。
步骤2中,所述prototype向量是在特征空间中描述类别特征的向量。
步骤6中,所述目标向量生成过程为:对每个样本,为其构造一个大小为1*(s t)的向量作为目标向量,从旧类别1到s,对于新类数据与辅助数据,均使用旧模型在这s个类别上产生的输出作为该部分的目标分量;而从新类别s 1到s t这t个类别,对于新类数据,使用one-hot编码的方式来确定该部分的目标分量,即样本对应类标位置为1,其他的新类位置为0;而对于辅助数据,使用teacher模型的输出作为该部分的目标分量,然后将这两部分目标分量拼接,得到最终的目标向量。
对于辅助数据,其目标向量的旧类部分与新类部分分别使用旧模型与teacher模型的输出值,前者是以蒸馏方式让新模型在学习过程中加强对旧知识的记忆,后者也通过蒸馏方式来提高新模型对新知识学习;对于新数据,其目标向量的旧类部分生成方式与辅助数据相同,其目的也相同,但是对于新类部分,通过one-hot编码方式,可以让新模型直接对新知识进行学习,从而更加充分提取新类数据包含的信息。
步骤7中,对于每个分头网络,使用欧式距离计算特征向量到该类prototype的距离:
d=||xf-xp||2(1)
其中,xf为经过网络抽取得到的图片的特征向量,xp为该分头网络负责的图片类的prototype向量,每一个分头网络使用自身的隐藏层提取特征xf,然后按照公式(1)就能够得到该类别对应的距离d,通过sigmoid函数,得到输入图片在该类别的分数:
其中,r为超参数,公式(2)意味着如果特征向量到prototype向量的距离越近,那么在该类的得分就会越趋近于1。每个类对应的分头网络都使用公式(2)来计算第i类的得分
步骤8中,计算损失值loss使用的二元交叉墒损失函数loss如下:
其中,n表示所有的样本数,c表示总的类别数,
进一步,为了让辅助数据更侧重对知识的记忆,新数据更侧重对知识的学习,需要分别考虑辅助数据在旧知识固化方面产生的损失值loss1,在新知识学习方面产生的损失值loss2,新类数据在旧知识固化方面产生的损失值loss3,在新知识学习方面产生的损失值loss4,其计算方法如下面公式所示:
其中nu,nl分别表示无标签数据的大小和新数据的大小,s表示旧类别数目,t表示新类别数目,w1,w2,w3,w4分别表示这4部分损失值loss1、loss2、loss3、loss4占比关系,由于辅助数据更侧重旧知识固化,那么有w1>w2,而新数据侧重于新知识的学习,那么有w3<w4,一般w1∶w2∶w3∶w4=10∶1∶1∶10。
本发明还包括步骤11,根据迭代次数选择退出模型迭代过程,或者根据学习率策略调整学习率(例如训练迭代次数为60,学习率调整方式为迭代次数到45,55,每次除以10),进入下一次模型训练周期,继续训练模型。在本发明的模型中之所以选择二元交叉墒损失函数,是因为对于模型中的每一个分头网络,都是一个二元分类器。这意味着对于该分类器,其职责是分辨当前输入的数据要么是该分类器所负责的类别,要么是其他类。在预测阶段,通过比较每个类对应分类器的分数,选取其中的最大值,其对应的类标就是最终的预测结果。
本发明具有如下有益效果:
本发明相比较其他的增量式分类算法,能进一步提升分类效果;
本发明可以很方便使用旧数据来提升整体的性能,且不需要改动任何模型结构;
本发明利用了第三方的数据,进一步缓解增量式分类中的灾难性遗忘问题;
本发明利用了第三方的数据,提升了模型学习新类别的能力。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
图1为本发明涉及到的模型的框架结构。
图2为对于新数据的目标向量生成过程示意图。
图3为对于辅助数据的目标向量生成过程示意图。
图4为未使用旧数据,以cifar-10数据集模拟流数据的测试结果。
图5为未使用旧数据,以cifar-100数据集模拟流数据的测试结果。
图6为使用旧数据,以cifar-10/100数据集模拟流数据的测试结果。
图7为使用不同数量的辅助数据的测试结果。
图8为本发明流程图。
具体实施方式
如图1所示,本发明方法使用的模型主要包含三个模块,最左侧的是共享层,这部分有两个作用,一是使用共享层初步抽取底层特征,而是通过参数共享的方式,防止随着后续类别数目的大量增加,导致整个网络的参数爆炸式增长。另外,该部分的网络选择与实际要处理的数据相关,比如像简单的mnist手写体数据集,该部分使用简单的cnn网络就可以了,而对于cifar-10/100数据集,共享层网络可以选择resnet-18网络模块,而对于imagenet数据集,那么可以使用更加复杂了resnet-34等网络结构。
第二部分是与每个类相关的上层网络,每个类对应一个分头网络,该部分也包含两个子部分,其一是该分头网络由一个隐藏层和一个全连接层构成,用于专门抽取该分头网络所负责类别的特征,其二是对于每个类,还需要一个与之相关的prototype向量,用于在训练的过程中产生类别特征的语义。
在训练阶段,训练数据经过共享层,得到了中间向量,然后再将中间向量送入各个分头网络,每个分头网络都会产生一个特征向量xf,然后计算到该分头网络的prototype向量xp的欧式距离,最后再根据公式2计算样本在该分头网络的得分,然后计算出该次训练的损失值。
最后一个部分是关于预测机制的。在预测阶段,把网络中所有分头网络的输出分数比较,采用winner-takes-all机制,选择最高分数所对应类别,即为模型最终的预测结果。
图2描述了对于新类数据,即有标签数据,其目标向量的生成过程。对于所有旧类别,通过旧模型的输出分数得到对应位置的分量,而对于本批次的新类,根据该数据的标签,其类标对应位置为1,其他新类对应的位置置为0。通过这种方式,让新类数据兼顾了模型对旧知识的记忆与对新知识的学习。
图3描述了对于辅助数据,即无标签数据,其目标向量的生成过程。对于所有旧类别,通过旧模型的输出分数得到对应位置的分量,而对于所有新类别,通过teacher模型的输出分数得到对应位置的分量。辅助数据侧重于加强模型对旧知识的记忆。
实施例
为了验证所提出新方法的效果,本实施例使用cifar-10/100作为实验数据集,来模拟流数据场景,使用tiny-imagenet-200中抽取10个类,每个类500张图片作为辅助数据。另外使用resnet-18作为共享层模块,初始学习率设置为0.0001,学习率的调整策略为每过1/4的训练时长,学习率减半,梯度下降算法选择adam算法。对于cifar-10/100,训练epoch分别设置为60/100,超参数r分别设置为10/15,每个分头网络网络中的隐藏神经元数目均设置为50个。对于cifar-10数据集,其训练样本每批次为2个类,分5个阶段送入模型来模拟增量式分类过程;对于cifar-100数据集,其训练样本每批次为10个类,分10个阶段送入。为了方便描述,把新方法命名为ss-pbrc。为了充分比较ss-pbrc算法的性能,选取了在增量学习领域经常使用的对比算法ewc,lwf,lwf.multi,同时使用fine-tuning方法作为baseline。
第一个实验未使用任何旧类数据,从图4可以看出,在cifar-10数据集上,随着增量式学习的进行,越到后期,本发明的方法与对比方法相比较,其优势越明显,通过图5的cifar-100数据集上的训练结果,反应出在长期的增量学习过程中,本发明方法很有优势。
第二个实验是在引入旧训练数据的情况下,为了更加清楚旧类样本数量对模型的影响,分别设置采样数量为20,50,100。从图6的实验结果可以看出,ss-pbrc模型相对于其他对比算法在使用了相同数量的旧类数据的情况下,其性能提升幅度更大,同时,相对更少的采样样本数量的时候,ss-pbrc模型的优势更明显。
第三个实验是为了反应辅助数据集大小对ss-pbrc模型的影响,分别从tiny-imagenet-20中抽取5/10/20个类作为辅助数据。从图7的实验结果可以看出,随着辅助数据数据的增多,模型的效果确实有了提升,但是幅度不大,这也反映了本发明的模型在实际部署的时候不需要太多的辅助数据。
对两个实验总结如下:
1.在未使用旧数据的情况下,本方法在长时间的增量式学习中性能更好,这就意味着该方法相比其他数据,更适合应用在流数据场景。
2.在存储部分旧数据的情况下,本方法适用相同的旧数据样本,能有更大的性能提升,这也说明该方法可以降低对旧数据的存储需求。
3.该方法对于辅助数据集大小要求较低。
通过以上详细的对比试验,充分验证了本发明提出的半监督学习的增量式图像数据分类方法的有效性和可行性。
本发明提供了一种基于半监督学习的增量式图片分类方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
1.一种基于半监督学习的增量式图片分类方法,其特征在于,包括如下步骤:
步骤1,对流数据中出现的新类图片和和第三方公开图片数据集作为辅助数据进行预处理,得到集合a和集合b;
步骤2,将当前模型备份副本,并将副本作为旧模型,存储到目前为止已经学习到的网络参数和prototype向量,所述网络参数包括底层网络参数和分头网络参数,prototype向量也是当前模型中的一部分,用来表征每个类别的特征,网络参数和prototype向量均由之前的图片训练得到;分头网络数目与当前模型能分类的图像类别数相关,每个类别对应一个分头网络,所述当前模型是由之前流数据训练好的模型;
步骤3,使用集合a,训练一个专门用于分类新类数据的深度学习模型,称为teacher模型;
步骤4,在当前模型基础之上,根据集合a中的新的图像类别数目,增加对应的分头网络个数,同时,需要为每个新图像类设置一个prototype向量初始值,所设初始值为全0向量;截至到上一迭代训练过程中学习到的针对所有已有训练好的网络参数和prototype向量,以及在本轮迭代训练过程中为遇到的新的图像类别而增加的分头网络参数和prototype向量,构成了参数待更新的新模型;
步骤5,将集合a,集合b中的数据进行shuffle操作,构成本次迭代使用的训练数据;
步骤6,根据目标向量生成算法,使用teacher模型和旧模型计算训练数据的目标向量y;
步骤7,将训练数据送入新模型,然后计算每个分头网络的特征向量到prototype的距离d,得到分数向量
步骤8,使用二元交叉墒损失函数,计算本批次的损失值loss;
步骤9,根据损失值loss,使用梯度下降算法,计算模型各个权重参数对应的梯度,并使用优化器调整对应的参数;
步骤10,对截至本次迭代遇到的每个图像类别,从每个类选取20%的样本作为测试图像,用来测试新模型的图像分类准确率。
2.根据权利要求1所述的方法,其特征在于,步骤1包括:对新类图片做边界填充,并进行随机剪裁,最终缩放到32*32像素,计算rgb图片对应3个通道的均值、方差,然后对这些图片做归一化处理,放在集合a中;对辅助数据做相同操作,放在集合b中。
3.根据权利要求2所述的方法,其特征在于,步骤1中,所述新类图片是之前训练模型时未出现的图片类别;所述辅助数据中的数据是从第三方图片数据集采样的图片。
4.根据权利要求3所述的方法,其特征在于,步骤2中,所述prototype向量是在特征空间中描述类别特征的向量。
5.根据权利要求4所述的方法,其特征在于,步骤6中,所述目标向量生成过程为:对每个样本,为其构造一个大小为1*(s t)的向量作为目标向量,从旧类别1到s,对于新类数据与辅助数据,均使用旧模型在这s个类别上产生的输出作为该部分的目标分量;而从新类别s 1到s t这t个类别,对于新类数据,使用one-hot编码的方式来确定该部分的目标分量,即样本对应类标位置为1,其他的新类位置为0;而对于辅助数据,使用teacher模型的输出作为该部分的目标分量,然后将这两部分目标分量拼接,得到最终的目标向量。
6.根据权利要求5所述的方法,其特征在于,步骤7中,对于每个分头网络,使用欧式距离计算特征向量到该类prototype的距离:
d=||xf-xp||2
(1)
其中,xf为经过网络抽取得到的图片的特征向量,xp为该分头网络负责的图片类的prototype向量,每一个分头网络使用自身的隐藏层提取特征xf,然后按照公式(1)就能够得到该类别对应的距离d,通过sigmoid函数,得到输入图片在该类别的分数:
其中,r为超参数,每个类对应的分头网络都使用公式(2)来计算第i类的得分
7.根据权利要求6所述的方法,其特征在于,步骤8中,计算损失值loss使用的二元交叉墒损失函数loss如下:
其中,n表示所有的样本数,c表示总的类别数,
分别考虑辅助数据在旧知识固化方面产生的损失值loss1,在新知识学习方而产生的损失值loss2,新类数据在旧知识固化方面产生的损失值loss3,在新知识学习方面产生的损失值loss4,其计算方法如下面公式所示:
其中nu,nl分别表示无标签数据的大小和新数据的大小,s表示旧类别数目,t表示新类别数目,w1,w2,w3,w4分别表示这4部分损失值loss1、loss2、loss3、loss4占比关系。
8.根据权利要求7所述的方法,其特征在于,还包括步骤11,根据迭代次数选择退出模型迭代过程,或者根据学习率策略调整学习率,进入下一次模型训练周期,继续训练模型。
技术总结