本文共 1791 字,大约阅读时间需要 5 分钟。
问题1: 什么是特征脸?
特征脸(Eigenface)是指用于机器视觉领域中的人脸识别问题的一组特征向量,就是我们以前讲过的由前N个主成分组成的。
每一个特征脸代表了一个主成分。 如下图:X代表由m个人组成,提前脸上n个特征的矩阵。W(k)表示前K的主成分,每一行可以理解代表人脸的一个特征。所以叫特征脸。
问题2:如何获取人脸的数据库?
我们采用LFW人脸数据库,LFW (Labeled Faces in the Wild) 人脸数据库是由美国马萨诸塞州立大学阿默斯特分校计算机视觉实验室整理完成的数据库,主要用来研究非受限情况下的人脸识别问题。 详细可以点击了解。我们利用sklearn中的方法进行加载。
from sklearn.datasets import fetch_lfw_peoplefaces = fetch_lfw_people()print faces.keys()print faces.images.shapeprint faces.data.shape
['images', 'data', 'target_names', 'DESCR', 'target']
(13233L, 62L, 47L) (13233L, 2914L)
上面可以看出是13233张人脸,分别是62 * 47像素组成,构成2914个特征。
问题3: 如何可以绘制出这些人脸?
由于人脸太多,无法所有绘制,我们可以随机选择12张人脸,然后进行绘制。
# 随机打断样本X的顺序indexs = np.random.permutation(len(X))# 获取前12张脸我们进行绘制example_faces = X[indexs][:12, :]# 利用matplotlib中的方法进行绘制def plot_faces(faces): fig, axes = plt.subplots(2, 6, figsize=(5, 5), subplot_kw={'xticks': [], 'yticks': []}, gridspec_kw=dict(hspace=0.1, wspace=0.1)) for i, ax in enumerate(axes.flat): ax.imshow(faces[i].reshape(62, 47), cmap='bone') plt.show()plot_faces(example_faces)
效果如下:
想知道人名,可以通过代码获取。
faces.target_names[faces.target[indexs][:12]]
他们分别是['David Wells' 'Gian Marco' 'Gloria Macapagal Arroyo' 'George W Bush' 'Richard Branson' 'Flavia Delaroli' 'George W Bush' 'Phil Vassar' 'Kjell Magne Bondevik' 'George W Bush' 'Martha Beatriz Roque' 'Sylvester Stallone']
问题4:如何获取特征脸?
刚才我们解释了,特征脸其实就是前N个主成分组成的特征向量。那么现在我们求出所有特征向量,然后绘制一下前36个特征脸,看看到底是什么。
from sklearn.decomposition import PCApca = PCA(svd_solver='randomized')pca.fit(X)print pca.components_.shape# (2914L, 2914L)plot_faces(pca.components_[:36, :])
这是前36个特征脸:
可以简单看出来,排在前面的脸比较笼统,越往后图像越清晰。我们求出这些特征脸,一方面,可以直观看到在人脸识别领域是如何逐步地识别人脸的, 另一方面,其实每一个人脸都是这个特征脸的线性组合,特征脸是根据重要程度依次排列在这里。
类似文章:
要是你在西安,感兴趣一起学习AIOPS,欢迎加入QQ群 860794445
转载地址:http://ehkai.baihongyu.com/