之前的 “机器视觉入职培训” 文章都是基于一些图像最基本、最底层的操作学习,接下来通过几个小型的项目来做点更加实际的栗子,通过机器视觉去识别物体,对物体进行分类。
这里需要学习到机器视觉中的图像特诊检测算法,例如经典的有PCA、HOG、LBP等,在接下来的文章中详细介绍这些算法,希望对新入职的小伙伴有更好的帮助。
降维目的
- 减小预测变量的个数,使数据规模更小
- 确保降维后的数据尽可能相互独立
- 提供一个更符合人类思维方式的数据来对原数据进行解析
降维的方式有很多种,如LDA(Latent Dirichlet Allocation),非负矩阵分解、奇异矩阵分解等众多矩阵分解的方法都可以对数据进行降维。而PCA是最常用、计算过程简单、通用性强的降维算法。PCA能够对高位数据进行降维后去除了噪声(投影,后面会提到),发现数据中的模式。因此本次的人脸主特征提取使用了PCA方法。
PCA计算过程
1. 特征中心化
去均值化过程,即每一维的数据都减去该维的均值。这里的“维”指的就是一个特征(属性),变换之后每一维的均值都变成了0。假设一列为一个特征维度,那么就是把每列的每个数据都减去该列的均值。
2. 求特征协方差矩阵C
协方差绝对值越大,两者对彼此的影响越大,反之越小。如果数据是3维,那么协方差矩阵是:
3. 计算协方差矩阵C的特征值S和特征向量V
C=V∗S∗V−1 ,其中S为特征值,V为特征向量。
4. 选取 k 个特征值及其对应的特征向量
将特征值按照从大到小的顺序排序,选择其中最大的k个特征值,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。
5. 将样本点投影到k个特征向量上
假设样例数为 m ,特征数为
假设我们有一个 4×2 的矩阵 A 。令
PCA实际计算问题
在实际计算当中,第一步把特征值减去所在特征列的减均值后,应该还要对特征做方差归一化。比如一个特征是人脸的眼睛值是(0到100),一个是鼻子的特征(2到6),显然第二个的方差比第一个小。因此,如果样本特征中存在这种情况(一般都会存在特征值权值不统一的情况),那么在第一步去中心化后,求每个特征的标准差 σ ,然后对每个样例在该特征下的数据除以其特征的标准差 σ 。因此在求协方差之前的步骤是:
- 求得均值:使得 μ=1m−1∑mi=1xi
- 去中心化:对每个 xi 替换成