基於PCA(主成分分析)的人臉識別
程式碼下載:基於PCA(主成分分析)的人臉識別
人臉識別是一個有監督學習過程,首先利用訓練集構造一個人臉模型,然後將測試集與訓練集進行匹配,找到與之對應的訓練集頭像。最容易的方式是直接利用歐式距離計算測試集的每一幅影象與訓練集的每一幅影象的距離,然後選擇距離最近的影象作為識別的結果。這種直接計算距離的方式直觀,但是有一個非常大的缺陷—計算量太大。如果每幅影象大小為100*100,訓練集大小1000,則識別測試集中的一幅影象就需要1000*100*100的計算量,當測試集很大時,識別速度非常緩慢。
解決上述問題的一個途徑是對影象進行降維,通過只保留某些關鍵畫素可以使識別速度大大提升。降維的一個方法即是PCA(主成分分析),在此我們介紹通過PCA進行人臉識別的步驟。
1 讀取訓練集影象資料
讀取測試集目錄下指定個數的影象,然後將其儲存在一個二維陣列中。如果影象個數為m,影象長寬為i、j,則我們建立一個二維陣列A[m][i*j=n]用來儲存影象資料。陣列的每一行表示一個影象的所有畫素資訊,每一列表示一個隨機變數,也即不同影象同一位置的畫素資訊,降維也即用更少的列來代表影象。
2 每列減去均值
將步驟一的每列減去該列的均值,這樣每列的資料均值為0。在利用matlab的函式princomp執行PCA的過程中,princomp會首先將每一列減去該列均值,不用我們自己執行。
3 計算協方差矩陣
協方差矩陣表示不同隨機變數之間的相互關係,影象中也即求任意兩個畫素之間的關係。如果兩個隨機變數的協方差為正或為負,表明兩個變數之間具有相關性,如果為零表示兩個變數不相關。通過計算協方差矩陣,我們就可以獲得不同畫素之間的關係。針對人臉識別,計算的協方差矩陣大小為n*n,其中n表示影象的畫素點個數。
4 計算協方差矩陣的特徵值和特徵向量
由於協方差矩陣是實對稱陣,所以可以求得其所有的特徵值和特徵向量,其共有n個特徵值和特徵向量。
5 選擇主成分
所謂主成分即是具有最大特徵值的特徵向量,所以我們需要將特徵向量按照特徵值由大到小排序,然後根據精度要求選擇不同數量的特徵向量,例如我們選擇了前p個特徵向量,通常p遠小於n(在我們的人臉識別實驗中,為了達到95%的精度,p只有72,而n為120*140=17040)。
6 將訓練集進行降維
此步驟將原始的訓練集進行降維變換,原始的影象資料是m*n的矩陣,只包含主成分的特徵向量構成一個n*p的矩陣(每一列都是一個特徵向量)。將兩個矩陣相乘,我們即可獲得降維之後的影象矩陣m*p,這個矩陣遠小於原始的影象資料。
7 將測試集進行降維
同步驟6相似,讀取所有的測試集影象,然後對其也進行降維操作。如果測試集有M幅影象,則降維後的矩陣為M*p。
8 人臉識別
該步驟為人臉識別的最後一步,用來對測試集進行識別,並計算識別準確率。該步驟有一個限制,測試集中的頭像必須包含在訓練集中,否則得出的結果將沒有意義(這也就是程式碼一開始要求訓練集大於測試集的目的)。識別的方法和最初的影象匹配方法類似:將測試集中的每一幅降維影象與降維的訓練集進行匹配,然後將其分類到距離最小的訓練集頭像中,如果兩個頭像表示一個人,表示識別成功,否則表示識別失敗。與原始的匹配相比,由於對影象進行了降維,所以匹配速度大大提升,在我們的實驗中速度提升了200以上(120*142/72)。
相關文章
- 【基於PCA的人臉識別演算法】從QR分解到PCA,再到人臉識別PCA演算法
- 主成分分析(PCA)PCA
- 聊聊基於Alink庫的主成分分析(PCA)PCA
- PCA主成分分析(上)PCA
- 主成分分析(PCA)簡介PCA
- 主成分分析(PCA)原理詳解PCA
- 主成分分析(PCA)原理總結PCA
- 主成分分析(PCA) C++ 實現PCAC++
- 【機器學習】--主成分分析PCA降維從初識到應用機器學習PCA
- 用scikit-learn學習主成分分析(PCA)PCA
- 主成分分析(PCA)Python程式碼實現PCAPython
- 演算法金 | 再見,PCA 主成分分析!演算法PCA
- 機器學習_用PCA主成分分析給資料降維機器學習PCA
- 基於DNN的人臉識別中的反欺騙機制DNN
- 帶你玩轉OpenHarmony AI:基於Seetaface2的人臉識別AI
- 基於深度神經網路的人臉識別相關問題神經網路
- 運用sklearn進行主成分分析(PCA)程式碼實現PCA
- 基於深度學習的人臉識別系統系列(Caffe+OpenCV+Dlib)——【六】設計人臉識別的識別類深度學習OpenCV
- 【數學】主成分分析(PCA)的詳細深度推導過程PCA
- 基於卷積神經網路的人臉表情識別應用--AR川劇變臉(一)卷積神經網路
- 基於卷積神經網路和tensorflow實現的人臉識別卷積神經網路
- SAP官方提供的人臉識別APIAPI
- 手把手 | 用StackOverflow訪問資料實現主成分分析(PCA)PCA
- 基於深度學習的人臉性別識別系統(含UI介面,Python程式碼)深度學習UIPython
- 知物由學 | 基於DNN的人臉識別中的反欺騙機制DNN
- 一個簡單的人臉識別庫
- 特徵向量/特徵值/協方差矩陣/相關/正交/獨立/主成分分析/PCA/特徵矩陣PCA
- OpenCV3.3中主成分分析(Principal Components Analysis, PCA)介面簡介及使用OpenCVPCA
- 基於Javascript的人臉探測技術JavaScript
- opencv——PCA(主要成分分析)數學原理推導OpenCVPCA
- 利用opencv 做一個簡單的人臉識別OpenCV
- 主成分分析推導
- 主成分與因子分析
- 基於Emgu CV的人臉檢測程式碼
- 如何理解並實現一個簡單的人臉識別演算法(下):人臉識別演算法
- 基於Android平臺實現人臉識別Android
- 直播美顏SDK的人臉識別技術進階知識
- 一種基於隨機動作指令的人臉活體檢測技術,有效避免人臉識別系統被破解隨機