【筆記】特征臉(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張圖片,這樣的數據庫就比較靠譜了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM