一种基于卷积神经网络的面部表情识别方法与流程

文档序号:16933703发布日期:2019-02-22 20:30阅读:159来源:国知局
一种基于卷积神经网络的面部表情识别方法与流程
本发明涉及基于图像处理及深度学习的面部表情识别
技术领域
,具体而言,尤其涉及一种基于卷积神经网络的面部表情识别方法。
背景技术
:在现实生活中,通过观察人脸表情可以使我们更好的去沟通交流,从情感理解的角度来看,人脸表情可以从侧面反映研究对象的心理状态。同时对人脸表情进行识别在电子类消费品行业、家庭娱乐、智能终端人机交互、安全领域等都有着极为广泛的应用。传统的基于人工提取表情特征进行分类识别的方法最主要的问题在于特定背景下人脸表情图像的预处理、特征提取以及训练的分类器的泛化能力强弱都会影响最终的分类结果。并且由于现实情况下输入样本和已有样本训练可能存在巨大差异,必须针对特定情形进行图像预处理及特征提取造成识别时间较长不能满足实时的需求。技术实现要素:根据上述提出现实情况下输入样本和已有样本训练可能存在巨大差异,必须针对特定情形进行图像预处理及特征提取造成识别时间较长不能满足实时的需求的技术问题,而提供一种基于卷积神经网络的面部表情识别方法。本发明涉及一种基于卷积神经网络的面部表情识别方法,其特征在于,至少包括离线训练过程和在线识别过程;所述离线识别过程,至少包括以下步骤:s11:通过采集单元采集输入图像p;s12:灰度化处理所述输入图像p,并检测灰度化处理后的图像p’;s13:统一所述灰度化处理后的图像p’的尺寸;s14:构建基于卷积神经网络的面部表情识别的网络模型;s15:对图像p’进行数据增强及并统一尺寸;s16:对所述网络模型进行训练并对训练后的网络模型进行保存;所述在线识别过程,至少包括以下步骤:s21:通过采集单元采集输入图像pz;s22:将所述输入图像pz输入所述训练后的网络模型;s23:得到在线识别结果。进一步的,所述步骤s12至少还包括以下步骤:s121:对所述输入图像进行灰度化处理;所述灰度化处理公式为:gray(i,j)=0.39*r(i,j)+0.5*g(i,j)+0.11*b(i,j);其中,r、g和b分别表示红色、绿色和蓝色通道的值,gray(i,j)表示转换后的灰度值;s122:通过opencv开源库中的人脸检测,opencv开源库中的人脸检测对该灰度图像进行人脸检测;所述人脸检测将检测到的人脸位置存储在vector<rect>类型的一维向量里,令人脸位置变量为faces,其中rect存储人脸矩阵的左上角坐标和矩阵的长和宽,rect(inta,intb,intc,intd)其中,(a,b)为矩形的左上角坐标,c,d分别表示矩形的长和宽;s23:得到灰度处理后的图像p’。进一步的,所述步骤s3至少包含:s131:根据所述faces的坐标确定人脸在人脸图像的坐标位置;s132:对检测到的所述人脸图像坐标进行剪裁,保留人脸区域得到opencv检测到的人脸图像;s133:使用插值方式为最近邻插值的方式对剪裁后的人脸图像进行尺寸调整,将剪裁后图像尺寸调整为48*48像素。进一步的,步骤s14还包括:s141:利用tensorflow深度学习框架构建我们的卷积神经网络,首先输入到conv_1层进行卷积操作,通过3*3的卷积核对输入图像进行卷积操作,则特征图为48*48*32;再采用relu激励函数对卷积层进行非线性操作,则特征图为48*48*32;所述relu激励函数为:s142:在pool1层对上一层的输出进行池化操作,通过maxpooling方法进行池化,池化窗口为2*2,则特征图为24*24*32;s143:在conv2层对pool1层进行卷积操作,使用3*3的卷积核对输入图像进行卷积操作,此时特征图为24*24*64;再采用relu激励函数对卷积层进行非线性操作,则特征图为24*24*64;s144:在pool2层对上一层的输出进行池化操作,通过maxpooling方法进行池化,池化窗口为2*2,则特征图为12*12*64;s145:在conv3层对所述pool2层进行卷积操作,通过3*3的卷积核对输入图像进行卷积操作,则特征图为12*12*128;再采用relu激励函数对卷积层进行非线性操作,则特征图为12*12*128;s146:在pool3层对上一层的输出进行池化操作,通过maxpooling方法进行池化,池化窗口为2*2,则特征图为6*6*128;s147:fc4全连接层中特征图为1*1*128;s148:fc5与输出层相连接特征图为1*1*7,通过softmax分类器最终实现训练出7种表情;所述7种表情为0=中性,1=愤怒,2=厌恶,3=害怕,4=高兴,5=悲伤,6=惊讶,实现对人脸表情的识别。更进一步的,步骤s15至少还包括:s151:定义初始化weight参数的时候conv1,conv2和conv3采用截断的正态分布初始化权重,标准差设置为0.05,则在所述fc4层定义初始化参数时采用截断的正态分布来初始化权重并给权重添加一个l2的loss;s152:损失函数采用多分类交叉熵损失函数,优化器选择adamoptimizer,将学习速率设为1e-3,将训练样本进行分批训练,每批15张图片进行训练,epochs设置为20;多分类交叉熵损失函数为:loss=-∑xp(x)log(q(x));其中,p(x)表示实际标签的概率分布,q(x)表示预测标签的概率分布;s153:在每一步的训练中首先获得一个批次图片,然后计算loss损失函数,通过adam优化器不断跟新训练参数。进一步的,所述步骤s16至少还包括:s161:利用采集单元对人脸进行拍摄;s162:对拍摄的照片进行灰度化处理、opencv库进行人脸检测、剪裁和统一尺寸;s163:将图片输入到我们训练好的exprecognition网络模型中进行检测,最终输出面部表情属于每种表情的概率,选择概率最大值所对应的表情则为输出;所述概率计算公式如下:其中,j表示第j类的分类情况,k表示类别数,p(cj=j|x)表示样本x属于j类的概率,表示模型参量,是对概率进行归一化,即所有概率相加为1。较现有技术相比,本发明具有以下优点:本发明提供的基于神经网络的面部表情识别方法,通过与传统的人工提取表情特征的方法相比,实现了自动对人脸表情特征进行提取,从而进行表情识别,并提高了对表情识别的速度。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做以简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本发明整体流程示意图。图2为本发明待采集数据集图像的原图。图3为本发明待采集数据集图像统一尺寸后的图像。图4为本发明exprecognition网络模型示意图具体实施方式为了使本
技术领域
的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。如图1-4所示,本发明提供了一种基于卷积神经网络的面部表情识别方法,至少包括离线训练过程和在线识别过程。作为优选的实施方式,所述离线识别过程,至少包括以下步骤:步骤s11:通过采集单元采集输入图像p;步骤s12:灰度化处理所述输入图像p,并检测灰度化处理后的图像p’;步骤s13:统一所述灰度化处理后的图像p’的尺寸;步骤s14:构建基于卷积神经网络的面部表情识别的网络模型;步骤s15:对图像p’进行数据增强及并统一尺寸;步骤s16:对所述网络模型进行训练并对训练后的网络模型进行保存。作为优选的实施方式,步骤s12至少还包括以下步骤:在本实施方式中,步骤s121:对所述输入图像进行灰度化处理;所述灰度化处理公式为:gray(i,j)=0.39*r(i,j)+0.5*g(i,j)+0.11*b(i,j);其中,r、g和b分别表示红色、绿色和蓝色通道的值,gray(i,j)表示转换后的灰度值。可以理解为在其它的实施方式中,所述灰度化处理还可以通过现有技术中的手段进行转换,只要能够满足能够降低采集图像的颜色即可。在本实施方式中,步骤s122:通过opencv开源库中的人脸检测,opencv开源库中的人脸检测对该灰度图像进行人脸检测;所述人脸检测将检测到的人脸位置存储在vector<rect>类型的一维向量里,令人脸位置变量为faces,其中rect存储人脸矩阵的左上角坐标和矩阵的长和宽,rect(inta,intb,intc,intd)其中,(a,b)为矩形的左上角坐标,c,d分别表示矩形的长和宽;s23:得到灰度处理后的图像p’。作为一种优选的实施方式,步骤s3至少还包含:s131:根据所述faces的坐标确定人脸在人脸图像的坐标位置;s132:对检测到的所述人脸图像坐标进行剪裁,保留人脸区域得到opencv检测到的人脸图像;s133:使用插值方式为最近邻插值的方式对剪裁后的人脸图像进行尺寸调整,将剪裁后图像尺寸调整为48*48像素。在本实施方式中,步骤s14还包括:s141:利用tensorflow深度学习框架构建我们的卷积神经网络,首先输入到conv_1层进行卷积操作,通过3*3的卷积核对输入图像进行卷积操作,则特征图为48*48*32;再采用relu激励函数对卷积层进行非线性操作,则特征图为48*48*32;所述relu激励函数为:s142:在pool1层对上一层的输出进行池化操作,通过maxpooling方法进行池化,池化窗口为2*2,则特征图为24*24*32;s143:在conv2层对pool1层进行卷积操作,使用3*3的卷积核对输入图像进行卷积操作,此时特征图为24*24*64;再采用relu激励函数对卷积层进行非线性操作,则特征图为24*24*64;s144:在pool2层对上一层的输出进行池化操作,通过maxpooling方法进行池化,池化窗口为2*2,则特征图为12*12*64;s145:在conv3层对所述pool2层进行卷积操作,通过3*3的卷积核对输入图像进行卷积操作,则特征图为12*12*128;再采用relu激励函数对卷积层进行非线性操作,则特征图为12*12*128;s146:在pool3层对上一层的输出进行池化操作,通过maxpooling方法进行池化,池化窗口为2*2,则特征图为6*6*128;s147:fc4全连接层中特征图为1*1*128;s148:fc5与输出层相连接特征图为1*1*7,通过softmax分类器最终实现训练出7种表情;所述7种表情为0=中性,1=愤怒,2=厌恶,3=害怕,4=高兴,5=悲伤,6=惊讶,实现对人脸表情的识别。作为优选的实施方式,所述exprecognition网络,使用tensorflow搭建网络,其中包括输入层、卷积层、激励函数、池化层、卷积层、激励函数、池化层、卷积层、激励函数、池化层、全连接层和输出层。其中输入层是一个48*48的人脸图像,conv1层有32个特征图,共有(3*3+1)*32=320个训练参数,conv1层有64个特征图,共有(3*3+1)*64=640个训练参数,conv3层有128个特征图,共有(3*3+1)*128=1280个特征图,fc4共有6*6*128*128+1=589825个训练参数,fc5层与输出层连接,共有有128*7+1=897个训练参数,此网络共有592962个训练参数。作为优选的实施方式,作为优选的实施方式,卷积前后输入输出大小的公式如下:第l层输入大小为:w1*h1*d1第l+1层输出大小为:d2=k其中:k表示filter的个数,f表示filter的大小,s表示步长,p表示边界填充。作为优选的实施方式,作为一种实施例,作为本申请的一种表情库共有123个视频包括593个人脸图像序列共8个表情标签,其中蔑视表情不常见,因此在分类中忽略蔑视表情,因此共有327个表情序列共7种表情标签,0=中性,1=愤怒,2=厌恶,3=害怕,4=高兴,5=悲伤,6=惊讶。通过查看数据集我们发现数据集中存在着样本分布不均衡的问题,参考此次采用的是灰度图像,于是采用旋转、尺度变化及对比度变换的方式对数据集进行扩充,扩充之后的表情数量如表1:表1扩充后ck+表情库各表情的数量0123456中性愤怒厌恶害怕高兴悲伤惊讶训练集936883954827956827917测试集85798275817979作为本申请一种优选的方法,步骤s15至少还包括:s151:定义初始化weight参数的时候conv1,conv2和conv3采用截断的正态分布初始化权重,标准差设置为0.05,则在所述fc4层定义初始化参数时采用截断的正态分布来初始化权重并给权重添加一个l2的loss;s152:损失函数采用多分类交叉熵损失函数,优化器选择adamoptimizer,将学习速率设为1e-3,将训练样本进行分批训练,每批15张图片进行训练,epochs设置为20;多分类交叉熵损失函数为:loss=-∑xp(x)log(q(x));其中,p(x)表示实际标签的概率分布,q(x)表示预测标签的概率分布;s153:在每一步的训练中首先获得一个批次图片,然后计算loss损失函数,通过adam优化器不断跟新训练参数。进一步的,所述步骤s16至少还包括:s161:利用采集单元对人脸进行拍摄;s162:对拍摄的照片进行灰度化处理、opencv库进行人脸检测、剪裁和统一尺寸;s163:将图片输入到我们训练好的exprecognition网络模型中进行检测,最终输出面部表情属于每种表情的概率,选择概率最大值所对应的表情则为输出;所述概率计算公式如下:其中,j表示第j类的分类情况,k表示类别数,p(cj=j|x)表示样本x属于j类的概率,表示模型参量,是对概率进行归一化,即所有概率相加为1。作为本申请的一种实施例,经过数据增强之后的样本共有6300张训练样本,557张测试样本,模型训练的思路是在将图片输入到网络中训练之前,通过opencv开源库中的图像分割函数对图像进行剪裁,保留人脸区域,去除背景区域。之后,将去除背景后的人脸图像的尺寸统一为48*48像素最后将预处理之后图片作为网络的输入,训练exprecognition网络模型。定义初始化weight参数的时候conv1,conv2和conv3采用截断的正态分布来初始化权重,标准差设置为0.05,在fc4层定义初始化参数时采用除了采用截断的正态分布来初始化权重之外,同时给权重添加一个l2的loss,相当于做了一个正则化处理来防止过拟合,损失函数采用多分类交叉熵损失函数,优化器选择adamoptimizer,将学习速率设为1e-3,将训练样本进行分批训练,每批15张图片进行训练,epochs设置为20。作为本申请的一种优选的实施方式,所述方法还包括在线识别过程。在线识别过程至少包括以下步骤:步骤s21:通过采集单元采集输入图像pz;步骤s22:将所述输入图像pz输入所述训练后的网络模型;步骤s23:得到在线识别结果。可以理解为在其它的实施方式中,在线的识别过程还可以按照实际情况进行选择,只要能够满足能够将得到准确的识别记过即可。作为优选的实施方式当实际检测过程中出现未识别过的图像时,则将图像储存在表情库中。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1