KL变换生成人脸特征图

       近来课程上做了一个PCA生成特征脸的小工程,刚好实验室科研做不下去了就放松下写个博客梳理下吧,由于是用了KL变换,所以撒呼呼地去找背景知识科普时翻查了些KL散度的知识点,后来发现好像和KL变换关系不大orz(小声BB,也许是我太水,看不出二者关联2333)

KL散度

  • K-L散度,是一种量化两种概率分布P和Q之间差异的方式,又叫相对熵。在概率学和统计学上,我们经常会使用一种更简单的、近似的分布来替代观察数据太复杂的分布。K-L散度能帮助我们度量使用一个分布来近似另一个分布时所损失的信息量。”

  • 交叉熵

  • KL散度(相对熵)

  • KL散度和交叉熵的关系:DKL(p||q) = H(p, q) - H(p)

    在神经网络的训练阶段,用交叉熵作为 cost function,而不选用KL散度作为 cost function的原因是,H(p)是常数值,所以minimizing the cross-entropy between the data distribution and the model distribution gives the same results as minimizing KL-divergence.

KL变换

  • PCA算法(KL变换)
  • KL变换应用 - 人脸识别
  1. 把每一幅人脸图片列化,假设一共M张人脸图片,每张人脸N维,最后组成,N x M维的矩阵 F
  2. 估计F协方差矩阵C,并计算其特征值特征向量。
    (C为半正定矩阵,维数不大于图像数,对应不同特征值的特征向量正交,特征脸)
  3. 选择对应少量最大特征值的特征向量组成特征脸空间
  4. 每张脸映射为特征脸空间的点,以其坐标作为特征向量。
  5. 采用模式识别方法,进行分类识别。(如欧式距离)
  • 生成人脸图片数据集的 top k 特征脸空间的matlab代码片段示例
  %% PCA函数
  % params: data: N * M 维的原始图片集矩阵F;
  % img_num: 人脸图片的数目;
  % eigenface: 用于存储 topk 特征脸空间 k * 112 * 92
  function eigenface = pca_face(data, img_num, eigenface)
      data_mean = data - mean(data, 2); % 每一行进行零均值化
      C = 1 / img_num * data_mean * data_mean.'; % 求得协方差矩阵
      [V, D] = eig(C); % 求特征值和特征向量
      [d,ind] = sort(diag(D), 'descend'); % 将特征值按降序排序
      Vs = V(:,ind); % 前k列为前k大的特征值所对应的特征向量
      for i = 1 : size(eigenface, 3)
          eigenface(:,:,i) = reshape(Vs(:, i), 112, 92); % 显示的特征脸图片尺寸为 112 * 92
      end
  end

附上一张生成的 top8 特征脸空间图例:

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值