一种增量式的数据集加速生成方法及系统与流程

文档序号:16246832发布日期:2018-12-11 23:39阅读:216来源:国知局
一种增量式的数据集加速生成方法及系统与流程

本发明涉及数据处理领域,尤指一种增量式的数据集加速生成方法及系统。

背景技术

卷积神经网络现已成为计算机视觉领域中最具影响力革新的一部分,由于图像分类是对输入图像的操作,最终输出一组最好的描述图像内容的分类或者分类的概率,但是对人类来说,识别是出生便开始学习的技能,但是人类的专属技能机器尚未享有,所以通过卷积神经网络对图片进行一些处理比如分类、定位、检测、分割,进而读取不同类别的图片,现在亚马逊,facebook(和instagram)可以使用它,如今拥有的十几亿用户的图片。

但是在现有技术的卷积神经网络训练中,训练框架为了保持更高的数据读取效率往往会使用中间数据格式,以tensorflow为例,它使用了tfrecord作为他的中间数据存储格式,这样的优点是提高了数据的读取效率,另外还可以对中间层的数据进行检查保证数据的正确性,同时不会造成训练的中断以及训练程序的异常退出。就现有技术的而言带来优点的同时也带来了缺点,比如生成这种中间数据格式会消耗大量的时间,也不支持增量的数据生成,因为只要在训练期间,对数据集稍微有点修改,就需要全部重新生成所有的文件,面对现在生活中运用到的海量数据,这将是非常浩大的工作量。

所以解决这种速度慢且不支持增量的数据生成的问题是很有必要的。



技术实现要素:

为了克服上述技术缺陷,本发明提供一种增量式的数据集加速生成方法及系统,具体的,本发明提供的技术方案如下:

首先,本发明提供了一种增量式的数据集加速生成方法,包括步骤:加载类别标签文件和所有进度记录文件,其中,所述类别标签文件含有训练用的文件的分类名称及对应的编号;所述进度记录文件与所述中间数据集对应,每个进度记录文件记载了一个中间数据集中的所有中间数据对应的原始文件的标志信息;检查所述类别标签文件是否有变更;当检查到所述类别标签文件没有变更时,读取所有进度记录文件,获取每个中间数据集中所有中间数据对应的原始文件信息;乱序生成当前所有原始文件的任务列表;根据所述任务列表以及所述进度记录文件,获取待删除的目标任务,并在所述任务列表中将所述目标任务进行删除;获取最终的任务列表,并根据所述任务列表中的任务调用线程池中的线程生成对应的中间数据。

进一步优选的,根据所述任务列表以及所述进度记录文件,获取待删除的目标任务,并在所述任务列表中将所述目标任务进行删除具体包括:比对从每个进度记录文件中读取到的相应的中间数据集中所有的中间数据对应的原始文件是否均存在于所述任务列表中;将所有中间数据对应的原始文件均存在于所述任务列表中的中间数据集标记为第一中间数据集;将所有中间数据对应的原始文件未全部存在于所述任务列表中的中间数据集标记为第二中间数据集;当所有中间数据集均是第一中间数据集时,选取一个中间数据集进行删除,并将剩余的中间数据集中的所有中间数据对应的原始文件在所述任务列表中进行任务删除;当所有中间数据集中存在有第二中间数据集时,将所述第二中间数据集进行删除,并将第一中间数据集中的所有中间数据对应的原始文件在所述任务列表中进行任务删除。

进一步优化的,所述进度记录文件为一个中间数据集中的所有中间数据对应的原始文件的md5值的序列化文件。

进一步优选的,当检测到所述类别标签文件有变更时,删除所有中间数据集。

进一步优选的,根据cpu的核数设置线程池并发线程的数量。

其次,本发明还提供了一种增量式的数据集加速生成系统,其特征在于,包括:数据加载模块,用于加载类别标签文件和所有进度记录文件,其中,所述类别标签文件含有训练用的文件的分类名称及对应的编号;所述进度记录文件与所述中间数据集对应,每个进度记录文件记载了一个中间数据集中的所有中间数据对应的原始文件的标志信息;检查模块,用于检查所述数据加载模块中加载的所述类别标签文件是否有变更;读取模块,用于当所述检查模块2检查到所述类别标签文件没有变更时,读取所有进度记录文件,获取每个中间数据集中所有中间数据对应的原始文件信息;列表生成模块,用于乱序生成当前所有原始文件的任务列表;任务删除模块,用于根据所述任务列表以及所述进度记录文件,获取待删除的目标任务,并在所述任务列表中将所述目标任务进行删除;列表获取模块,用于获取最终的任务列表;线程调用模块,用于根据所述列表获取模块获取的所述任务列表中的任务调用线程池中的线程生成对应的中间数据。

进一步优选的,所述任务删除模块还包括:比对数据模块,用于比对从所述数据加载模块加载的每个所述进度记录文件中读取到的相应的中间数据集中所有的中间数据对应的原始文件是否均存在于所述列表生成模块生成的所述任务列表中;数据标记模块,用于将所有中间数据对应的原始文件均存在于所述任务列表中的中间数据集标记为第一中间数据集;将所有中间数据对应的原始文件未全部存在于所述任务列表中的中间数据集标记为第二中间数据集;数据操作子模块,用于在当所有中间数据集均是所述数据标记模块标记的所述第一中间数据集时,选取一个中间数据集进行删除,并将剩余的中间数据集中的所有中间数据对应的原始文件在所述任务列表中进行任务删除;当所有中间数据集中存在有所述数据标记模块标记的所述第二中间数据集时,将所述第二中间数据集进行删除,并将第一中间数据集中的所有中间数据对应的原始文件在所述任务列表中进行任务删除。

进一步优选的,所述数据加载模块中加载的所述进度记录文件为一个中间数据集中的所有中间数据对应的原始文件的md5值的序列化文件。

进一步优选的,所述数据操作子模块,还用于当所述检查模块检测到所述类别标签文件有变更时,删除所有中间数据集。

进一步优选的,一种增量式的数据集加速生成系统还包括:线程设置模块,用于根据cpu的核数设置线程池并发线程的数量。

通过本发明提供的一种增量式的数据集加速生成方法及系统,能够带来以下至少一种有益效果:

1、本发明采用了进度记录文件来记录已生成中间数据的原始文件信息,使得后续处理时可快速查找到哪些原始文件已处理生成了中间数据,进而加快了数据处理的进度,提高了工作效率。特别的,若通过序列化处理的方式记录原始文件生成中间文件的信息,那这样的进度记录文件采用二进制的方式进行存储,后续读取时通过反序列化读取,存储和读取的速度也会更快,进一步提升了数据处理速度。

2、相对于现有技术不支持增量式的数据生成,本发明则更为人性化,在原始数据文件发生增加、修改或删除等情况时,无需将全部已生成的中间数据集全部删除,再重新生成,而是根据所有进度记录文件中的记录信息与任务列表进行比对后进行相应处理,对于原始数据文件仅增加情况下,为了达到乱序处理目的,只需删除一个中间数据集即可;其余中间数据集无需删除,而只把任务列表中对应的任务进行删除;这样减少了任务的处理量,提高了数据处理的速度。而对于原始文件有修改或删除的情况,则只需要将该原始文件对应的中间数据集进行删除即可,其余未改动的原始文件对应的中间数据集无需删除,同样只将相应的任务件删除即可。如此,通过所有进度记录文件与任务列表进行比对,按照中间数据集的不同情况采取了不同的处理措施,加快了数据处理速度,提升了处理效率。

3、本发明在获取到最终的任务列表后,可以通过调用线程池中的线程并发处理各任务。此外,线程池中线程的数量可以根据cpu核数进行设置,因为在系统调度并发过程中,过少的线程池数量设置会延迟相应的数据处理,过多的线程池数量设置,到导致线程之间的切换开销变大,从而导致效率变慢;本发明的方案是利用线程的并发特性,在执行过程中实际上是在每个cpu单元核中进行执行,因为最大线程数目设置了cpu核数为合适的线程,这样的操作获取了系统的最大多线程性能,这样对数据的处理速度将会有很大的提升。

附图说明

下面将以明确易懂的方式,结合附图说明优选实施方式,对一种增量式的数据集加速生成方法及系统的上述特性、技术特征、优点及其实现方式予以进一步说明。

图1是本发明的一种增量式的数据集加速生成方法一实施例流程图;

图2是本发明的一种增量式的数据集加速生成方法另一实施例流程图;

图3是本发明的一种增量式的数据集加速生成方法又一实施例流程图;

图4是本发明的一种增量式的数据集加速生成系统一实施例结构示意框图;

图5是本发明的一种增量式的数据集加速生成系统的另一实施例结构示意框图。

附图标号说明:

1-数据加载模块,2-检查模块,3-读取模块,4-列表生成模块,5-比对数据子模块,6-数据标记子模块,7-数据操作子模块,8-列表获取模块,9-线程调用模块,10-线程设置模块,任务删除模块11。

具体实施方式

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对照附图说明本发明的具体实施方式。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,并获得其他的实施方式。

为使图面简洁,各图中只示意性地表示出了与本发明相关的部分,它们并不代表其作为产品的实际结构。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能的部件,仅示意性地绘示了其中的一个,或仅标出了其中的一个。在本文中,“一个”不仅表示“仅此一个”,也可以表示“多于一个”的情形。

根据本发明提供的一种实施例,如图1所示,一种增量式的数据集加速生成方法,包括步骤:

s001加载类别标签文件和所有进度记录文件,其中,所述类别标签文件含有训练用的文件的分类名称及对应的编号;所述进度记录文件与所述中间数据集对应,每个进度记录文件记载了一个中间数据集中的所有中间数据对应的原始文件的标志信息;

s002检查所述类别标签文件是否有变更;

s003当检查到所述类别标签文件没有变更时,读取所有进度记录文件,获取每个中间数据集中所有中间数据对应的原始文件信息;

s004乱序生成当前所有原始文件的任务列表;

s005根据所述任务列表以及所述进度记录文件,获取待删除的目标任务,并在所述任务列表中将所述目标任务进行删除;

s006获取最终的任务列表,并根据所述任务列表中的任务调用线程池中的线程生成对应的中间数据。

首先,在卷积神经网络的训练中,训练框架为了保持更高的数据读取效率往往会使用中间数据格式。也就是说原始文件需要转换成中间数据后再进行训练。中间数据集则是中间数据的一种存储格式,一般的一个中间数据集存储了1000个中间数据。

上述进度记录文件与中间数据集对应,中间数据集中的中间数据对应的是原始图片生成的中间数据,进度记录文件就记录的这些已生成中间数据的原始文件的标记信息。类别标签文件对应所有中间数据集,类别标签文件记录的是中间数据集在表中的分类,分类是指,比如tensorflow训练一个10分类的问题,那么类别标签文件中就会记录10个分类标签,分别是他们的类别名字,和编号【0-9】(10个类)。

具体的,加载类别标签和所有进度记录文件,类别标签中记录了训练用的文件的分类名称和对应的编号,例如训练用的文件有猫的图片,狗的图片,所以类别标签将猫的图片分为一类对应的编号设置为1,将狗的图片分为一类对应的编号设置为2,进度记录文件与中间数据集对应,每个进度记录文件记载一个中间数据集中的所有中间数据对应的原始文件的标志信息,一个中间数据集包含有由1000个原始文件生成的1000个中间数据;记录文件用来记录对应的中间数据集中的1000个中间数据对应的原始文件的标志信息。

接下来检查类别标签文件是否有变更,类别标签文件变更的情况有多种,其中包括分类与对应的编号发生了变化,以及增加了类别,或者减少了类别等。当检查到类别标签文件中的信息未发生变化时,读取所有的进度记录文件,可以获取到生成中间数据的对应的原始图片信息,紧接着生成当前所有原始文件的任务列表,就是说所有的准备生成中间数据的原始图片的任务列表;继而通过上述生成中间数据的原始图片的任务列表以及与中间数据集对应且记载中间数据集中的所有中间数据对应的原始文件的标志信息的进度记录文件,获取到待删除的目标任务,在上述列表里将目标任务删除,获取最终的任务列表,并根据所述任务列表中的任务调用线程池中的线程生成对应的中间数据。

根据本发明提供的一种实施例,如图2所示,一种增量式的数据集加速生成方法,包括步骤:

s101加载类别标签文件和所有进度记录文件,其中,所述类别标签文件含有训练用的文件的分类名称及对应的编号;所述进度记录文件与所述中间数据集对应,每个进度记录文件记载了一个中间数据集中的所有中间数据对应的原始文件的标志信息;

s102检查所述类别标签文件是否有变更;

s103当检查到所述类别标签文件没有变更时,读取所有进度记录文件,获取每个中间数据集中所有中间数据对应的原始文件信息;

s104乱序生成当前所有原始文件的任务列表;

s105比对从每个进度记录文件中读取到的相应的中间数据集中所有的中间数据对应的原始文件是否均存在于所述任务列表中;

s106将所有中间数据对应的原始文件均存在于所述任务列表中的中间数据集标记为第一中间数据集;将所有中间数据对应的原始文件未全部存在于所述任务列表中的中间数据集标记为第二中间数据集;

s107当所有中间数据集均是第一中间数据集时,选取一个中间数据集进行删除,并将剩余的中间数据集中的所有中间数据对应的原始文件在所述任务列表中进行任务删除;

s108当所有中间数据集中存在有第二中间数据集时,将所述第二中间数据集进行删除,并将第一中间数据集中的所有中间数据对应的原始文件在所述任务列表中进行任务删除;

s109获取最终的任务列表,并根据所述任务列表中的任务调用线程池中的线程生成对应的中间数据。

具体的,加载类别标签和所有进度记录文件,类别标签中记录了训练用的文件的分类名称和对应的编号,例如训练用的文件有猫的图片,狗的图片,所以类别标签将猫的图片分为一类对应的编号设置为1,将狗的图片分为一类对应的编号设置为2,进度记录文件与中间数据集对应,每个进度记录文件记载一个中间数据集中的所有中间数据对应的原始文件的标志信息,一个中间数据集包含有由1000个原始文件生成的1000个中间数据(一个原始文件生成一个中间数据);记录文件用来记录对应的中间数据集中的1000个中间数据对应的原始文件的标志信息。

接下来检查类别标签文件是否有变更,类别标签文件变更的情况有多种,其中包括分类与对应的编号发生了变化,以及增加了类别,或者减少了类别等。当检查到类别标签文件中的信息未发生变化时,读取所有的进度记录文件,可以获取到生成中间数据的对应的原始图片信息,紧接着生成当前所有原始文件的任务列表,就是说所有的准备生成中间数据的原始图片的任务列表。

通过这个任务列表与所有进度记录文件中已生成中间数据的原始图片信息进行比对,看每个中间数据集中的所有中间数据对应的原始文件是否均在任务列表中存在,这个地方也会分两种情况,本实施例将所有中间数据对应的原始文件都存在于这个任务列表中的数据集标记为第一数据集,将中间数据对应的原始文件没有全部出现的任务列表中的中间数据集标记为第二数据集,例如从某进度记录文件中获取到其对应的中间数据集中所有的中间数据对应的原始图片都在任务列表中,那么该中间数据集被标记为第一数据集,再比如,进度记录文件中记录已生成中间数据对应的原始图片,如果有两个原始图片没有出现在任务列表中,那么就会被标记为第二数据集。

本实施例中,当所有中间数据集均是第一中间数据集时,选取一个中间数据集进行删除,那么剩余的中间数据集中所有中间数据对应的原始文件都属于目标任务,因此,还需要将这些目标任务在所述任务列表中进行任务删除;

当所有中间数据集中存在有第二中间数据集时,将所述第二中间数据集进行删除,剩余的所有第一中间数据集中的所有中间数据对应的原始文件都属于目标任务,因此,还需将这些目标任务在所述任务列表中进行任务删除。

例如,四个数据集a、b、c、d中的所有中间数据对应的原始图片信息都存在于任务列表中,那么就删除其中一个中间数据集,比如删除中间数据集a,并且将剩余的中间数据集b、c、d对应的原始图片任务在任务列表中删除。也就是说剩余的中间数据集b、c、d对应的原始图片任务便是目标任务,需要在任务列表中删除。因为中间数据集b、c、d中已经有中间数据了,那么他们对应的原始文件就无需再重复生成了,如此可以加快原始文件的处理速度,避免重复生成浪费时间。而为何要选取一个中间数据集进行删除呢,由于如果所有的中间数据集都是第一中间数据集的话,那么就说明原始文件中没有文件删除或者修改,只是增加了新的原始图片(注意新增的原始图片属于现有的几个类别之中),出于训练时给出的训练数据--也就是中间数据是需要随机乱序的,而当已生成的所有中间数据集都是第一数据集的时候,如果不将其中一个中间数据集进行删除的话,那么便只有新增的原始图片可以用于乱序处理,这样一来就违背了乱序处理的初衷,因此,在这种情况下,需要删除其中一个中间数据集,这样被删除的这个中间数据集对应的所有原始图片就需要全部重新生成,这部分原始图片便会混合新增的原始图片在任务列表中,使得不仅是新增的原始图片进行了乱序处理,还混合了之前的原始图片,满足训练数据的乱序处理的初衷。

另外,当所有的中间数据集存在有第二中间数据集时,也就是中间数据对应的原始文件没有全部出现在任务列表中时候,将所述第二中间数据集进行删除,并将第一中间数据集中的所有中间数据对应的原始文件在所述任务列表中进行任务删除。例如现在有分别是a、b、c、d四个中间数据集,现在a、b、c这四个中间数据集中的中间数据对应的原始图片任务全部出现的任务列表中,只有中间数据集d中的中间数据对应的原始图片任务没有全部出现的任务列表中,该中间数据集d则为第二中间数据集,此时,需要将中间数据集d进行删除,并将中间数据集a、b、c中中间数据对应的原始图片任务在列表中删除,此时,中间数据集a、b、c三个中间数据对应的原始图片任务便是目标任务,需要在任务列表中删除,因此这三个中间数据集a、b、c中的中间数据对应的原始图片任务就不需要重新生成,从而减少重复的数据生成,加快了处理速度。

最后获得一个处理后的任务列表,并且设置任务列表中的任务调用的线程,通过调用的多个线程进行并发式处理,将任务列表中要生成中间数据的原始文件生成中间数据。

本发明提供的另一种实施例,如图3所示,一种增量式的数据集加速生成方法,包括步骤:

s201加载类别标签文件和所有进度记录文件,其中,所述类别标签文件含有训练用的文件的分类名称及对应的编号;所述进度记录文件与所述中间数据集对应,每个进度记录文件记载了一个中间数据集中的所有中间数据对应的原始文件的标志信息;

s202检查所述类别标签文件是否有变更;若是,进入步骤s203,否则进入步骤s204;

s203当检测到所述类别标签文件有变更时,删除所有中间数据集,乱序生成当前所有原始文件的任务列表作为最终的任务列表,进入步骤s210。

s204当检查到所述类别标签文件没有变更时,反序列化读取所有进度记录文件,获取每个中间数据集中所有中间数据对应的原始文件信息;

s205乱序生成当前所有原始文件的任务列表;

s206比对从每个进度记录文件中读取到的相应的中间数据集中所有的中间数据对应的原始文件是否均存在于所述任务列表中;

s207将所有中间数据对应的原始文件均存在于所述任务列表中的中间数据集标记为第一中间数据集;将所有中间数据对应的原始文件未全部存在于所述任务列表中的中间数据集标记为第二中间数据集;

s208当所有中间数据集均是第一中间数据集时,选取一个中间数据集进行删除,并将剩余的中间数据集中的所有中间数据对应的原始文件在所述任务列表中进行任务删除;

s209当所有中间数据集中存在有第二中间数据集时,将所述第二中间数据集进行删除,并将第一中间数据集中的所有中间数据对应的原始文件在所述任务列表中进行任务删除;

s210获取最终的任务列表,并根据所述任务列表中的任务调用线程池中的线程生成对应的中间数据。

本实施例中,所述步骤s201中的进度记录文件为一个中间数据集中的所有中间数据对应的原始文件的md5值的序列化文件;

具体的,本实施例中对图2实施例做了进一步的优化,其中进度记录文件记录的是中间数据集中所有中间数据对应的原始文件的md5值的序列化文件,例如,中间数据集中有1000个中间数据,这1000个中间数据对应了1000张原始图片,进度记录文件记录了这1000张原始图片的md5值,根据中间数据对应的任务列表中需生成中间数据的原始文件任务对应的md5值,对应相应的原始文件将md5值由字符串转化成二进制流,从而序列化该md5值的列表;当在检查到类别标签文件没有变更时,反序列化读取所有进度记录文件,也就是采用二进制读取的方式来存储数据,加快了读取文件的速度,其次,在检查类别标签文件有变更时,也就是类别标签文件中的分类与编号发生变化的情况下,比如减少了一个分类,编号发生变化等情况下,这时同时将所有中间数据集进行删除操作。这时所有原始文件均需要重新生成中间文件。

较佳的,在上述任一实施例中,当所有中间数据集均是第一中间数据集时,选取一个中间数据集进行删除中采用的选取方式为随机选取或指定选取。例如随机删除一个中间数据集,有1000个原始图片生成的中间数据组成中间数据集,这个数据集里的中间数据对应的所有原始图片都在需要生成中间数据的任务列表里面,还有另外1000个原始图片生成的中间数据组成的数据集,这个数据集里面的中间数据对应的所有原始图片也都在需要生成中间数据的任务列表里面,那么说明这两个中间数据集中的中间数据对应的原始文件都在任务列表中,所以可以随机删除其中一个中间数据集,或者删除指定的中间数据集,比如删除第一个,亦或最后一个中间数据集。在中间数据集中的中间数据对应的原始图片全部在任务列表中时,说明没有文件删除或者修改,仅有相应的原始文件的增加,但是训练数据的过程中,需要数据是随机乱序的,所以在本发明中将其中一个中间数据集删除,这样将这个数据集中的中间数据对应的原始图片任务和新增的原始文件任务进行随机乱序处理,同时还要将另外的中间数据集中中间数据对应的原始图片任务在任务列表中进行删除,这样一来既达到了随机乱序,同时增量生成,不需全部重新生成中间数据,使得数据处理的速度也有所提升。

较佳的,在上述任一实施例中,根据所述任务列表中的任务调用线程池中的线程生成对应的中间数据,其中线程数量设置,主要是根据cpu的核数来设置,过少的线程数量设置会延迟相应的的数据处理,过多的线程数量设置,又会导致线程之间切换的开销变得很大,反而导致数据处理的速度变慢,基于线程的并发性,在每个cpu单元核中并行执行,所以例如现在cpu是4核,那么每个核中设置多个线程(每个线程对应监测1000个原始文件任务列表中的1000歌任务对象),设置好之后将其放入到线程池中,并发处理任务列表中要生成中间数据的原始文件任务,因为像达到tb级的数据处理的时候这种方式能够起到非常好的加速作用,本发明采用的是每个中间数据集存储1000个对象生成的中间数据,这个数量在官方的推荐是实际上比较合适的方案,所以每个线程调用1000个任务列表中的原始文件任务,并发执行,这就加速了数据的处理。

与原始的中间数据集的生成相比较。本文采用了线程池技术对生成过程进行加速,同时会根据机器的配置情况进行合适的加速比率调节,可以提升速率大约四倍以上不等。

本实施例以全新的方式设计了一种增量式的数据集生成方法,通过加入记录信息,在数据集的调整过程中无需对整个数据集进行重新生成,在动辄tb级的数据集的生成中起到了非常好的加速作用。

本发明提供的另一种实施例,首先简单介绍下各文件:

pkl文件,是一种文件信息记录文件,相当于上述实施例中的进度记录文件。他与tfrecord文件传对的匹配。tfrecord文件中记录了相应的原始数据集,比如图片数据源。pkl文件就记录了相应的这些数据原文件他们相应的md5值。

中间数据集(tfrecord)指tensorflow的中间数据保存文件,tfrecord文件(即中间数据集)。这种文件用作训练的,直接输入。由原始文件转化而来。

label文件(相当于上述实施例中的类别标签文件),众多的tfrecord文件会对应这样一个label文件。label文件记录了这些对应数据集所在表的分类,类别以及这些分类类别的序号。

本实施例的执行步骤如下:

第一步,加载pkl数据集已生成信息。加载label信息;

第二步,label变更检测,若label发生了变更,则删除所有tfrecord文件,进入第七步;若label未发生变更则进入第三步;

第三步,反序列化pkl信息文件(获得已生成信息);

第四步,加载全量全部--任务列表(需要转换为tfrecord的文件);

第五步,比对已完成部分文件。删除已完成任务;

第六步,文件集合仅增加情况下,扩大范围,随机乱序数据集列表;

第七步,线程池加速生成中间数据集。

具体的,第一步骤中,pkl文件(也就是上述实施例中对应的进度记录文件)对应了tfrecord文件(也就是上述实施例中对应的中间数据集)。pkl记录了这个数据集文件中所包含的图片的md5值列表。实际上记录了是进度的已完成信息。加载pkl文件,实际上就获得了tfrecord文件中他对于的原始图片文件是哪些这样的信息。

对于第二步,对加载后的label文件进行变更检测,label文件是所有分类名字,和分类对应编号的对应关系,加载之后如果发现label文件发生了变化,那么这时,训练集产生了巨大的变化,需要对整个训练集进行重新的生成。

对于第三步,pkl文件记录了tfrecord文件中,所有原始文件的md5值,是一个序列化列表。序列化和反序列化过程如下:(由于计算机运算环境就是ubuntux64pc环境,序列化过程不需要考虑相应的大端小端对齐问题)。序列化pkl文件:遍历tfrecord中任务文件md5值。直接将md5值由字符串转二进制流,直接定向为相应文件。(因为都是定长数据,所有不存在变长断句问题。)序列化一个md5值,写数据(0x00,0x00,0x00)作为新数据起点。反序列化:读入相应序列化文件,按照以上的规则进行相应的读取。由于全部采用的二进制读取和存储方式,速度非常可观。

对于第四步,在本步骤中就是传统的python运用,遍历文件目录列表,获取全部的文件任务(这些文件会被转换为相应的tfrecord文件)。

对于第五步,在本步中,实际上是对任务列表进行相应的调整,去除其中已经生成的文件,不需要进行重复生成。但是介于tensorflow对训练数据的要求,需要数充分的打乱。在任务列表生成时,任务列表进行了随机种子乱序处理。对于所有的tfrecord文件中,存在有所有原始图片均可在任务列表中找到的tfrecord,也有tfrecord文件中所有原始图片不全部存在于任务列表中(即上述实施例中,所有的中间数据集中存在第二中间数据集的情况);针对这两种tfrecord文件,采取了不同的措施:

tfrecord文件中所有原始图片文件全部在任务列表中存在,说明这些原始图片的中间数据已经被生成,这种原始图片任务可以从任务列表中进行剔除;

tfrecord文件中存在原始图片没有出现在任务列表中,说明不存在的这部分原始图片在原始文件中被删除,这种tfrecord文件需要重新生成,生成后由新文件替换原来原始文件位置。

第六步实际是对第五步的补充叙述。在tfrecord文件中的原始图片文件,全部都能出现在任务列表中(即上述实施例中所有中间数据集为第一中间数据集的情况),说明本次生成没有文件删除或者修改,仅有相应的问题生成。但是出于给到tensorflow的训练数据,需要是随机乱序的,这样来,仅有新填的数据可以用于乱序处理,这样一来就违背了,随机乱序处理的初衷,因为如果出现这种情况,本文叙述的方法,会删除最后一个tfrecord文件,并混合相应的原始文件和新增的任务列表文件,之后进行重新随机乱序。

对第七步,在前六步中,本实施例即可以得到相应的原始文件列表,这些原始文件列表是需要生成相应tfrecord文件的完整任务列表。生成tfrecord文件进行了如下的线程池加速手段:介于tensorflow官方推荐的tfrecord文件建议存储1000个对象实际上是比较合适的方案,本实施例基于此个特性,也采用了每个tfrecord文件存储1000个文件,对每1000个文件开一个线程,并将线程排入到线程池中待命,系统有资源自动调度,并发执行。关于系统调度并发,过少的线程数量设置会延迟相应的数据处理,过多的线程数量设置,到导致线程之间的切换开销变大,从而导致效率变慢。本文基于线程的并发特性,在执行过程中实际上是在每个cpu单元核中进行执行,因为最大线程数目设置了cpu核数为合适的线程。这样的操作获取了系统的最大多线程性能。

基于相同的技术构思,本发明还提供了一种增量时的数据集加速生成系统,具体的,本发明的一种增量式的数据集加速生成系统一实施例如图4所示,包括:

数据加载模块1,用于加载类别标签文件和所有进度记录文件,其中,所述类别标签文件含有训练用的文件的分类名称及对应的编号;所述进度记录文件与所述中间数据集对应,每个进度记录文件记载了一个中间数据集中的所有中间数据对应的原始文件的标志信息;

检查模块2,用于检查所述数据加载模块1中加载的所述类别标签文件是否有变更;

读取模块3,用于当所述检查模块2检查到所述类别标签文件没有变更时,读取所有进度记录文件,获取每个中间数据集中所有中间数据对应的原始文件信息;

列表生成模块4,用于乱序生成当前所有原始文件的任务列表;

任务删除模块11,用于根据所述任务列表以及所述进度记录文件,获取待删除的目标任务,并在所述任务列表中将所述目标任务进行删除;

列表获取模块8,用于获取最终的任务列表;

线程调用模块9,用于根据所述列表获取模块8获取的所述任务列表中的任务调用线程池中的线程生成对应的中间数据。

具体的,数据加载模块1加载类别标签和所有进度记录文件,类别标签中记录了训练用的文件的分类名称和对应的编号,例如训练用的文件有猫的图片,狗的图片,所以类别标签将猫的图片分为一类对应的编号设置为1,将狗的图片分为一类对应的编号设置为2,进度记录文件与中间数据集对应,每个进度记录文件记载一个中间数据集中的所有中间数据对应的原始文件的标志信息,一个中间数据集包含有由1000个原始文件生成的1000个中间数据(一个原始文件生成一个中间数据);记录文件用来记录对应的中间数据集中的1000个中间数据对应的原始文件的标志信息。

加载的进度记录文件是对应着中间数据集的,记录着中间数据集中间数据对应的原始文件的标志信息,可以为了后面对应中间数据在任务列表中能够比对原始文件任务提供了基础;另外加载的类别标签文件记录的是多个中间数据集在表中的分类类别以及分类类标的序号,这是为了后续如何对任务列表中的数据进行操作,提供了一定的前提条件,并乱序生成所有原始文件的任务列表是为在任务列表中能够匹配进度记录文件,看是否所有的原始文件任务都能匹配到,来判断接下对数据的处理;再对中间数据集进行标记,是为了能够判断在多种情况下,如何对中间数据集中的中间数据对应的原始文件任务作出处理。

接下来检查类别标签文件是否有变更,类别标签文件变更的情况有多种,其中包括分类与对应的编号发生了变化,以及增加了类别,或者减少了类别等。当检查到类别标签文件中的信息未发生变化时,读取所有的进度记录文件,可以获取到生成中间数据的对应的原始图片信息,紧接着生成当前所有原始文件的任务列表,就是说所有的准备生成中间数据的原始图片的任务列表。

继而通过上述生成中间数据的原始图片的任务列表以及与中间数据集对应且记载中间数据集中的所有中间数据对应的原始文件的标志信息的进度记录文件,获取到待删除的目标任务,在上述列表里将目标任务删除。

最后获得一个处理后的任务列表,并且设置任务列表中的任务调用的线程,通过调用的多个线程进行并发式处理,将任务列表中要生成中间数据的原始文件生成中间数据。

较佳的,其中进度记录文件记录的是中间数据集中所有中间数据对应的原始文件的md5值的序列化文件,例如,中间数据集中有1000个中间数据,这1000个中间数据对应了1000张原始图片,进度记录文件记录了这1000张原始图片的md5值,根据中间数据对应的任务列表中需生成中间数据的原始文件任务对应的md5值,对应相应的原始文件将md5值由字符串转化成二进制流,从而序列化该md5值的列表;当在检查到类别标签文件没有变更时,反序列化读取所有进度记录文件,也就是采用二进制读取的方式来存储数据,加快了读取文件的速度。

根据本发明提供的一种实施例,如图5所示,一种增量式的数据集加速生成系统,包括:

数据加载模块1,用于加载类别标签文件和所有进度记录文件,其中,所述类别标签文件含有训练用的文件的分类名称及对应的编号;所述进度记录文件与所述中间数据集对应,每个进度记录文件记载了一个中间数据集中的所有中间数据对应的原始文件的标志信息;

检查模块2,用于检查所述数据加载模块1中加载的所述类别标签文件是否有变更;

读取模块3,用于当所述检查模块2检查到所述类别标签文件没有变更时,读取所有进度记录文件,获取每个中间数据集中所有中间数据对应的原始文件信息;

列表生成模块4,用于乱序生成当前所有原始文件的任务列表;

任务删除模块11包括:

比对数据子模块5,用于比对从所述数据加载模块1加载的每个所述进度记录文件中读取到的相应的中间数据集中所有的中间数据对应的原始文件是否均存在于所述列表生成模块4生成的所述任务列表中;

数据标记子模块6,用于将所有中间数据对应的原始文件均存在于所述任务列表中的中间数据集标记为第一中间数据集;将所有中间数据对应的原始文件未全部存在于所述任务列表中的中间数据集标记为第二中间数据集;

数据操作子模块7,用于在当所有中间数据集均是所述数据标记模块6标记的所述第一中间数据集时,选取一个中间数据集进行删除,并将剩余的中间数据集中的所有中间数据对应的原始文件在所述任务列表中进行任务删除;

所述数据操作子模块,还用于当所述检查模块检测到所述类别标签文件有变更时,删除所有中间数据集。

当所有中间数据集中存在有所述数据标记模块6标记的所述第二中间数据集时,将所述第二中间数据集进行删除,并将第一中间数据集中的所有中间数据对应的原始文件在所述任务列表中进行任务删除;

列表获取模块8,用于获取最终的任务列表;

线程调用模块9,用于根据所述列表获取模块8获取的所述任务列表中的任务调用线程池中的线程生成对应的中间数据。

线程设置模块10,用于根据cpu的核数设置线程池并发线程的数量。

本实施例中,基于上述实施例进一步优化的,当所有的中间数据集都为标记的第一中间数据集时,那么就选取其中一个中间数据集及进行删除,另外删除其他的中间数据集中中间数据对应的原始文件任务,这样任务列表中已生成的中间就不需要重新生成;当所有的中间数据集存在标记的第二中间数据集时,那么将第二中间数据集删除,在删除第一中间数据集中中间数据对应的原始文件任务,所以不仅仅实现了不需要重新生成已生成中间数据的任务列表里面的任务,实现增量式生成中间数据,还有再重新生成的时候将其新增的任务与原来删除掉的中间数据集中中间数据对应的原始文件任务在进行乱序生成,达到了乱序处理的目的,而不仅仅是新增文件进行乱序处理,最后通过对线程的设置,并发处理任务列表中要生成中间数据的原始文件任务。

通过这个任务列表与所有进度记录文件中已生成中间数据的原始图片信息进行比对,看每个中间数据集中的所有中间数据对应的原始文件是否均在任务列表中存在,这个地方也会分两种情况,本实施例将所有中间数据对应的原始文件都存在于这个任务列表中的数据集标记为第一数据集,将中间数据对应的原始文件没有全部出现的任务列表中的中间数据集标记为第二数据集,例如从某进度记录文件中获取到其对应的中间数据集中所有的中间数据对应的原始图片都在任务列表中,那么该中间数据集被标记为第一数据集,再比如,进度记录文件中记录已生成中间数据对应的原始图片,如果有两个原始图片没有出现在任务列表中,那么就会被标记为第二数据集。

接下来对于当所有的中间数据集都是第一中间数据集的时候,就会选取其中的一个数据集进行删除,例如,四个数据集a、b、c、d中的所有中间数据对应的原始图片信息都存在于任务列表中,那么就删除其中一个中间数据集,比如删除中间数据集a,其中剩余的中间数据集b、c、d中的所有中间数据对应的原始文件任务就是目标任务,需要将b、c、d对应的原始图片任务在任务列表中进行删除。因为中间数据集b、c、d中已经有中间数据了,那么他们对应的原始文件就无需再重复生成了,如此可以加快原始文件的处理速度,避免重复生成浪费时间。而为何要选取一个中间数据集进行删除,由于如果所有的中间数据集都是第一中间数据集的话,那么就说明原始文件中没有文件删除或者修改,只是增加了新的原始图片(注意新增的原始图片属于现有的几个类别之中),出于训练时给出的训练数据--也就是中间数据是需要随机乱序的,而当已生成的所有中间数据集都是第一数据集的时候,如果不将其中一个中间数据集进行删除的话,那么便只有新增的原始图片可以用于乱序处理,这样一来就违背了乱序处理的初衷,因此,在这种情况下,需要删除其中一个中间数据集,这样被删除的这个中间数据集对应的所有原始图片就需要全部重新生成,这部分原始图片便会混合新增的原始图片在任务列表中,使得不仅是新增的原始图片进行了乱序处理,还混合了之前的原始图片,满足训练数据的乱序处理的初衷。

另外,当所有的中间数据集存在有第二中间数据集时,也就是中间数据对应的原始文件没有全部出现在任务列表中时候,将所述第二中间数据集进行删除,并将第一中间数据集中的所有中间数据对应的原始文件在所述任务列表中进行任务删除。例如现在有分别是a、b、c、d四个中间数据集,现在a、b、c这四个中间数据集中的中间数据对应的原始图片任务全部出现的任务列表中,只有中间数据集d中的中间数据对应的原始图片任务没有全部出现的任务列表中,该中间数据集d则为第二中间数据集,需要将中间数据集d进行删除,此时,中间数据集a、b、c三个中间数据对应的原始图片任务便是目标任务,需要在任务列表中删除,因此将中间数据集a、b、c中中间数据对应的原始图片任务在列表中删除,这三个中间数据集a、b、c中的中间数据对应的原始图片任务就不需要重新生成,减少重复的数据生成,加快了处理速度。

此外,根据所述任务列表中的任务调用线程池中的线程生成对应的中间数据,其中线程数量设置,主要是根据cpu的核数来设置,过少的线程数量设置会延迟相应的的数据处理,过多的线程数量设置,又会导致线程之间切换的开销变得很大,反而导致数据处理的速度变慢,基于线程的并发性,在每个cpu单元核中并行执行,所以例如现在cpu是4核,那么每个核中设置多个线程(每个线程对应监测1000个原始文件任务列表中的1000歌任务对象),设置好之后将其放入到线程池中,并发调用任务列表中要生成中间数据的原始文件任务,因为像达到tb级的数据处理的时候这种方式能够起到非常好的加速作用,本发明采用的是每个中间数据集存储1000个对象生成的中间数据,这个数量在官方的推荐是实际上比较合适的方案,所以每个线程调用1000个任务列表中的原始文件任务,并发处理,这就加速了数据的处理。

较佳的,在检查类别标签文件有变更时,也就是类别标签文件中的分类与编号发生变化的情况下,比如减少了一个分类,编号发生变化等情况下,这时通过数据操作子模块将所有中间数据集进行删除操作,这时所有原始文件均需要重新生成中间文件。

较佳的,在上述任一实施例中,当所有中间数据集均是第一中间数据集时,选取一个中间数据集进行删除中采用的选取方式为随机选取或指定选取。例如随机删除一个中间数据集,有1000个原始图片生成的中间数据组成中间数据集,这个数据集里的中间数据对应的所有原始图片都在需要生成中间数据的任务列表里面,还有另外1000个原始图片生成的中间数据组成的数据集,这个数据集里面的中间数据对应的所有原始图片也都在需要生成中间数据的任务列表里面,那么说明这两个中间数据集中的中间数据对应的原始文件都在任务列表中,所以可以随机删除其中一个中间数据集,或者删除指定的中间数据集,比如删除第一个,亦或最后一个中间数据集。在中间数据集中的中间数据对应的原始图片全部在任务列表中时,说明没有文件删除或者修改,仅有相应的原始文件的增加,但是训练数据的过程中,需要数据是随机乱序的,所以在本发明中将其中一个中间数据集删除,这样将这个数据集中的中间数据对应的原始图片任务和新增的原始文件任务进行随机乱序处理,同时还要将另外的中间数据集中中间数据对应的原始图片任务在任务列表中进行删除,这样一来既达到了随机乱序,同时增量生成,不需全部重新生成中间数据,使得数据处理的速度也有所提升。

应当说明的是,上述实施例均可根据需要自由组合。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1