锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

基于 PCA 的人脸识别系统及人脸姿态分析

时间:2023-08-04 07:37:00 1004tk2系列圆形连接器

文章目录

  • 1 PCA
    • 1.1 原理
    • 1.2 算法流程
      • 1.2.1 零均值化
      • 1.2.2 计算协方差矩阵
      • 1.2.3 特征值和特征向量
      • 1.2.4 降维得到 K 维特征
      • 1.2.5 PCA 的优缺点
  • 2 Python 实现 PCA
  • 3 基于 PCA 的人脸识别
    • 3.1 ORL 数据集
      • 3.1.1 数据读取和数据处理
      • 3.1.2 数据分组
      • 3.1.3 使用 PCA 特征提取
      • 3.1.4 人脸识别
      • 3.1.5 人脸识别的 GUI 界面
      • 3.1.6 实验结果
      • 3.1.7 全部代码
    • 3.2 Yale 数据集
      • 3.2.1 数据读取和数据处理
      • 3.2.2 数据分组
      • 3.2.3 使用 PCA 进行特征提取
      • 3.2.4 人脸识别和可视化
      • 3.2.5 实验结果
      • 3.2.6 全部代码
    • 3.3 UMIST 数据集
      • 3.3.1 数据读取和数据处理
      • 3.3.2 数据分组
      • 3.3.3 使用 PCA 特征提取
      • 3.3.4 人脸识别和可视化
      • 3.3.5 实验结果
      • 3.3.6 全部代码
  • 4 基于 MediaPipe 的姿态分析
    • 4.1 MediaPipe Solutions
      • 4.1.1 ML 管道
      • 4.1.2 姿势估计质量
      • 4.1.3 人 / 姿势检测模型 (BlazePose 检测器)
      • 4.1.4 Pose Landmark 模型 (BlazePose GHUM 3D)
      • 4.1.5 API
      • 4.1.6 示例
    • 4.2 ORL 数据集
      • 4.2.1 读取和处理数据
      • 4.2.2 姿态估计
      • 4.2.3 全部代码
    • 4.3 Yale 数据集
    • 4.4 UMIST 数据集
    • 4.5 结果分析
  • 5 基于 KNN 的人脸识别
    • 5.1 KNN
    • 5.2 ORL 数据集
    • 5.3 Yale 数据集
    • 5.4 UMIST 数据集
    • 5.5 KNN 的优缺点
    • 5.4 UMIST 数据集
    • 5.5 KNN 的优缺点

1 PCA

??在解决实际问题的时候,多变量问题是经常会遇到的,变量太多,无疑会增加分析问题的难度与复杂性。同时,在许多实际问题中,多个变量有一定的相关性。因此,在研究各变量之间关系的基础上, 用更少的新变量代替更多的原始变量,并尽可能多地保留更多的原始变量所反映的信息?事实上,这种想法是可以实现的。

1.1 原理

??PCA(Principal Components Analysis,,主要成分分析)是一种统计分析方法,将多个变量化为少数综合指标。从数学的角度来看,这是一种降维处理技术。 以下示例说明其原理,并添加以下数据:

img

以上数据可视为椭圆形,椭圆有长轴和短轴。 在短轴方向上, 在极端情况下,在极端情况下,如果短轴稍微退化, 这些点的变化只能在长轴的方向上解释。这样,从二维到一维的降维自然就完成了。 从数据波动的角度来看,短轴上数据的方差较小,因此轴上的信息属于次信息;长轴上数据的方差较大,因此轴上的信息属于主信息。了解 PCA 在基本原理之后,我们必须考虑一个问题,PCA 优化的目标是什么?请看下图:

我们将上图中的点投影到两个超平面上,分别得到不同超平面的方差:0.045,0.因此,所有样本点都投影到方差 0.206 的超平面能在实现降维的目标且保留更多的信息。因此 PCA 要尽可能分离所有样本的投影,即找到样本投影后方差最大的超平面来降低维度。我们称上述降维标准为 最大可分性;同时,样本点击超平面的距离足够近,即下图中所有红线(即投影造成的损失)加起来最小,即保留更多信息。我们称这个标准为 最近重构性

1.2 算法流程

??PCA 算法流程的总体描述如下:


输入:样本集 D = x 1 , x 2 , ? ? , x m \boldsymbol{D = {x_1,x_2, \cdots,x_m}} D=x1,x2,,xm; 低维空间维数 k \boldsymbol{k} k;

过程:

1:对所有样本进行零均值化: x i ← x i − 1 m ∑ i = 1 m x i \boldsymbol{x_i\leftarrow x_i - \frac{1}{m}\sum_{i=1}^{m}x_i} xixim1i=1mxi;

2:计算样本的协方差矩阵 X X T \boldsymbol{XX^T} XXT;

3:对协方差矩阵 X X T \boldsymbol{XX^T} XXT 做特征值分解;

4:取最大的 k \boldsymbol{k} k 个的特征值所对应的特征向量 w 1 , w 2 , ⋯   , w k \boldsymbol{w_1, w_2, \cdots, w_{k}} w1,w2,,wk;

输出:投影矩阵 W = ( w 1 , w 2 , ⋯   , w k ) \boldsymbol{W = (w_1, w_2, \cdots, w_{k})} W=(w1,w2,,wk)


下面对每个步骤进行详细分析。

1.2.1 零均值化

  此步骤的目的是标准化输入数据集,使数据成比例缩小。更确切地说,在使用 PCA 之前必须标准化数据的原因是 PCA 方法对初始变量的方差非常敏感。也就是说,如果初始变量的范围之间存在较大差异,那么范围较大的变量占的比重较大,和较小的变量相比(例如,范围介于 0 和 100 之间的变量较 0 到 1 之间的变量会占较大比重),这将导致主成分的偏差。通过将数据转换为同样的比例可以防止这个问题。在实现过程中,我们的操作区别于标准的标准化,我们只将每个样本减去它们的均值。

1.2.2 计算协方差矩阵

  此步骤的目的是了解输入数据集的变量相对于彼此平均值变化,换句话说,查看它们是否存在关系。因为有时候变量由于高度相关,这样就会包含冗余信息。因此,为了识别变量的相关性,我们计算协方差矩阵。下面以二维矩阵为例:
C = [ C o v ( x , x ) C o v ( x , y ) C o v ( x , z ) C o v ( y , x ) C o v ( y , y ) C o v ( y , z ) C o v ( z , x ) C o v ( z , y ) C o v ( z , z ) ] C= \begin{bmatrix} Cov(x,x)&Cov(x,y)&Cov(x, z)\\ Cov(y,x)&Cov(y, y)&Cov(y,z)\\ Cov(z,x)&Cov(z, y)&Cov(z,z) \end{bmatrix} C= Cov(x,x)Cov(y,x)Cov(z,x)Cov(x,y)Cov(y,y)Cov(z,y)Cov(x,z)Cov(y,z)Cov(z,z)
上述矩阵中,对角线上分别是特征 x , y , z x, y,z x,y,z 的方差,非对角线上是协方差。由于协方差是可交换的 C o v ( a , b ) = C o v ( b , a ) Cov(a, b) = Cov(b,a) Cov(a,b)=Cov(b,a),协方差矩阵关于主对角线是对称的,这意味着上三角部分和下三角部分相等。协方差矩阵可以告诉我们变量之间的关系,总结有如下三点:

  • 如果协方差为正则:两个变量一起增加或减少(正相关);
  • 如果协方差为负则:两个变量其中一个增加,另一个减少(负相关);
  • 协方差绝对值越大,两者对彼此的影响越大,反之越小。

1.2.3 特征值和特征向量

  求协方差矩阵 C C C 的特征值 λ \lambda λ 和相对应的特征向量 u u u (每一个特征值对应一个特征向量):
C u = λ u Cu = \lambda u Cu=λu
特征值 λ \lambda λ 会有 N N N 个,每一个 λ \lambda λ 对应一个特征向量 u u u,将特征值 λ \lambda λ 按照从大到小的顺序排序,选择最大的前 K K K 个,并将其相对应的 K K K 个特征向量拿出来,我们会得到一组 { ( λ 1 , u 1 ) , ( λ 2 , u 2 ) , ⋯   , ( λ k , u k ) } \{(\lambda_1,u_1),(\lambda_2,u_2),\cdots,(\lambda_k, u_k)\} {(λ1,u1),(λ2,u2),,(λk,uk)}。为什么只取特征值较大的特征向量,因为较大特征值对应的特征向量保留了原始数据的大部分信息吗,也即方差较大,可作为数据的主成分。

1.2.4 降维得到 K 维特征

  选取最大的前 K K K 个特征值和相对应的特征向量,并进行投影的过程,就是降维的过程。对于每个样本 X i X_i Xi,原始的特征是 ( x 1 , x 2 , ⋯   , x m ) (x_1, x_2, \cdots,x_m) (x1,x2,,xm),投影之后的新特征是 ( y 1 , y 2 , ⋯   , y k ) (y_1,y_2,\cdots,y_k) (y1,y2,,yk),计算过程如下:
[ y 1 i y 2 i ⋮ y k i ] = [ u 1 T ⋅ ( x 1 i , x 2 i , ⋯   , x m i ) T u 2 T ⋅ ( x 1 i , x 2 i , ⋯   , x m i ) T ⋮ u k T ⋅ ( x 1 i , x 2 i , ⋯   , x m i ) T ] \begin{bmatrix} y_1^i\\ y_2^i\\ \vdots \\ y_k^i\\ \end{bmatrix} = \begin{bmatrix} u^T_1\cdot(x_1^i, x_2^i, \cdots,x_m^i)^T\\ u^T_2\cdot(x_1^i, x_2^i, \cdots,x_m^i)^T\\ \vdots\\ u^T_k\cdot(x_1^i, x_2^i, \cdots,x_m^i)^T \end{bmatrix} y1iy2iyki = u1T(x1i,x2i,,xmi)Tu2T(x1i,x2i,,xm

相关文章