发明名称 多类别面部表情高精度识别方法
摘要 本发明涉及一种基于Haar-like特征的多类别面部表情高精度识别方法,属于计算机科学与图形图像处理技术领域。本发明首先使用Haar-like特征和串联人脸检测分类器实现高准确性的人脸检测;进而利用AdaBoost.MH算法对高维Haar-like特征进行特征筛选;最终使用随机森林算法进行表情分类器训练,以完成表情识别。与现有技术相比,本发明在进一步提升多种类别表情识别率的同时,大大减少训练和识别的时间开销,并可方便地实现并行化,以进一步提高识别效率、满足实时处理及移动计算的需求。本发明可对静态图像和动态视频进行高精度识别;不仅适用于桌面计算机,也适用于手机、平板电脑等移动计算平台。
申请公布号 CN102831447B 申请公布日期 2015.01.21
申请号 CN201210314435.4 申请日期 2012.08.30
申请人 北京理工大学 发明人 罗森林;谢尔曼;潘丽敏
分类号 G06K9/66(2006.01)I 主分类号 G06K9/66(2006.01)I
代理机构 代理人
主权项 多类别面部表情高精度识别方法,其特征在于:包括如下步骤:步骤1,使用多张面部区域图像作为正样本、多张非面部区域图像作为负样本进行离线训练,得到面部识别分类器;步骤2,在步骤1的基础上,进行面部表情分类器的离线训练;具体过程如下:步骤2.1,对面部图像训练数据进行表情标注,具体方法为:收集各种待识别表情类别的图片或视频的关键帧,形成训练图像集A,其中包含的图像数目为m;使用连续的整数编号作为各张图片或关键帧的类别标签,形成表情类别标签集Y={1,2,…,k},其中k为待识别的表情类别数;步骤2.2,对经步骤2.1标注后的每幅训练图像进行面部区域数据提取,得到剪裁出的面部图像,形成训练图像集B;步骤2.3,为了训练表情分类器,对步骤2.2所形成的训练图像集B中的每幅图像进行Haar‑like特征的二次提取,Haar‑like特征提取的具体方法为:计算每一幅剪裁出的图像的积分图,根据各个积分图计算相对应的H维Haar‑like特征值;将每幅图像相应的H维Haar‑like特征向量记作一行,使所有m幅图像的全部H维Haar‑like特征向量构成一个m行、H列的特征矩阵X;步骤2.4,使用AdaBoost.MH算法,对步骤2.3得到的Haar‑like特征矩阵X进行特征提取;Haar‑like特征提取方法的具体过程为:步骤2.4.1,初始化每幅图像对应的权重,记作D<sub>1</sub>(i,y<sub>i</sub>)=1/(mk),y<sub>i</sub>∈Y表示第i个图像的表情类别标签,i=1…m;步骤2.4.2,开始第f轮迭代,f=1…F:依次将特征矩阵X的各列数据作为一个弱分类器的输入,进行H次运算,得到r<sub>f,j</sub>:<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><msub><mi>r</mi><mrow><mi>f</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>=</mo><msubsup><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>m</mi></msubsup><msub><mi>D</mi><mi>f</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><msub><mi>y</mi><mi>i</mi></msub><mo>)</mo></mrow><mi>K</mi><mo>[</mo><msub><mi>y</mi><mi>i</mi></msub><mo>]</mo><msub><mi>h</mi><mi>j</mi></msub><mrow><mo>(</mo><msub><mi>x</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>,</mo><msub><mi>y</mi><mi>i</mi></msub><mo>)</mo></mrow><mo>,</mo></mrow>]]></math><img file="FDA0000591780310000011.GIF" wi="841" he="101" /></maths>其中,j=1…H,x<sub>i,j</sub>表示X的第i行中的第j个元素;h<sub>j</sub>(x<sub>i,j</sub>,y<sub>i</sub>)表示以x<sub>i,j</sub>作为输入的弱分类器,D<sub>f</sub>(i,y<sub>i</sub>)表示第f轮迭代中第i个训练图像的权重值,<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><mi>K</mi><mo>[</mo><msub><mi>y</mi><mi>i</mi></msub><mo>]</mo><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mo>+</mo><mn>1</mn></mtd><mtd><msub><mi>y</mi><mi>i</mi></msub><mo>&Element;</mo><mi>Y</mi><mo>=</mo><mo>{</mo><mn>1,2</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mi>k</mi><mo>}</mo></mtd></mtr><mtr><mtd><mo>-</mo><mn>1</mn></mtd><mtd><msub><mi>y</mi><mi>i</mi></msub><mo>&NotElement;</mo><mi>Y</mi><mo>=</mo><mo>{</mo><mn>1,2</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mi>k</mi><mo>}</mo></mtd></mtr></mtable></mfenced><mo>;</mo></mrow>]]></math><img file="FDA0000591780310000012.GIF" wi="678" he="155" /></maths>结束H次运算后,取本轮迭代得到的H个r<sub>f,j</sub>中的最大值,记作r<sub>f</sub>,并将r<sub>f</sub>对应的、采用X的第j维特征值x<sub>j</sub>作为输入的弱分类器h<sub>j</sub>(x<sub>j</sub>,Y),作为第f轮筛选出的弱分类器h<sub>f</sub>(x<sub>j</sub>,Y),同时将x<sub>j</sub>作为筛选出的特征维加入到新的特征空间;步骤2.4.3,计算由步骤2.4.2选择出的弱分类器h<sub>f</sub>(x<sub>j</sub>,Y)的权重α<sub>f</sub>:<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><msub><mi>&alpha;</mi><mi>f</mi></msub><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mi>ln</mi><mrow><mo>(</mo><mfrac><mrow><mn>1</mn><mo>+</mo><msub><mi>r</mi><mi>f</mi></msub></mrow><mrow><mn>1</mn><mo>-</mo><msub><mi>r</mi><mi>f</mi></msub></mrow></mfrac><mo>)</mo></mrow><mo>;</mo></mrow>]]></math><img file="FDA0000591780310000021.GIF" wi="400" he="175" /></maths>步骤2.4.4,计算第f+1轮迭代中各个图像的权重D<sub>f+1</sub>;<maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><msub><mi>D</mi><mrow><mi>f</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>=</mo><mfrac><mrow><msub><mi>D</mi><mi>f</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><msub><mi>y</mi><mi>i</mi></msub><mo>)</mo></mrow><mi>exp</mi><mrow><mo>(</mo><msub><mrow><mo>-</mo><mi>&alpha;</mi></mrow><mi>f</mi></msub><mi>K</mi><mo>[</mo><msub><mi>y</mi><mi>i</mi></msub><mo>]</mo><msub><mi>h</mi><mi>f</mi></msub><mrow><mo>(</mo><msub><mi>x</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>,</mo><msub><mi>y</mi><mi>i</mi></msub><mo>)</mo></mrow><mo>)</mo></mrow></mrow><msub><mi>Z</mi><mi>f</mi></msub></mfrac><mo>,</mo><mi>i</mi><mo>=</mo><mn>1</mn><mo>.</mo><mo>.</mo><mo>.</mo><mi>m</mi><mo>.</mo></mrow>]]></math><img file="FDA0000591780310000022.GIF" wi="1164" he="156" /></maths>其中,h<sub>f</sub>(x<sub>i,j</sub>,y<sub>i</sub>)表示第f轮迭代中筛选出的、以第i个图像的第j维特征值作为输入的弱分类器,Z<sub>f</sub>是归一化因子<maths num="0005" id="cmaths0005"><math><![CDATA[<mrow><msub><mi>Z</mi><mi>f</mi></msub><mo>=</mo><msubsup><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>m</mi></msubsup><msub><mi>D</mi><mi>f</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><msub><mi>y</mi><mi>i</mi></msub><mo>)</mo></mrow><mi>exp</mi><mrow><mo>(</mo><msub><mrow><mo>-</mo><mi>&alpha;</mi></mrow><mi>f</mi></msub><mi>K</mi><mo>[</mo><msub><mi>y</mi><mi>i</mi></msub><mo>]</mo><msub><mi>h</mi><mi>f</mi></msub><mrow><mo>(</mo><msub><mi>x</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>,</mo><msub><mi>y</mi><mi>i</mi></msub><mo>)</mo></mrow><mo>)</mo></mrow><mo>;</mo></mrow>]]></math><img file="FDA0000591780310000023.GIF" wi="1133" he="114" /></maths>步骤2.4.5,将步骤2.4.4得到的新权重代入步骤2.4.2,按照步骤2.4.2至步骤2.4.4的方法迭代,直到筛选出F维Haar‑like特征,并在特征矩阵X中提取F列,形成一个m行、F列的主要特征矩阵X’;步骤3,使用经步骤2.4.5得到的主要特征矩阵X’和经过步骤2.1标注的表情类别标签集Y,训练生成表情识别分类器,训练的过程遵循随机森林算法,具体方法为:步骤3.1,根据设计要求中的决策树数目T和结点特征维数u,生成T棵CART分类决策树;所述决策树的根结点的记录格式为N(J),中间结点的记录格式为N(V,J),叶子结点的记录格式为(V,J,y<sub>t</sub>);其中,J表示结点N的分裂特征维,V表示结点N的特征值,y<sub>t</sub>表示结点N的类别标签;每棵CART分类决策树的生成方法为:步骤3.1.1,进行m次可放回随机取样,每次抽取主要特征矩阵X’的一行,构成一个新的m行、F列的矩阵X″,用于本棵CART分类决策树的生长;X″中各行特征对应的训练样本标签构成新的表情类别标签集Y″;步骤3.1.2,从根结点开始,逐结点地进行结点分裂,最终完成整棵树的生长;每个结点的分裂过程为:a)从矩阵X″中随机选择u列<img file="FDA0000591780310000024.GIF" wi="76" he="93" />作为本结点分裂所需的训练数据,其中<img file="FDA0000591780310000031.GIF" wi="66" he="84" />表示X″的第j列;b)分别计算选出的<img file="FDA0000591780310000032.GIF" wi="56" he="80" />的信息增益IG<sub>j</sub>,得到u个IG<sub>j</sub>;<maths num="0006" id="cmaths0006"><math><![CDATA[<mrow><msub><mi>IG</mi><mi>j</mi></msub><mo>=</mo><mi>IG</mi><mrow><mo>(</mo><msup><mi>Y</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mo>|</mo><msubsup><mover><mi>x</mi><mo>&OverBar;</mo></mover><mi>j</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>)</mo></mrow><mo>=</mo><mi>H</mi><mrow><mo>(</mo><msup><mi>Y</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mo>)</mo></mrow><mo>-</mo><mi>H</mi><mrow><mo>(</mo><msup><mi>Y</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mo>|</mo><msubsup><mover><mi>x</mi><mo>&OverBar;</mo></mover><mi>j</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>)</mo></mrow><mo>,</mo></mrow>]]></math><img file="FDA0000591780310000033.GIF" wi="1008" he="102" /></maths>其中,H(Y″)为表情类别标签集Y″的信息熵:<maths num="0007" id="cmaths0007"><math><![CDATA[<mrow><mi>H</mi><mrow><mo>(</mo><msup><mi>Y</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mo>)</mo></mrow><mo>=</mo><msubsup><mrow><mo>-</mo><mi>&Sigma;</mi></mrow><mrow><mi>w</mi><mo>=</mo><mn>1</mn></mrow><mi>k</mi></msubsup><mi>p</mi><mrow><mo>(</mo><msub><msup><mi>y</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mi>w</mi></msub><mo>=</mo><msub><mi>V</mi><mi>w</mi></msub><mo>)</mo></mrow><mo>&CenterDot;</mo><msub><mi>log</mi><mn>2</mn></msub><mi>p</mi><mrow><mo>(</mo><msub><msup><mi>y</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mi>w</mi></msub><mo>=</mo><msub><mi>V</mi><mi>w</mi></msub><mo>)</mo></mrow><mo>,</mo></mrow>]]></math><img file="FDA0000591780310000034.GIF" wi="1080" he="112" /></maths>V<sub>w</sub>表示Y″中第w个类别标签的取值,V<sub>w</sub>∈{1,2,…,k};<img file="FDA0000591780310000035.GIF" wi="226" he="88" />为表情类别标签集Y″基于<img file="FDA0000591780310000036.GIF" wi="50" he="87" />的条件熵:<maths num="0008" id="cmaths0008"><math><![CDATA[<mfenced open='' close=''><mtable><mtr><mtd><mi>H</mi><mrow><mo>(</mo><msup><mi>Y</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mo>|</mo><msubsup><mover><mi>x</mi><mo>&OverBar;</mo></mover><mi>j</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>)</mo></mrow><mo>=</mo><msubsup><mi>&Sigma;</mi><mrow><mi>s</mi><mo>=</mo><mn>1</mn></mrow><mi>h</mi></msubsup><mi>p</mi><mrow><mo>(</mo><msub><msup><mi>x</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mi>j</mi></msub><mo>=</mo><msub><mi>V</mi><mi>s</mi></msub><mo>)</mo></mrow><mo>&CenterDot;</mo><mi>H</mi><mrow><mo>(</mo><msup><mi>Y</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mo>|</mo><msub><msup><mi>x</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mi>j</mi></msub><mo>=</mo><msub><mi>V</mi><mi>s</mi></msub><mo>)</mo></mrow></mtd></mtr><mtr><mtd><mo>=</mo><msubsup><mrow><mo>-</mo><mi>&Sigma;</mi></mrow><mrow><mi>s</mi><mo>=</mo><mn>1</mn></mrow><mi>h</mi></msubsup><mi>p</mi><mrow><mo>(</mo><msub><msup><mi>x</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mi>j</mi></msub><mo>=</mo><msub><mi>V</mi><mi>s</mi></msub><mo>)</mo></mrow><mo>&CenterDot;</mo><msubsup><mi>&Sigma;</mi><mrow><mi>w</mi><mo>=</mo><mn>1</mn></mrow><mi>q</mi></msubsup><mi>p</mi><mrow><mo>(</mo><msub><msup><mi>y</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mi>w</mi></msub><mo>=</mo><msub><mi>V</mi><mrow><mi>w</mi><mo>|</mo><mi>s</mi></mrow></msub><mo>)</mo></mrow><mo>&CenterDot;</mo><msub><mi>log</mi><mn>2</mn></msub><mi>p</mi><mrow><mo>(</mo><msub><msup><mi>y</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mi>w</mi></msub><mo>=</mo><msub><mi>V</mi><mrow><mi>w</mi><mo>|</mo><mi>s</mi></mrow></msub><mo>)</mo></mrow></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0000591780310000037.GIF" wi="1541" he="228" /></maths>V<sub>s</sub>表示x″<sub>j</sub>中元素所有相异取值中的第s种取值;V<sub>w|s</sub>表示V<sub>s</sub>对应的表情类别标签;H(Y″|x″<sub>j</sub>=V<sub>s</sub>)为V<sub>s</sub>对应的表情类别标签集合的信息熵,x″<sub>j</sub>表示X″的第j列中的元素,h≤m,q≤k;c)比较步骤b得到的u个信息增益值IG<sub>j</sub>,并将X″中使IG<sub>j</sub>取值最大的一列提取出来,记作x″<sub>J</sub>,同时将该列在X’中的列数J记录下来,作为本结点的分裂特征维;d)统计x″<sub>J</sub>中所有相异特征值的数量c,然后给当前结点建立c个分别以相异特征值为结点特征值V的子结点,并以该子结点作为子树的根结点,生成新的子树,子树的生长方法为:将x″<sub>J</sub>中所有取值等于该特征值的元素所在X″中的行向量提出,组成新的特征矩阵X<sup>v</sup>,再将所提出行向量对应的所有表情类别标签提出,组成新的表情类别标签集合Y<sup>v</sup>;然后使用(X<sup>v</sup>,Y<sup>v</sup>)替代(X″,Y″),递归地进行步骤a—d的操作,直到满足下列条件之一时,结束本子树的生长:①X<sup>v</sup>的行数小于2,或各行中所有特征值都相等致使本结点无法继续分裂时,把对应的表情类别标签集合Y<sup>v</sup>中出现频率最高的标签作为该结点的类别标签y<sub>t</sub>保存;②本结点下的Y<sup>v</sup>中的表情类别标签都相同时,将唯一的表情类别标签作为该结点的类别标签y<sub>t</sub>保存;步骤3.2,保存所有T棵CART分类决策树,形成最终的随机森林表情识别分类器;步骤4,利用步骤3离线训练得到的随机森林表情识别分类器,对待测静态图像或动态视频进行在线识别;1)对静态图像的识别方法为:步骤a,提取待识别静态图像中的面部区域;步骤b,在步骤a的基础上,根据Haar‑like特征提取方法,以及步骤2.4.5得到的主要特征矩阵X’,提取识别所需的F维Haar‑like特征,构成待识别表情图像的特征向量,记作x;用x<sub>J</sub>表示特征向量x的第J维特征值;步骤c,利用步骤3离线训练得到的随机森林表情识别分类器中的T棵CART分类决策树分别对待识别表情图像的特征向量x进行识别,每棵CART分类决策树的识别从根结点开始,具体过程为:c.1.从分类器中获取当前结点的分裂特征维J,读取待识别表情图像的特征向量x的第J维特征值x<sub>J</sub>;c.2.在当前结点的子结点中进行查找,选出结点特征值与x<sub>J</sub>最相近的子结点;c.3.反复递归地进行c.1‑c.2的操作,直到当前结点是叶子结点,停止递归,并将该叶子结点的类别标签y<sub>t</sub>作为本棵CART分类决策树的识别结果输出;步骤d,对随机森林表情识别分类器中T棵CART分类决策树的T个输出结果y<sub>t</sub>进行统计,将出现频率最高的类别标签作为最终的识别结果输出;2)对动态视频的识别方法为:步骤e,对视频文件进行解码,提取每帧数据,得到待识别图像序列;步骤f,在步骤e的基础上,对待识别图像序列中的每幅图像进行面部区域数据提取,得到待识别面部图像序列;步骤g,按照步骤2.4所述的Haar‑like特征提取方法,对步骤f所得到的待识别面部图像序列中的每幅面部图像提取步骤2.4.5所筛选出的F维Haar‑like特征;步骤h,在步骤g的基础上,使用步骤3离线训练得到的随机森林表情识别分类器,对待识别面部图像序列中的每幅面部图像进行识别,得到表情类别序列;所述面部图像的识别过程与步骤c、d相同;步骤i,对步骤h得到的表情类别序列进行平滑,去除识别序列当中的毛刺判决,得到最终识别结果。
地址 100081 北京市海淀区中关村南大街5号