一种表情识别方法及系统

    专利查询2022-07-07  195



    1.本发明属于生物特征识别技术领域,具体涉及一种表情识别方法及系统。


    背景技术:

    2.人脸表情识别是通过对输入的人脸图片进行分析,判断当前输入的人脸图片属于哪一类表情。常见的表情识别方法通常是对七类基本表情进行分类,包括:开心、惊讶、中性、恐惧、厌恶、愤怒和伤心。
    3.现有的表情识别方法大多数使用深度学习的卷积神经网络来提取人脸表情特征并且进行分类。目前方法共同存在的明显缺陷是负面表情的准确率明显低于正面表情的准确率。所谓正面表情即带有正面情绪的表情,包含开心和惊讶,负面表情即带有负面情绪的表情,包含恐惧、厌恶、愤怒、伤心。
    4.造成负面表情效果差的原因有如下两点:
    5.(1)负面表情样本相对较少。几乎所有表情数据集都存在该问题,负面表情的样本量小于正面表情样本量,尤其对于大型数据集,正负面表情样本量相差非常悬殊。该原因导致神经网络在有限的负面表情上,无法学习具有强鲁棒性的特征,最终导致测试过程中神经网络对负面表情不能进行准确判断。
    6.(2)负面表情之间的脸部特征相似。表情的变化是由面部多个局部位置的运动组成,而负面表情对应的局部运动存在重叠,例如愤怒和厌恶都包含皱眉的动作。相似的脸部运动即相似的特征导致神经网络无法准确判断当前特征属于哪一类表情。
    7.在现实中,人在带有负面情绪时,更容易做出过激和冲动的行为。在现实应用中,假设驾驶员的情绪监测或者病患状态的监测,在这些应用中均是在被观测者出现负面表情时需要他人进行干预,故准确识别负面表情尤为重要。
    8.经过检索,申请公开号cn107358169a,一种人脸表情识别方法及人脸表情识别装置,包括:构建并训练基于卷积神经网络的情绪识别模型;将待识别的人脸图像输入所述情绪识别模型,以输出所述人脸图像的情绪类别,所述情绪类别包括正面情绪、负面情绪以及中立情绪中的一种;获取与所情绪类别对应的表情识别模型;将人脸图像输入所述表情识别模型,以输出所述人脸图像的表情类别。本发明通过分层次的方式来对人脸的表情进行识别,根据不同的情绪来选择不同的表情识别模型,减少了每个识别模型所需要记忆的内容,降低了整个表情识别过程的运算复杂度,提高了运算效率。
    9.专利cn107358169a公开的方法是首先进行正面、负面、中性情绪的大类别判别,再根据不同大类别匹配不同的识别模型。由于负面表情识别效果差的原因是表情间特征相似,而该专利并没有对负面表情进行有针对性的操作,只是分割出一个独立的识别模型,但是在该独立的识别模型中,负面表情的特征依然是相似的,对负面表情的识别效果并没有改善。而本发明设计了一种新的三元组损失函数,并且可以通过控制三元组的类别来源实现重点对负面表情的类间距离进行调整,这种损失函数能够使负面表情类间距离增大,从而增强负面表情特征鉴别性。
    10.申请公开号cn111353390a,一种基于深度学习的微表情识别方法,其包括如下步骤:1:对含有表情动作的视频数据裁剪、视频分帧,提取;2:对提取的表情序列进行人脸对齐,人脸裁剪,进行归一化等预处理;3:将得到的数据集进行数据增强操作;4:搭建神经网络模型:5:将所有人脸表情数据按比例分成训练集和测试集;6:使用测试集对模型进行测试,输出识别准确率,识别时间,误差等信息,当识别率达到要求,选择当前模型。
    11.专利cn111353390a的方法是改进神经网络模型结构,但关注点在整体表情识别效果,并没有重点关注目前存在的痛点问题。而本发明重点针对负面表情效果差的问题提出了一种专门适用于区分相似类的损失函数。并且本发明不需要改变神经网络模型结构,可以直接使用经典的网络结构,只需要将全连接层前的特征值进行记录即可,方法简单易操作。


    技术实现要素:

    12.本发明旨在解决以上现有技术的问题。提出了一种表情识别方法及系统。本发明的技术方案如下:
    13.一种表情识别方法,其包括以下步骤:
    14.获取人脸表情图片样本和对应的类别标签;根据所述人脸表情样本进行人脸检测和人脸对齐;
    15.建立深度神经网络模型,将所述人脸表情图片送入深度神经网络模型中提取特征,得到表情特征;
    16.根据表情类别标签选择多个三元组,每个三元组包括的三个样本来自不同的类别;
    17.根据所述表情特征和所述三元组计算第一个损失值;
    18.根据真实类别标签与所得表情特征计算交叉熵损失作为第二个损失值;
    19.将所述表情特征送入分类器进行分类,输出分类结果。
    20.进一步的,所述脸表情图片样本和对应的类别标签,具体包括:
    21.使用摄像机录制拍摄人脸发生表情的视频;
    22.观察所述视频中人脸出现表情的时间,抽取该时间对应的帧保存为图像,得到人脸表情图片样本,并且标注表情的类别。
    23.进一步的,所述建立深度神经网络模型,将所述人脸表情图片送入神经网络模型中提取特征,得到表情特征,具体包括:
    24.创建18层的残差网络模型,并对模型内部包含的参数以及神经网络学习率、优化器等参数进行初始化;
    25.将表情样本输入到深度神经网络中,得到深度神经网络最后一层前的特征值;
    26.将最后一层前的特征值输入模型最后一层全连接层,得到最终输出的特征值。
    27.进一步的,所述根据表情类别标签选择多个三元组,每个三元组包括的三个样本来自不同的类别,具体包括:
    28.遍历整个标签集合,当遍历的三个样本均属于不同类别时,将当前三个样本所对应的下标存储到集合中,得到一个存储下标的三元组集合;
    29.为保证每个三元组中的三个样本特征之间的距离不均衡,从上一步得到的三元组
    集合中过滤掉三个样本全属于正面表情或负面表情的组合。负面表情本身特征相似,而衡量特征相似的方法就是特征间的距离,距离越近越相似,即负面表情之间距离会更近。所述保证三元组中三个样本距离不均衡的意义为,假设目前选择的三元组包含两个负面表情和一个正面表情,那么正面表情和负面表情之间的距离会比较远,而两个负面表情的距离比较近,即为所述的距离不均衡。这种情况下,通过后续的损失函数控制可以使得两个负面表情间的距离变远,数值上接近正面表情和负面表情间的距离,达到重新调整负面表情间距离的目的,使得负面表情间距离增大,同时正负表情的类间距离与负负表情的类间距离趋于相等。但是若当前选择的三元组均属于负面表情,那么开始时样本间的距离就没有明显差异,所以很难使负负表情的类间距离大小达到正负表情的类间距离大小,三元组同属于正面表情时同理。这就是不选择同属于负面表情或正面表情的三元组的目的。
    30.进一步的,所述根据表情特征和三元组计算第一个损失值,具体包括:
    31.所述三元组集合中的每个三元组计算一个损失值,根据三元组中存储的下标从神经网络最后一层前得到的表情特征中提取对应的三个特征,三个特征能够形成三个欧式距离,每次随机选取其中的两个距离,使得两个欧式距离的比例趋于1,故取两个欧式距离的比例减数值1的平方值作为损失值,最终取多个三元组计算的损失值的平均作为第一个损失的最终值。
    32.进一步的,根据所得的三元组集合中每个三元组中存储的下标从神经网络最后一层前得到的特征中取出对应的三个512维的特征值x1、x2、x3,通过三个特征能够得到三个欧式距离,每次随机选取其中的两个欧式距离d1,d2,欧式距离计算公式如下:
    [0033][0034]
    用d1和d2的比例趋于1作为损失函数,目的是使得两个类间距离d1、d2趋于相等,每个三元组计算一个损失值,最后取平均值,损失函数公式如下,其中t为三元组数量:
    [0035][0036]
    该损失函数对于每一个三元组内部只能够使三个样本间的两个距离趋于相等,但是在不同的三元组中随机选取不同的两个距离,所以在整体上会使三个距离均趋于相等,结果会使得所有类间距离趋于相等。
    [0037]
    进一步的,所述根据真实类别标签与神经网络最后一层输出所得的表情特征计算交叉熵损失作为第二个损失值,具体包括:
    [0038]
    假设第i个表情样本经过神经网络最后一层的输出值是pi=(p
    i1
    ,p
    i2
    ,

    ,p
    im
    ),与其真实标签yi=(y
    i1
    ,y
    i2
    ,

    ,y
    im
    )共同计算交叉熵损失,其中m代表表情类别数量,真实标签的表示中,假设该样本属于第j类,那么yi中y
    ij
    的值为1,其余值为0,计算公式如下,其中n为样本数量:
    [0039][0040]
    根据两个损失值的数量级,通过系数λ将两个损失值的数量级调节到一致进行相加,计算公式如下:
    [0041]
    loss=λ*loss1 loss2
    [0042]
    根据网络模型的输出pi计算预测类别,其中最大值对应的下标即为预测类别,最
    后将预测类别进行输出。。
    [0043]
    一种采用任一项所述方法的表情识别系统,其包括:
    [0044]
    输入模块,用于将人脸表情图像输入到表情识别系统中;
    [0045]
    表情获取模块,用于对输入的多个人脸表情图像进行处理,对输入图片样本进行人脸检测和人脸对齐,得到人脸表情图片样本;
    [0046]
    标准化处理模块,用于对人脸表情图片样本进行标准化处理,使得所述人脸表情图片的尺寸相同,得到标准化的表情图片样本;
    [0047]
    格式转化模块,用于将得到的标准化人脸表情图片转化为神经网络模型需要的张量格式;
    [0048]
    模型管理模块,用于创建、管理和保存神经网络模型;
    [0049]
    特征提取模块,用于通过神经网络模型提取表情样本对应的特征;
    [0050]
    组合生成模块,用于生成符合要求的表情三元组;
    [0051]
    损失计算模块,用于计算两个损失值,第一个损失值根据所述的三元组计算,第二个损失值是根据真实标签计算交叉熵损失值,最后将两个损失进行结合,并且根据损失进行梯度回传更新网络参数;
    [0052]
    预测类别模块,用于根据特征提取模块提取到的特征预测分类结果,并将预测结果输出。
    [0053]
    进一步的,所述组合生成模块,用于根据样本标签选取符合要求的三元组,一批样本中每个样本对应唯一一个下标,三元组的选择结果即为三个来自不同类别样本的下标,并且三个样本不同时属于负面表情或同时属于正面表情,存储下标目的是方便后续计算损失根据下标提取对应的特征;
    [0054]
    所述损失计算模块,用于计算两种损失函数,并且将两个值进行一定调整后相加,调整主要是使得两个损失值的数量级一致,保证两者权重大约相等,即保证两者均发挥作用。
    [0055]
    本发明的优点及有益效果如下:
    [0056]
    本发明旨在改善现有的人脸表情识别方法负面表情识别效果差的问题,提供一种表情识别方法及系统,通过控制负面表情在特征空间中的距离增强特征鉴别性,缩小负面表情与正面表情准确率上的差异。
    [0057]
    在传统的基于神经网络的表情识别方法中,正面表情之间以及正负表情之间的距离都是相对较远的,而负面表情之间的距离是相对较小的,即存在不同类别间距离不均衡的问题,导致负面表情的准确率相对较低,本发明旨在改善该问题。
    [0058]
    论文learning informative and discriminative features for facial expression recognition in the wild的主要创新在于改进中心损失函数,其设计的损失函数为最小化每个样本与其所属类中心的距离、最大化与其他类中心距离。专利cn113887325a设计的损失函数为每个样本与其所属类中心的距离。本发明的与以上两种方法的区别在于,以上两种方法的损失函数对所有类别的限制是相同的,经过这种损失函数调整的结果是类间距离依然是不均衡的。本发明的主要优点在于每次调整一个三元组中三个样本间的距离,并且控制了所选取的三个样本的类别来源,本发明的特点在于这种方式不是对所有类别进行同样的操作,而是侧重于原本距离相近的类别,即负负面表情之间,所
    以主要能够有针对性的改善负面表情识别效果差的问题。
    附图说明
    [0059]
    图1是本发明提供优选实施例表情识别方法流程图;
    [0060]
    图2为表情识别系统结构图。
    具体实施方式
    [0061]
    下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、详细地描述。所描述的实施例仅仅是本发明的一部分实施例。
    [0062]
    本发明解决上述技术问题的技术方案是:
    [0063]
    实施例1:
    [0064]
    如图1所示,本发明表情识别方法,包括如下步骤:
    [0065]
    步骤1:利用摄像机采集多人清晰的人脸表情视频,每个人包含七种基本表情。对采集到的视频进行抽帧,提取视频中带有表情的帧,得到有效的人脸表情图片样本;
    [0066]
    步骤2:对步骤1得到的人脸表情图片样本进行人脸检测和人脸关键点检测,具体的方法为使用dlib库中的算法,能够初步得到人脸区域以及人脸关键点,再根据相似变换矩阵方式进行人脸对齐,使得所有人脸图像鼻子处于图片中间位置;
    [0067]
    步骤3:对步骤2所得的人脸表情图片样本所属类别进行标注,用0-6分别代表七种表情,得到完整的表情数据集,供后续训练网络模型使用;
    [0068]
    步骤4:创建深度神经网络模型,并且将所有表情图片样本的输入模型中。具体步骤如下:
    [0069]
    (1)对步骤2得到的人脸表情图片样本进行标准化处理,将所有样本的尺寸设置为224
    ×
    224,得到标准化表情图片样本;
    [0070]
    (2)将标准化的表情图片样本分为多个集合,每个集合中包含不同种类的表情,将样本转化为神经网络所需的张量格式,得到多个张量集;
    [0071]
    (3)创建18层的残差网络模型,并且将在大型人脸数据集上训练得到的网络模型参数加载到当前模型中,得到已经初始化的神经网络模型;
    [0072]
    (4)将多个张量集依次输入神经网络模型中进行特征提取,得到相应的表情特征,第i个表情样本在网络最后一层前面得到特征值xi=(x
    i1
    ,x
    i2
    ,

    ,x
    in
    ),其中n=512,每个样本得到一个512位特征;
    [0073]
    (5)将上一步得到的表情特征输入神经网络的最后一层全连接层得到分类信息pi=(p
    i1
    ,p
    i2
    ,

    ,p
    im
    ),其中m为类别数量,每个样本对应七个数值,分别代表该样本属于七个类别的可能性;
    [0074]
    步骤5:根据当前张量集对应的标签选择三元组,具体操作如下:
    [0075]
    (1)遍历整个标签集合,当遍历的三个样本均属于不同类别时,将当前三个样本所对应的下标存储到集合中,得到一个存储下标的三元组集合;
    [0076]
    (2)为保证每个三元组中的三个样本特征之间的距离不均衡,从上一步得到的三元组集合中过滤掉三个样本全属于正面表情或负面表情的组合;
    [0077]
    步骤6:根据步骤5所得的三元组集合中每个三元组中存储的下标从步骤4的第三
    步得到的特征中取出对应的三个512维的特征值,通过三个特征能够三个欧式距离,每次随机选取其中的两个欧式距离d1,d2,欧式距离计算公式如下:
    [0078][0079]
    用d1和d2的比例趋于1作为损失函数,每个三元组计算一个损失值,最后取平均值。损失函数公式如下,其中t为三元组数量:
    [0080][0081]
    该损失函数对于每一个三元组内部只控制了三个样本间的两个距离,但是在不同的三元组中随机选取不同的两个距离,故在整体上是对三个距离的控制,即对所有类别间距离的控制;
    [0082]
    步骤7:根据步骤4的第四步得到的最终的分类信息pi,与表情样本真实标签yi=(y
    i1
    ,y
    i2
    ,

    ,y
    im
    )共同计算交叉熵损失,真实标签的表示中,若该样本属于第j类则yi中y
    ij
    的值为1,其余为0,计算公式如下,其中n为样本数量:
    [0083][0084]
    步骤8:根据两个损失值的数量级,通过系数λ将两个损失值的数量级调节到一致进行相加,计算公式如下:
    [0085]
    loss=λ*loss1 loss2
    [0086]
    步骤9:根据网络模型的输出pi计算预测类别,其中最大值对应的下标即为预测类别,最后将预测类别进行输出。
    [0087]
    实施例2:
    [0088]
    如图2所示,一种表情识别系统,包括:
    [0089]
    输入模块,用于将人脸表情图像和对应的类别标签输入到表情识别系统中;
    [0090]
    表情获取模块,用于对输入的多个人脸表情图像进行处理,对输入图片样本进行人脸检测和人脸对齐,得到人脸表情图片样本;
    [0091]
    标准化处理模块,用于对人脸表情图片样本进行标准化处理,使得所述人脸表情图片的尺寸相同,得到标准化的表情图片样本;
    [0092]
    格式转化模块,用于将得到的标准化人脸表情图片转化为神经网络模型需要的张量格式;
    [0093]
    模型管理模块,用于创建、管理和保存神经网络模型;
    [0094]
    特征提取模块,用于通过神经网络模型提取表情样本对应的特征;
    [0095]
    组合生成模块,用于生成符合要求的表情三元组;
    [0096]
    损失计算模块,用于计算两个损失值,第一个损失值根据所述的三元组计算,第二个损失值根据真实标签计算交叉熵损失值,最后将两个损失进行结合;
    [0097]
    预测类别模块,用于根据特征提取模块提取到的特征预测分类结果,并将预测结果输出。
    [0098]
    所述表情获取模块,用从输入图片中得到人脸表情区域,根据表情图片样本后用dlib库对图片样本进行人脸检测和人脸对齐,得到规范化的人脸表情样本;所述标准化处
    理模块,用于对人脸表情样本进行标准化处理,对人脸表情图片样本数据进行归一化,并且将所有样本尺寸设置为224
    ×
    224;
    [0099]
    所述模型管理模块,包括模型创建单元、模型参数加载单元和模型存储单元。具体步骤为首先在模型创建单元中创建18层的残差网络结构,第二在模型参数加载单元中,首先通过在大型人脸数据集上训练的模型中得到网络参数,将该预训练参数加载入创建的模型,最后模型存储单元负责将在多次预测和训练中满足条件的模型参数进行保存;
    [0100]
    所述特征提取模块,用于获取输入表情样本对应的特征,将样本输入神经网络模型,可以得到样本对应的特征,主要包含两个部分,第一为网络最后一层前的输出,用来计算第一个损失值。第二是网络最后一层输出,用来计算交叉熵损失和计算分类结果;
    [0101]
    所述组合生成模块,用于选取符合要求的三元组。首先根据样本的标签选择不同类别样本能够组成的所有三元组,从中删除三个同属于正面表情或同属于负面表情的组合,得到三元组集合,其中每个三元组存储的是所选取样本对应的下标;
    [0102]
    所述损失计算模块,用于计算两种损失函数,第一种为通过组合生成模块所得到的三元组集合进行计算,对每个三元组计算一个损失,最终取所有三元组的平均值作为第一个损失值。第二个损失为交叉熵损失,通过网络最后一层的输出和真实标签计算得到交叉熵损失。最后将两个值进行一定调整后相加,调整主要是使得两个损失值的数量级一致;
    [0103]
    所述预测类别模块,用于对最终类别的预测,使用特征提取模块所得的第二部分特征进行预测,并将最终预测结果输出。
    [0104]
    上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
    [0105]
    还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
    ……”
    限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
    [0106]
    以上这些实施例应理解为仅用于说明本发明而不用于限制本发明的保护范围。在阅读了本发明的记载的内容之后,技术人员可以对本发明作各种改动或修改,这些等效变化和修饰同样落入本发明权利要求所限定的范围。
    转载请注明原文地址:https://tc.8miu.com/read-583.html

    最新回复(0)