没想到转眼间就研二了,上一篇博客还是1年半之前,时间过的太快了。

         上一篇博客里写到,希望自己能够早点抽出时间,总结出LDA(线性判别分析)在人脸识别上的应用,看来我是食言了。

         研一和研二上学期确实太忙了,实验室任务很多,一直忙着编算法,写论文,投稿,修改.......还好,过去这一年半,稍微有点学术成就,发表了几篇论文,都是和模式识别相关的,之前博客里说过,本科的时候,就开始做人脸识别,当时都是自学,至于那些基本的算法,PCA,LDA,ICA...都是自己慢慢琢磨的。研究生也做过一些人脸识别的研究,主要用稀疏表示来做,后来跟着导师做遥感卫星云图云分类,后来又看了一些深度学习相关的东西。

        我想,对于一个模式识别初学者来说,一些基本的算法和思想,还是要搞清楚的,其实当你积累了一定数量的算法之后,不管复杂还是简单的,只要你仔细去分析了,就会发现算法在很多地方都是相通的。LDA(Linear Discrinimantion Analysis),线性判别分析,或者说Fisher线性判别(FIsher Linear Discriminant,FLD),就是在PCA的基础上发展的,仔细看过PCA的人肯定知道,PCA其实是一个很粗糙的特征提取方法,提取的人脸主成份(主要特征)对光照、姿态、遮挡等问题并没有很好的鲁棒性。1997年,大牛Belhumeur.P.N等人提出了LDA,他将PCA和LDA进行了详细的对比,那篇文章写的很详细,并且还指出,在LDA使用的过程中,为避免小样本问题,即LDA在计算类内散度矩阵不可逆,他将PCA先用于降维,再使用LDA方法,实验结果表面,这种全新的方法确实有效。

      下面就来仔细看一下LDA 的原理吧:

      前面说过,LDA是在PCA的启发下被创造出来的,和PCA的关系很密切,现在一般所说的LDA人脸识别算法,其实基本上都是PCA+LDA,这里先对样本进行PCA处理,消除小样本带来的奇异问题。

       Fisher线性判别(FLD)或者线性判别分析(LDA)方法的核心是:找到一个投影方向,将样本进行投影后的类间距离较大,类内距离较小。为此要求计算样本的类间散度矩阵Sb和类内散度矩阵Sw,使投影后这两个矩阵Sb/Sw的比值最大。进行这样的投影后,因为之间有很多相似特征故聚集在一起,而不同类样本之间相似特征很少,故互相远离开来。如下图所示,用Fisher方法将两类样本在二维平面上进行分类。


        设训练样本集中有C类人,每个人有N张人脸图像,即X=[X1,X2,...,XC],其中第i类人的人脸图像集表示为{x(1,1),x(1,2),...,x(i,j)},i=1.2,...C,j=1.2,...N;

        样本的类间散度矩阵Sb和类内散度矩阵Sw分别定义为:

               (公式1)

         ui表示第i类样本的均值,u表示所有样本的均值;

         设W为Fisher空间的一个投影矩阵,用于区分人脸样本,按照上面所讲述的FIsher线性判别思想,这个投影矩阵可以让不同类别之间的距离加大,让同一个类别之间样本的距离变小,变得更紧凑。Fisher准则函数如下:

                                        (公式2)

         Fisher方法(LDA)就是寻找样本投影后的向量w(注意,这里的小写w用于构造最终的Fisher投影矩阵,即大写的W),使得J(w)最大,即最佳投影矩阵为:

                                          (公式3)

        这里WLDA就是上面所说的投影矩阵W,具体的LDA人脸识别流程图如下:

       

                                                    图 2. LDA人脸识别流程图

         求得投影矩阵(空间)以后,将测试样本在这个投影空间上进行投影,分类时,选择一种距离度量分类器,就可以对测试人脸进行识别了。

         总的来说,PCA和LDA都是比较容易的人脸识别算法,这方面的中文文献有很多,初学者完全可以自学,重要的是,在看完理论后,一定要去看代码,跑代码,一行一行分析代码,可以说PCA和LDA的代码都是根据我博客里的这些公式编的,十分容易理解。我想,对于立志做模式识别相关的研究人员来说,一开始打好基础,对以后的算法编写,帮助很大。这两个最经典的算法一定要明白,当吃透了以后,你以后遇到的很多算法,都会多多少少有类似的思想!

         本人一直致力于模式识别算法的研究,接下来,我将在下一篇博客里,介绍有关稀疏表示人脸识别的理论知识,感兴趣的同学可以关注一下。在稀疏表示领域,本人发过几篇论文,对这个领域略懂一二,我写进博客的东西,都是亲自实践出来的,不是粘贴复制的。我想这样更有助于帮助大家一起学习和进步!

       


      

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐