用特徵臉及SVM進行人臉辨識實例

https://scikit-learn.org/stable/auto_examples/applications/plot_face_recognition.html

本範例所使用的資料庫主要採集於LFW人臉資料庫

http://vis-www.cs.umass.edu/lfw/lfw-funneled.tgz (233MB)

採取資料集中最具有代表性的人做預測,以下為預測結果:

(一)引入函式庫

引入函式庫如下: 1. time:計算時間 2. logging:具有除錯功能 3. matplotlib.pyplot:用來繪製影像 4. sklearn.model_selection import train_test_split:將資料集隨機分配成訓練集和測試集 5. sklearn.model_selection import GridSearchCV:搜索指定參數的估計值 6. sklearn.datasets import fetch_lfw_people:載入LFW人臉資料庫 7. sklearn.metrics import classification_report:建立文字報告,顯示主要的分類矩陣 8. sklearn.metrics import confusion_matrix:計算混淆矩陣以評估分類的準確性 9. sklearn.decomposition import PCA:進行主成分分析 10. sklearn.svm import SVC:載入用於分類的向量支持模型

(二)載入LFW人臉資料庫

將資料以numpy array形式存進lfw_people中, 其中min_faces_per_person=70指提取的數據集將僅保留具有至少70個不同圖片的人的圖片。

此範例中共有1288張影像,每張影像大小為62 x 47像素

將資料集隨機分配成訓練集和測試集

(三)對於人臉資料計算PCA

計算人臉資料集中的PCA(特徵臉),視為未標籤的資料:使用非監督式提取降維。

  • svd_solver='randomized':用Halko方法運行隨機SVD

  • whiten=True:將components向量乘以n_samples的平方根並除以奇異值,以確保具有不相關的輸出。

(四)訓練SVM分類模型

SVM模型有兩個非常重要的參數C與gamma。 C:懲罰係數,即對誤差的寬容度。c越高,說明越不能容忍出現誤差,容易過擬合。 gamma:選擇RBF函數作為kernel後,該函數自帶的一個參數。隱含地決定了數據映射到新的特徵空間後的分佈。

  • skernel='rbf':使用(高斯)徑向基函數

  • (五)對測試集中進行預測

使用y_pred = clf.predict(X_test_pca),對測試集進行預測。

(六)使用matplotlib對預測進行評估

Total Output:

(七)完整程式碼

Python source code:plot_face_recognition.py

https://scikit-learn.org/stable/_downloads/fcbed4be5eadd64ee8f4961f64b1904c/plot_face_recognition.py

Last updated