zoukankan      html  css  js  c++  java
  • 【笔记】特征脸(PCA在人脸识别领域的应用)

    人脸识别与特征脸(简单介绍)

    什么是特征脸

    特征脸(Eigenface)是指用于机器视觉领域中的人脸识别问题的一组特征向量,该方法被认为是第一种有效的人脸识别方法。

    PCA的具体实现思想见
    【笔记】主成分分析法PCA的原理及计算

    (在notebook中)

    我们需要加载相应的方法fetch_lfw_people,其为一个人脸识别数据库,加载以后,就可以直接调用了,头一次使用要下载,具体情况见另一篇博客使用sklearn中的fetch_mldata的错误情况以及可能可行的解决方法,其中有说明

      from sklearn.datasets import fetch_lfw_people
      faces = fetch_lfw_people()
    

    我们可以看到其中相应的内容

      faces.keys()
    

    结果为

    其中faces.data.shape
    结果为

    对应的faces.images.shape
    结果为(第一个为样本总数,对于每个样本都是62*47的图像)

    然后我们随机出36张脸,首先对样本进行一个随机的排列,然后将随机的排列放入X中,然后取出X中前36张脸,然后看一下对应的数据

      random_indexes = np.random.permutation(len(faces.data))
      X = faces.data[random_indexes]
    
      example_faces = X[:36,:]
      example_faces.shape
    

    结果为

    绘制函数:

      def plot_faces(faces):
    
          fig,axes = plt.subplots(6,6,figsize=(10,10),
                             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来查看包含的人名
    结果为

    具体的实现特征脸

    这里使用PCA的另一种构建方式svd_solver参数,让其等于randomized,希望使用随机的方式求解PCA(对所有的数据),这样来实例化pca,然后进行fit

      %%time
      from sklearn.decomposition import PCA
      pca = PCA(svd_solver='randomized')
      pca.fit(X)
    

    结果为

    使用pca.components_.shape来看一下有多少个维度及主成分
    结果为

    绘制图像,注意,图像越靠前,越能反映整个样本的总特征

      plot_faces(pca.components_[:36,:])
    

    图像为(这些就被称为特征脸)

    因为有很多的图片是一个人一张,而有一些是一个人有很多张,这样出来的数据有的时候是不靠谱的,那么我们就可以获得样本数比较多的人的图片来增加准确度,我们可以

      faces2 = fetch_lfw_people(min_faces_per_person=60)
    

    通过faces2.data.shape,可以发现这样就会少很多

    使用len(faces2.target_names)来看一下一共多少人名
    结果为

    这样faces2中就只有8个人,每个人不少于60张图片,这样的数据库就比较靠谱了

  • 相关阅读:
    2019.04.19 坦克大战
    2019.04.18 异常和模块
    2019.04.17 面向对象编程篇207
    fork操作时的copy-on-write策略
    Redis阻塞原因
    Redis持久化-fork操作
    Redis持久化-AOF重写
    Redis持久化-aof
    Redis持久化
    Shopify给左右两边布局的banner图加链接,链接失败
  • 原文地址:https://www.cnblogs.com/jokingremarks/p/14302686.html
Copyright © 2011-2022 走看看