本次介绍一种传统的人脸认证模型:PLDA。 该模型最早出现在《2007 ICCV:Probabilistic Linear Discriminant Analysis for Inferences About Identity》,经过几年发展PLDA出现了很多改进版本,但主要思想基本一致。
因此,本文主要结合这篇文章和《2013 TPAMI:A Scalable Formulation of Probabilistic Linear Discriminant Analysis: Applied to Face Recognition》来进行讲解。
PLDA原始版本的代码可以从这里下载到 Prince Vision Lab
TPAMI改进的代码可以从这里找到 github:bioidiap
另一方面,目前的人脸识别所用的特征基本都是深度学习学到的特征,此时大家方法不一样的地方很多就在于如何利用这些特征来完成最后的人脸识别(或认证)。主流的方法有Metric learning方法、DeepID3所使用的Joint Bayes方法等等,但在我的实验中发现,Joint Bayes 方法远没有论文中描述的那样强大,甚至不如PLDA。不知道是作者有所保留还是我们都没能理解透彻。
PLDA或者称之为 Probabilistic LDA,是一种生成式模型,主要考虑解决人脸识别中光照姿态等影响。
首先,定义训练数据 \(x_{ij}\) 为第 \(i\) 个人的第 \(j\) 张图片(特征),然后PLDA定义 \(x_{ij}\) 是按照下式生成的:
———————————————————————————————————————————————
\(\displaystyle x_{ij}=\mu +Fh_i+Gw_{ij}+\epsilon_{ij}\)
———————————————————————————————————————————————
上面的model包含两部分:
一部分是信号成分 \(\mu +Fh_i\) ,该项只与人物身份 \(i\) 有关,与具体的图片 \(j\) 无关,该项描述了个体之间的差异;
一部分是噪声成分 \(Gw_{ij}+\epsilon_{ij}\) ,同一个人的每张照片都不一样,该项描述了个体内部的差异。
另外,\(\mu\) 表示全体训练数据的均值; \(F\) 可以看做是身份空间,包含了可以用来表示各种身份的基底; \(h_i\) 就可以看做是一个人的身份(或者是人物在身份空间中的位置);\(G\) 可以看做是误差空间,包含了可以用来表示同一身份不同变化的基底;\(w_{ij}\) 表示的是在该空间中的位置; 最后的残留噪声项 \(\epsilon_{ij}\) 用来表示尚未解释的东西,该项为零均高斯分布,方差为 \(\Sigma
\)
大家可以通过下图来帮助理解参数 \(\theta = [\mu,F,G,\Sigma ] \)
由上图可以很容易看出,第一行反映了不同的 \(\mu +Fh_i\) 表示了不同人;第二行反映了不同的\(Gw_{ij}+\epsilon_{ij}\)表示了同一人的不同照片 。
更加正式的,PLDA模型可以用下面的条件概率来表示:
上式当中 \(g_a[b,C]\) 表示均值为 \(b\) ,方差为 \(C\) 的高斯分布。式(3)和(4)为隐含变量 \(h_i\) 和 \(w_{ij}\) 预先定义一个简单的先验概率。
模型训练的目标就是输入一堆数据 \(x_{ij}\) ,输出可以最大程度上表示该数据集的高斯分布的参数 \(\theta = [\mu,F,G,\Sigma] \)。
如果知道隐含变量 \(h_i\) 和 \(w_{ij}\) ,那么我们很容易求得 \(\theta = [\mu,F,G,\Sigma] \),反之亦然。这种鸡生蛋、蛋生鸡的问题最好的解决办法就是EM算法。
下面按照给出的源代码来说明训练流程:
(1)均值处理:
计算所有训练数据 \(X_{all}\) 的均值 \(\mu\) , 然后从训练数据中减去该均值 \(X_{all}=X_{all}-\mu \) 。
然后,假如训练数据中共有 \(N\) 个人,则再计算 \(N\) 个人的均值 \(N_{\mu}\)。
(2)初始化:
初始化之前,我们需要说明几个配置参数:
特征维度记为 \(D\) ,即 \(\mu\) 是 \(D\times 1\) 维的, \(N_\mu\) 是 \(D\times N\) 维的。 身份空间维度,需要我们预先指定,记为 \(N_F\) ,即 \(F\) 是 \(D\times N_F\) 维的,同时 \(h_i\) 是 \(N_F\times 1\) 维的。 噪声空间维度,需同样要预先指定,记为 \(N_G\) ,即 \(G\) 是 \(D\times N_G\) 维的,同时 \(w_{ij}\) 是 \(N_G\times 1\) 维的。
\(G\) 使用随机初始化;
\(F\) 初始化:对每个人的均值数据 \(N_{\mu}\) 进行PCA降维,降到 \(N_F\) 维,赋值给 \(F\)
\(\Sigma\) 初始化为 \(D\times 1\) 维的常量
(3)EM迭代优化:
实际训练的时候,因为都是矩阵操作,因此我们先将上述模型写成矩阵形式:
E-Step: 计算隐含变量 \(h\) 的期望
M-Step: 更新参数 \(\theta = [\mu,F,G,\Sigma] \)
首先对模型进行重新符号表示:
更新的时候按照下述公式:
其中,\(Diag\) 表示只保留对角元素。
对于人脸认证来说,就是下面的模型。\(M_0\) 表示图片 \(x_1\) 和 \(x_p\)不属于同一个人。
因此,实际我们计算\(x_1\) 和 \(x_p\)的相似度时,采用下面的减法公式:
\(S=\ln P(x_{1, p}|M_1)-\ln P(x_{1, p}|M_0)\)
具体的计算过程和理论推导过程可以参看论文。
PS:理论推导证明确实太难,我也只是大概推了一下EM部分,主要用到的还是后验概率、条件概率、贝叶斯准则那些东西。