PLDA源代码分析(2)-PLDA_Verification

本文详细分析了PLDA(Probabilistic Linear Discriminant Analysis)的源代码,重点探讨了PLDA_Verification主程序、getLogLikeMatchPLDA函数以及预处理程序preProcessPLDAModel和preProcessPLDAData。通过矩阵逆定理和概率计算,解释了如何计算样本属于同一个人的概率,并介绍了PLDA在识别任务中的应用。
摘要由CSDN通过智能技术生成

说明:此处的LDA对应于Linear Discriminant Analysis,PLDA即对应于Probabilistic LDA. 该代码对应的文章为ICCV2007 paper Probabilistic Linear Discriminant Analysis for Inferences About Identity,源代码可以从 Prince Vision Lab处下载。虽然源码虽然不长结构比较清楚,但是运用到了一定的矩阵知识,所以对源码分析稍作分析。

1、PLDA 训练(Training)源码分析

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

先看这个计算概率的程序。我们知道,对概率值取对数我们可以得到:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值