本发明属于人工智能、图像生成和情感计算领域,具体涉及一种基于流模型的人脸情绪生成方法及设备。
背景技术:
相比于情绪识别而言,目前关于人脸识别的技术相对成熟,也能取得更高的识别准确率,情绪识别有基于机器学习的方法,基于深度学习的方法,但是准确率不够高。研究人脸情绪图片生成技术可以为情绪识别提供指导,值得更进一步研究。
生成模型的本质是通过构造分布来拟合现实数据的分布,实现的思路也不尽相同,有些是利用对抗博弈的思想;有些则是通过建立隐变量空间的思想;有些则利用了自回归的思想;而有些直接对分布函数进行求解。
现有的对抗生成网络将真实图片数据集看成是分布pdata(x),其中x可以理解为某张图片所表示的向量,目标是生成的图片依然满足这样的分布。它们的优点在于能生成比较清晰的图像,但是却有模型不可控、收敛缓慢、训练易崩溃等问题。
现有的变分自编码器(variationalautoencoder)是对将自编码器(autoencoder)扩展的生成模型。它只能推断真实分布的近似值,即变分下界,而隐变量和真实分布之间的分布难以界定,导致训练出来的图片不能达到足够的清晰度。
现有的像素循环神经网络pixelrnn和像素卷积神经网络pixelcnn是全可见信念网络,属于自回归模型。它们利用精确似然的思想,一个像素点一个像素点的生成,同时前面的像素点也作为参考。这相当于将一张图上所有的像素点联合分布转化为对条件分布的预测。它们的优点在于:利用链式法则可以提供精确似然,这使得生成的图像会锐利清晰;目标函数为极大似然,训练要相对稳定;它所能表达的数据空间可以是连续的也可以是离散的。它们的缺点也非常明显:无论是训练速度还是生成速度都过慢;生成的图像整体质量不是很好。
因此,现有的人脸情绪图像生成技术存在的问题在于,现有技术生成的人脸情绪图像清晰度和整体质量不够高,生成图像的效率和速度较低。
技术实现要素:
本发明为解决上述问题,提出了一种基于流模型的人脸情绪图像的生成方法及设备。通过多尺度结构的优化,寻找更多合理的可逆线性变换函数、在可逆线性变换函数的深层神经网络结构中引入更多的模型或机制来提升表达力和收敛速度。由于基于流的生成模型拟合的是连续分布,所以生成的图像效果会更加平滑自然,
根据本发明的一个方面,提供一种基于流模型的人脸情绪图像的生成方法,所述方法包括:
步骤1,对人脸情绪图像数据集进行扩充与整合,使用级联分类器对人脸尺度进行归一化,将脸情绪图像调整为统一的图像大小;
步骤2,构建基于流的生成模型,包括:对输入的图像进行l次迭代,对于每次迭代,使用svd(奇异值分解)对输入的图像进行压缩,将压缩后的图像数据转置处理后,和已经one-hot编码(一位有效编码)之后的先验条件h送入k个可逆的线性流中,将经过k个可逆的线性流处理的数据沿着通道维度切分为两个部分,其中一部分进行下一次迭代,另一部分则直接构成最终输出隐变量z的一部分;其中k个可逆的线性流中的每个线性流由1*1的可逆卷积和线性变换构成;
步骤3,从高斯分布的噪声中随机采样,并加入经过了one-hot(一位有效编码)作为的先验条件h,逆向输入到训练完成的模型中,生成指定标签的人脸情绪图像。
根据本发明的另一个方面,提供一种基于流模型的人脸情绪图像的生成设备,所述设备包括:
图像预处理模块,用于对人脸情绪图像数据集进行扩充与整合,使用级联分类器对人脸尺度进行归一化,将脸情绪图像调整为统一的图像大小;
基于流的生成模型模块,用于对输入的图像进行l次迭代,对于每次迭代,使用svd(奇异值分解)对输入的图像进行压缩,将压缩后的图像数据转置处理后,和已经one-hot编码(一位有效编码)之后的先验条件h送入k个可逆的线性流中,将经过k个可逆的线性流处理的数据沿着通道维度切分为两个部分,其中一部分进行下一次迭代,另一部分则直接构成最终输出隐变量z的一部分;其中k个可逆的线性流中的每个线性流由1*1的可逆卷积和线性变换构成;
人脸情绪图像生成模块,从高斯分布的噪声中随机采样,并加入经过了one-hot编码作为的先验条件h,逆向输入到训练完成的模型中,生成指定标签的人脸情绪图像。
本发明的有益效果在于,提出了一种基于流模型的人脸情绪图像的生成方法及设备,使用可逆生成模型,不仅可以实现准确的潜在变量推理,还可以优化数据的对数似然,提高图像生成质量;使用基于流的生成模型有效地进行推理与合成的并行化,提高并行硬件处理效率,提高图像生成速度;能进行数据点之间的插值,对现有数据点进行有意义的修改等操作;计算梯度需要的内存是固定的,不会随着深度的增加而增加,节省内存空间。
附图说明
图1是本发明实施例提供的一种基于流模型的人脸情绪图像的生成方法流程图;
图2是本发明实施例提供的多尺度结构的条件线性流模型流程图;
图3是本发明实施例提供的一种基于流模型的人脸情绪图像的生成设备示意图;
图4是本发明实施例提供的基于流模型的人脸情绪图像的生成方法的训练结果图。
具体实施方式
下面对本发明具体的实施方式进行阐述,来进一步说明本发明的出发点以及相应的技术方案。
图1是本发明实施例提供的一种基于流模型的人脸情绪图像的生成方法流程图,所述方法包括以下步骤:
步骤1,对人脸情绪图像数据集进行扩充与整合,使用级联分类器对人脸尺度进行归一化,将脸情绪图像调整为统一的图像大小。
训练结果的好坏除了模型的设计之外,数据集的构成也十分重要。因此,在构建模型之前,需要对现有的情绪数据集进行二次整理并进行预处理,将图片数据转化为深层神经网络可以处理的数据。具体为收集人脸情绪的数据集,其中包括jaffe、fer2013、mmi2、ck 等,由于各个数据集的大小和尺寸不尽相同,所以要对合并的数据集做整理:首先,使用opencv的haarcascade级联分类器对人脸尺度进行归一化,然后将其统一调整为统一的图像大小。其中opencv是一个基于bsd(berklysoftwaredistribution)许可(开源)发行的跨平台计算机视觉和机器学习软件库。haarcascade级联分类器为opencv提供的尺度不变分类器。
优选的步骤1,对人脸情绪图像数据集进行扩充与整合,使用级联分类器对人脸尺度进行归一化,将脸情绪图像调整为统一的图像大小,具体包括:
步骤101,将人脸情绪图像合并到同一个目录,利用opencv中haarcascade级联分类器对人脸尺度进行对齐、归一化;其中所述分类器的参数设置为参数scalefactor=1.1,参数minneighbors=1,其中scalefactor表示表示在前后两次相继的扫描中搜索窗口的比例系数;minneighbors表示构成检测目标的相邻矩形的最小个数;
步骤102,将处理后的人脸情绪图像转化为适用tensorflow训练的tfrecord文件格式,按照宽度、高度和通道数统一转化。由于样例数据集中人脸情绪是黑白的,于是统一转化(48*48*1),其分别对应为(宽度、高度、通道数),并将图片以7:3的比例随机划分为训练集和测试集。
步骤2,构建基于流的生成模型,包括:对输入的图像进行l次迭代,对于每次迭代,使用svd(奇异值分解)对输入的图像进行压缩,将压缩后的图像数据转置处理后,和已经one-hot编码(一位有效编码)之后的先验条件h送入k个可逆的线性流中,将经过k个可逆的线性流处理的数据沿着通道维度切分为两个部分,其中一部分进行下一次迭代,另一部分则直接构成最终输出隐变量z的一部分;其中k个可逆的线性流中的每个线性流由1*1的可逆卷积和线性变换构成。
图2是本发明实施例提供的多尺度结构的条件线性流模型流程图,输入数据x进入以下l次迭代:首先将其重构长宽分别为原来的一半,通过svd降维,奇异值分别为之前的(100、60%、30%、10%),将其转置并和已经one-hot编码之后的先验标签向量送入k个线性流中,其中每个线性流由1*1的可逆卷积和线性变换构成,其中1*1卷积是为了保证输入的维度之间能相互影响。条件线性变换具体如下:
其中,yk为第k组的线性变换的输出,xk-1和xk分别为第k-1组和第k组的线性变换的输入,s()和μ()分别为映射函数,其中的参数分别用sk和μk表示,h为先验条件。
接着沿着通道维度切分为两个部分,其中一部分继续进行迭代,另一部分则直接构成最终输出隐变量z的一部分。
在模型的训练中,使用自适应矩估计adam优化器,学习率设置为0.005,参数选择默认值,对于图片过大的情况,可以对1*1的卷积引入l2规范化。
图2中x为输入的多维图像数据,x1和x2表示x经过奇异值分解处理后的分组数据,通过gk训练出的参数作为x到y的映射函数的参数,split表示数据沿着通道维度进行切分。gk()被实现为三层卷积神经网络,参数用gk表示,k为0或1,具体而言,前两个卷积层的通道数为c,一般与数据的通道数一致,使用线性整流函数(relu)作为激活函数,卷积核大小分别为3*3和1*1,在实际中,每个尺度水平的网络层数h设置为32。
步骤3,从高斯分布的噪声中随机采样,并加入经过了one-hot(一位有效编码)作为的先验条件h,逆向输入到训练完成的模型中,生成指定标签的人脸情绪图像。
在逆向计算过程中,同样地,将前一步变换的输出xk-1作为输入,经过线性变换后即可生成指定标签的人脸情绪图像,该过程可以表示为:
其中yk为第k组的线性变换的输出,xk-1和xk分别为第k-1组和第k组的线性变换的输入,s()和μ()分别为映射函数,h为先验条件。
图3是本发明实施例提供的一种基于流模型的人脸情绪图像的生成设备,包括以下模块:
图像预处理模块310,用于对人脸情绪图像数据集进行扩充与整合,使用级联分类器对人脸尺度进行归一化,将脸情绪图像调整为统一的图像大小;
基于流的生成模型模块320,用于对输入的图像进行l次迭代,对于每次迭代,使用svd(奇异值分解)对输入的图像进行压缩,将压缩后的图像数据转置处理后,和已经one-hot编码(一位有效编码)之后的先验条件h送入k个可逆的线性流中,将经过k个可逆的线性流处理的数据沿着通道维度切分为两个部分,其中一部分进行下一次迭代,另一部分则直接构成最终输出隐变量z的一部分;其中k个可逆的线性流中的每个线性流由1*1的可逆卷积和线性变换构成;
人脸情绪图像生成模块330,用于向基于流的生成模型模块320,从高斯分布的噪声中随机采样,并加入经过了one-hot(一位有效编码)作为的先验条件h,逆向输入到训练完成的模型中,生成指定标签的人脸情绪图像。
优选的,所述图像预处理模块310具体用于:
步骤a,将人脸情绪图像合并到同一个目录,利用opencv中haarcascade级联分类器对人脸尺度进行对齐、归一化;其中所述分类器的参数设置为参数scalefactor=1.1,参数minneighbors=1,其中scalefactor表示表示在前后两次相继的扫描中搜索窗口的比例系数;minneighbors表示构成检测目标的相邻矩形的最小个数;
步骤b,将处理后的人脸情绪图像转化为适用tensorflow训练的tfrecord文件格式,按照宽度、高度和通道数统一转化。
优选的,基于流的生成模型模块320中所述的k个可逆的线性流中的每个线性流由1*1的可逆卷积和线性变换构成,所述线性变换为条件线性变化,所述线性变换的输出为:
其中yk为第k组的线性变换的输出,xk-1和xk分别为第k-1组和第k组的线性变换的输入,s()和μ()分别为映射函数,h为先验条件。
优选地,基于流的生成模型模块320中所述的k个可逆的线性流中的每个线性流由1*1的可逆卷积和线性变换构成,所述线性变换使用三层卷积神经网络,前两个卷积层的通道数为c,一般与数据的通道数一致,使用线性整流函数(relu)作为激活函数,卷积核大小分别为3*3和1*1,每个尺度水平的网络层数h设置为32。
优选的,基于流的生成模型模块320还包括优化器模块,所述优化器模块使用自适应矩估计adam优化器对基于流的生成模型进行训练优化,设置学习率为0.005,参数选择默认值,对于图片过大的情况,对1*1的卷积引入l2规范化。
图4是本发明实施例提供的基于流模型的人脸情绪图像的生成方法的训练结果图。本发明针对训练的数据集为经典样例数据集(fer2013、mmi2、jaffe、ck )提供的七类带标签的人脸情绪,总共18555张图片进行训练,其中愤怒anger情绪为2334张、厌恶disgust情绪为510张、害怕fear情绪为2135张、开心happy情绪为4751张、平和neutral情绪为3660张、伤心sadness情绪为2556张、惊讶surprise情绪为2609张,得出的模型基本实现输入为随机高斯分布的噪声以及先验one-hot一位有效编码,生成指定的人脸情绪图像,其中人脸随机,该数据集构成了已知分布。
在ck 和jaffe数据集上的训练结果如图4所示,epoch表示所有的数据送入网络中完成一次前向计算及反向传播的过程。在epoch=999时即出现一定的效果,反映出本发明的技术方案能够清晰且快速的生成指定人脸情绪图像。
以上的所述乃是本发明的具体实施例及所运用的技术原理,若依本发明的构想所作的改变,其所产生的功能作用仍未超出说明书及附图所涵盖的精神时,仍应属本发明的保护范围。
1.一种基于流模型的人脸情绪图像的生成方法,其特征在于,包括以下步骤:
步骤1,对人脸情绪图像数据集进行扩充与整合,使用级联分类器对人脸尺度进行归一化,将脸情绪图像调整为统一的图像大小;
步骤2,构建基于流的生成模型,包括:对输入的图像进行l次迭代,对于每次迭代,使用svd(奇异值分解)对输入的图像进行压缩,将压缩后的图像数据转置处理后,和已经one-hot编码(一位有效编码)之后的先验条件h送入k个可逆的线性流中,将经过k个可逆的线性流处理的数据沿着通道维度切分为两个部分,其中一部分进行下一次迭代,另一部分则直接构成最终输出隐变量z的一部分;其中k个可逆的线性流中的每个线性流由1*1的可逆卷积和线性变换构成;
步骤3,从高斯分布的噪声中随机采样,并加入经过了one-hot编码作为的先验条件h,逆向输入到训练完成的模型中,即可生成指定标签的人脸情绪图像。
2.根据权利要求1所述的方法,其特征在于,步骤1具体包括:
步骤101,将人脸情绪图像合并到同一个目录,利用opencv中haarcascade级联分类器对人脸尺度进行对齐、归一化;其中所述分类器的参数设置为参数scalefactor=1.1,参数minneighbors=1,其中scalefactor表示表示在前后两次相继的扫描中搜索窗口的比例系数;minneighbors表示构成检测目标的相邻矩形的最小个数;
步骤102,将处理后的人脸情绪图像转化为适用tensorflow训练的tfrecord文件格式,按照宽度、高度和通道数统一转化。
3.根据权利要求1所述的方法,其特征在于,步骤2中所述的k个可逆的线性流中的每个线性流由1*1的可逆卷积和线性变换构成,所述线性变换为条件线性变化,所述线性变换的输出为:
其中,yk为第k组的线性变换的输出,xk-1和xk分别为第k-1组和第k组的线性变换的输入,s()和μ()分别为映射函数,h为先验条件。
4.根据权利要求1所述的方法,其特征在于,步骤2中所述的k个可逆的线性流中的每个线性流由1*1的可逆卷积和线性变换构成,所述线性变换使用三层卷积神经网络,前两个卷积层的通道数为c,一般与数据的通道数一致,使用线性整流函数(relu)作为激活函数,卷积核大小分别为3*3和1*1,每个尺度水平的网络层数h设置为32。
5.根据权利要求1所述的方法,其特征在于,步骤2所述的构建基于流的生成模型还包括以下步骤:
使用自适应矩估计adam优化器对基于流的生成模型进行训练优化,设置学习率为0.005,参数选择默认值,对于图片过大的情况,对1*1的卷积引入l2规范化。
6.一种基于流模型的人脸情绪图像的生成设备,其特征在于,包括以下模块:
图像预处理模块,用于对人脸情绪图像数据集进行扩充与整合,使用级联分类器对人脸尺度进行归一化,将脸情绪图像调整为统一的图像大小;
基于流的生成模型模块,用于对输入的图像进行l次迭代,对于每次迭代,使用svd(奇异值分解)对输入的图像进行压缩,将压缩后的图像数据转置处理后,和已经one-hot编码(一位有效编码)之后的先验条件h送入k个可逆的线性流中,将经过k个可逆的线性流处理的数据沿着通道维度切分为两个部分,其中一部分进行下一次迭代,另一部分则直接构成最终输出隐变量z的一部分;其中k个可逆的线性流中的每个线性流由1*1的可逆卷积和线性变换构成;
人脸情绪图像生成模块,从高斯分布的噪声中随机采样,并加入经过了one-hot编码作为的先验条件h,逆向输入到训练完成的模型中,生成指定标签的人脸情绪图像。
7.根据权利要求6所述的设备,其特征在于,所述图像预处理模块具体用于:
步骤a,将人脸情绪图像合并到同一个目录,利用opencv中haarcascade级联分类器对人脸尺度进行对齐、归一化;其中所述分类器的参数设置为参数scalefactor=1.1,参数minneighbors=1,其中scalefactor表示表示在前后两次相继的扫描中搜索窗口的比例系数;minneighbors表示构成检测目标的相邻矩形的最小个数;
步骤b,将处理后的人脸情绪图像转化为适用tensorflow训练的tfrecord文件格式,按照宽度、高度和通道数统一转化。
8.根据权利要求6所述的设备,其特征在于,基于流的生成模型模块中所述的k个可逆的线性流中的每个线性流由1*1的可逆卷积和线性变换构成,所述线性变换为条件线性变化,所述线性变换的输出为:
其中,yk为第k组的线性变换的输出,xk-1和xk分别为第k-1组和第k组的线性变换的输入,s()和μ()分别为映射函数,h为先验条件。
9.根据权利要求6所述的设备,其特征在于,基于流的生成模型模块中所述的k个可逆的线性流中的每个线性流由1*1的可逆卷积和线性变换构成,所述线性变换使用三层卷积神经网络,前两个卷积层的通道数为c,一般与数据的通道数一致,使用线性整流函数(relu)作为激活函数,卷积核大小分别为3*3和1*1,每个尺度水平的网络层数h设置为32。
10.根据权利要求6所述的设备,其特征在于,基于流的生成模型模块还包括优化器模块,所述优化器模块使用自适应矩估计adam优化器对基于流的生成模型进行训练优化,设置学习率为0.005,参数选择默认值,对于图片过大的情况,对1*1的卷积引入l2规范化。
技术总结