一种SRFlow超分辨率模型的训练方法及人脸识别方法
技术领域
本发明涉及人脸识别技术,尤其是一种SRFlow超分辨率模型的训练方法及人脸识别方法。
背景技术
人脸识别作为一项比较成熟的技术,目前已经广泛应用在了人们生活的各个领域,如智能门锁、智能门禁、视频监控以及用于手机解锁等领域,目前人脸识别算法开源的有ArcFace、SubCenter-ArcFace、sphereface,上述算法在图像清晰时,均能达到较好的识别率,但在小人脸识别时,由于小人脸图像清晰度低,导致人脸识别的准确率也很低。
近日,来自苏黎世联邦理工学院计算机视觉实验室的研究者提出了一种超分辨率模型SRFlow,其标准流程架构图可以参考图1所示。该模型可以基于模糊的人脸图像生成高清的人脸图像,这样便有利于人脸识别模型进行识别,关于该模型的详细介绍可以参考苏黎世联邦理工学院计算机视觉实验室收录在ECCV2020里的论文,论文题目《SRFlow:Learning the Super-Resolution Space with Normalizing Flow》,该论文详细介绍了SRFlow超分辨率模型的功能特点、使用效果以及训练方法,并公布了相应的源代码。
超分任务本质上就是一个通过添加高频特征来对低分辨率的x的分辨率进行放大预测,生成一个更高分辨率的y的过程。大多数的方法都是通过生成映射的方法x->y,而SRFlow则想通过捕获一个完全条件分布(py|x(y|x),θ)。SRFlow超分辨率模型具备比GAN更强的脑补能力,与基于GAN的方法相比,SRFlow实现了明显更好的PSNR、LPIPS和LR-PSNR结果,并在PIQUE和BRISQUE方面也得到了出色的结果,因此将SRFlow超分辨率模型与人脸识别模型相结合,为解决小人脸识别提供了一种新思路。
鉴于此提出本发明。
发明内容
本发明的一个目的在于克服现有技术的不足,提供一种SRFlow超分辨率模型的训练方法。
本发明的第二目的在于提供一种利用上述训练后的SRFlow超分辨率模型的人脸识别算法。
为了实现第一发明目的,本发明采用如下技术方案:
一种SRFlow超分辨率模型的训练方法,包括以下步骤:
步骤一、建立原始高清人脸图像库;
步骤二、从原始高清人脸图像库中提取若干原始高清人脸图像,作为第一高清人脸图像,并将第一高清人脸图像输入人脸识别模型,以获得第一人脸特征值;
步骤三、将第一高清人脸图像进行模糊处理,得到低分辨率人脸图像;
步骤四、将低分辨率人脸图像输入SRFlow超分辨率模型,得到第二高清人脸图像;
步骤五、将第二高清人脸图像输入人脸识别模型,以获得第二人脸特征值;
步骤六、至少将第一人脸特征值与第二人脸特征值进行对比,并将对比结果添加到SRFlow超分辨率模型的负对数似然损失函数中,然后利用修改后的损失函数训练SRFlow超分辨率模型;
步骤七、重复执行上述步骤二至步骤六,直至训练结果收敛后完成训练。
进一步,所述步骤六中,在对比第一人脸特征值与第二人脸特征值时,
还将所述第二高清人脸图像在人脸识别模型不同神经网络层输出的中间特征值与所述第一高清人脸图像在对应层输出的中间特征值进行对比,并将中间特征值的对比结果和人脸特征值的对比结果按照一定权重进行求和后,作为最终对比结果。
进一步,所述权重的设置方法为,对人脸特征值的对比结果设置较大的权重,对中间特征值的对比结果设置较小的权重,且对于多个中间特征值的对比结果,大致按照先生成的中间特征值的对比结果设置较小权重,后生成的中间特征值的对比结果设置较大权重。
进一步,所述步骤六中的对比方法为,对需要对比的数据计算欧氏距离,所述欧氏距离的计算公式为:
进一步,所述步骤六还包括,在进行欧式距离计算前,先对数据进行归一化处理。
进一步,所述步骤三中的模糊处理包括先对第一高清人脸图像进行双立方插值下采样处理,然后在处理后的图像上添加高斯噪声,以获得低分辨率人脸图像。
进一步,所述步骤二中的获取第一人脸特征值也可以在步骤三、步骤四或步骤五后执行或者同步执行。
进一步,在训练过程中,所述人脸识别模型的参数保持不变。
为了实现第二发明目的,本发明采用如下技术方案:
一种人脸识别方法,利用了训练后的SRFlow超分辨率模型,该识别方法包括以下步骤:
步骤一、获取需要识别的人脸图像;
步骤二、判断人脸图像是否清晰,若图像清晰则执行步骤四,若图像不清晰则执行步骤三;
步骤三、提取不清晰的人脸图像,并调用SRFlow超分辨率模型,将不清晰的人脸图像数据传给SRFlow超分辨率模型,以生成清晰的人脸图像;
步骤四、调用人脸识别模型,并将清晰的人脸图像输入人脸识别模型进行人脸识别。
进一步,所述步骤二中判断人脸图像是否清晰的方法为:先将人脸图像中的人脸区域抠取出来,然后计算抠取出来的图像的像素大小,当其像素数大于设定值时,则判断所述人脸图像为清晰,当其像素数小于设定值时,则判断所述人脸图像为不清晰。
采用本发明所述的技术方案后,带来以下有益效果:
1、本发明借助SRFlow超分辨率模型完全可逆的特性,在训练稳定性上超过对抗神经网络算法,使SRFlow超分辨率模型与人脸识别模型结合成为可能,本发明将该算法优势转换为实际应用,解决了低分辨率人脸,尤其是小人脸识别率低的问题。
2、本发明在运算速度上,SRFlow算法超过对抗神经网络算法,基本不增加人脸识别算法的运算能力需求,在不增加用户硬件成本的情况下完成技术升级,增加人脸识别有效距离,降低了对摄像头像素的要求,有利于降低硬件成本。
3、本发明通过将人脸识别模型与SRFlow超分辨率模型联合训练的方式进一步提升SRFlow超分辨率模型在人脸一致性上的表现,拓宽了SRFlow超分辨率模型的应用范围。
附图说明
图1:SRFlow超分辨率模型的标准流程架构图;
图2:本发明的SRFlow超分辨率模型的训练流程图;
图3:本发明的人脸识别方法的流程图。
具体实施方式
下面结合附图对本发明的具体实施方式作进一步详细的描述。
如图1所示,本发明介绍了一种SRFlow超分辨率模型的训练方法,该训练方法主要利用了人脸识别算法和苏黎世联邦理工学院计算机视觉实验室提出的SRFlow算法。其中人脸识别算法比较成熟,可以直接使用开源的ArcFace算法,而SRFlow算法可以参考ECCV2020里收录的论文,在该论文中,详细记载了SRFlow算法的使用方法,本发明为将SRFlow算法应用在使用SRFlow算法时进行了改进,下文中将做详细描述。
本发明的一种SRFlow超分辨率模型的训练方法包括以下步骤:
步骤一、建立原始高清人脸图像库。由格灵深瞳开源的Glint360K数据集,包含36万类别,1800万张人脸照片,是目前世界上开源规模最大、清洗最干净的人脸数据集,我们从数据集中随机选择2万类别筛选其中人脸分辨率高于200×200的图片保存下来作为高分辨率图像。其中高分辨率图像随机选择1.5万类别作为训练集,剩余的5千类别作为验证集。
步骤二、从原始高清人脸图像库中提取若干原始高清人脸图像,作为第一高清人脸图像,并将第一高清人脸图像输入人脸识别模型,以获得第一人脸特征值。人脸特征值是一个二进制的byte数组,包含了人脸的关键信息,本实施例中选用ArcFace人脸识别算法构成的人脸识别模型,ArcFace为开源算法,可以直接调用运行(代码地址https://github.com/deepinsight/insightface)。
步骤三、将第一高清人脸图像进行模糊处理,得到低分辨率人脸图像。图像模糊处理的方法很多,本实施例中的模糊处理包括:先对第一高清人脸图像进行双立方插值(Bicubic Interpolation)下采样处理,得到更符合实际应用场景的低质图像,高清人脸图像经过该步处理后像素数减少,优选的,处理后的图像像素数为30×30,然后在处理后的图像上添加随机的高斯噪声以增加训练结果的稳定性。
步骤四、将低分辨率人脸图像输入SRFlow超分辨率模型,得到第二高清人脸图像,SRFlow超分辨率模型的运行方法可以直接从《SRFlow:Learning the Super-ResolutionSpace withNormalizingFlow》论文中获得,其源代码已经公开,因此本发明可以利用其源代码。目前常规超分辨率模型是通过生成缺失的高频细节,来预测给定低分辨率图像x的更高分辨率版本y。大多数当前方法学习确定性映射x→y,而SRFlow算法旨在获取与LR图像x对应的自然HR图像y的全条件分布py|x(y|x,θ)。
步骤五、将第二高清人脸图像输入人脸识别模型,以获得第二人脸特征值。
步骤六、至少将第一人脸特征值与第二人脸特征值进行对比,然后将对比结果添加至SRFlow超分辨率模型的负对数似然损失函数中,并利用修改后的损失函数对SRFlow超分辨率模型进行训练。
步骤七、重复执行上述步骤二至步骤六,直至训练结果收敛后完成训练。具体地,本实施例使用RAdam作为优化器,起始学习率为5×10-5,batch size设置为1024,在训练的时候,所述人脸识别模型的参数保持不变,此部分只做前向推理,不做反向推理。迭代训练200千次,分别在训练进程60%、80%的时候分别减小学习率为一半。参数更新可参考神经网络训练通用的反向传播链式求导法则。
优选地,在步骤六中,对比第一人脸特征值与第二人脸特征值时,还考虑人脸识别模型不同神经网络层生成的中间特征值(所述中间特征值是在人脸识别模型提取人脸特征值时,由不同神经网络层计算生成的数据,其中包含有大量人脸特征细节)。当对比第一人脸特征值与第二人脸特征值时,还将所述第二高清人脸图像在人脸识别模型不同神经网络层输出的中间特征值与所述第一高清人脸图像在对应层输出的中间特征值进行对比,并将中间特征值的对比结果和人脸特征值的对比结果按照一定权重进行求和后,作为最终对比结果,然后把最终对比结果添加至SRFlow超分辨率模型的负对数似然损失函数中,这样可以优化SRFlow超分辨率模型的生成稳定性,上述对比方法参考了感知损失函数的感念,在本实施例中,去除了风格学习分支,但是依然将第二高清人脸图像在不同层的中间特征值输出与第一高清人脸图像在对应层的中间特征值输出计算欧式距离后累加到损失中。
更优选地,所述权重的设置方法为:对人脸特征值的对比结果设置较大的权重,对中间特征值的对比结果设置较小的权重,且对于多个中间特征值的对比结果,大致按照先生成的中间特征值的对比结果设置较小权重,后生成的中间特征值的对比结果设置较大权重。在其中一种实施方式中,在获取第一人脸特征值时,对最上层神经网络层生成的中间特征值的对比结果可以设置0.01权重,越往下设置权重值越大,但所有中间特征值的对比结果权重值不超过0.2,人脸特征值的对比结果权重设置为0.8,这样所有权重值之和为1。
所述步骤六中的对比方法为,对需要对比的数据计算欧氏距离,其中计算欧氏距离所用到的公式为:
修改后的损失函数为:
优选地,所述步骤六还包括,在进行欧式距离计算前,先对数据进行归一化处理。
在其他实施例中,所述步骤二中的获取第一人脸特征值也可以在步骤三、步骤四或步骤五后执行或者同步执行。
如图2所示,本发明还涉及一种人脸识别方法,主要利用了上述训练后的SRFlow超分辨率模型,该识别方法包括以下步骤:
步骤一、获取需要识别的人脸图像,如可以通过摄像头抓拍人脸图像;
步骤二、判断人脸图像是否清晰,若图像清晰则执行步骤四,若图像不清晰则执行步骤三;具体地,判断人脸图像是否清晰的方法为:先将人脸图像中的人脸区域抠取出来,然后计算抠取出来的图像的像素大小,当其像素数大于设定值时,如像素数大于200×200,则判断所述人脸图像为清晰,当其像素数小于设定值时,则判断所述人脸图像为不清晰。
步骤三、提取不清晰的人脸图像,并调用SRFlow超分辨率模型,将不清晰的人脸图像数据传给SRFlow超分辨率模型,以生成清晰的人脸图像;
步骤四、调用人脸识别模型,并将清晰的人脸图像输入人脸识别模型进行人脸识别。
本发明通过将人脸识别和超分辨率模型完美融合的方式,解决小人脸识别率下降严重的问题,对实际应用场景中提升人脸识别有效距离有重要意义。
以上所述为本发明的实施方式,应当指出,对于本领域的普通技术人员而言,在不脱离本发明原理前提下,还可以做出多种变形和改进,这也应该视为本发明的保护范围。