说明:此处的LDA对应于Linear Discriminant Analysis,PLDA即对应于Probabilistic LDA. 该代码对应的文章为ICCV2007 paper Probabilistic Linear Discriminant Analysis for Inferences About Identity,源代码可以从 Prince Vision Lab处下载。虽然源码虽然不长结构比较清楚,但是运用到了一定的矩阵知识,所以对源码分析稍作分析。
2、PLDA识别(Recognition)源码分析
3、PLDA相关应用
基本问题
Face verification是给出两张脸,我们判断它是否属于同一个人(不管这个人是谁),如下图所示两个样本x1和xp,那么一共有两个模型,M0表示他们不是同一个人,M1表明他们来自同一个人(由相同identity variable h产生)。
该程序就是计算两个样本属于同一个人的概率和属于不同人概率之比,若这个概率越大,我们认为他们属于同一个人的概率也越大。
该文件有三个子程序:
- PLDA_Verification. 主程序,计算这个概率之比。
- preProcessPLDAModel和preProcessPLDAData是预处理程序,为了子程序getLogLikeMatchPLDA方便。
- getLogLikeMatchPLDA. 计算参数X(可能只有一个样本)中的样本属于同一个人的概率。
PLDA_Verification
主程序。前半部分是调用preProcessPLDAModel和preProcessPLDAData对数据预处理,减少后面计算概率的复杂度。其中HIGHEST_N表示最多有多少个样本来自同一人。HIGHEST_N = 2;
factorModel = preProcessPLDAModel(F, G, Sigma, HIGHEST_N);
Data1P = preProcessPLDAData(factorModel, Data1);
Data2P = preProcessPLDAData(factorModel, Data2);
根据PLDA模型,我们知道样本
属于同一个人的概率为:
那么如上图所示,M0模型时,样本属于不同的人,那么样本在M0模型下的概率为:
那么在M1模型的情况下,样本属于同一个人,它的概率为:
那么下面代码就是计算样本符合M1模型的概率和符合M0模型的概率之比(取对数,那么乘变为加,除变为减)
logLikeNoMatch = getLogLikeMatchPLDA(factorModel, Data1P)...
+ getLogLikeMatchPLDA(factorModel, Data2P);
logLikeMatch = getLogLikeMatchPLDA(factorModel, [Data1P, Data2P]);
LogLikeRatio = logLikeMatch - logLikeNoMatch;
getLogLikeMatchPLDA
先看这个计算概率的程序。我们知道,对概率值取对数我们可以得到: