基于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的原理,請參考:PCA的數學原理

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387812.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387812.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387812.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從BMW Vision iNEXT 看寶馬如何進軍自動駕駛

安全很重要,空間也要很大,砍掉大量物理按鍵,內飾材料要環保,還要提供自動和主動兩套駕駛方案。這些描述僅是BMW Vision iNEXT(下稱Vision iNEXT)概念車的設計之冰山一角。 一款概念車當然無法完全代表未來…

CSS浮動(二)---Float

重新認識float 2.1. 誤解和“誤用” 既然提到“誤用”,各位看官就此想想,自己平日是怎么使用float的?另外,既然“誤用”加了引號,就說明這樣的使用并不是真正的誤用,而是誤打誤撞使用之后,帶…

Hadoop0.20.2版本在Ubuntu下安裝和配置

1、安裝JDK   (1)下載安裝JDK:確保計算機聯網之后命令行輸入下面命令安裝JDK   sudo apt-get install sun-java6-jdk   (2)配置計算機Java環境:打開/etc/profile,在文件最后輸入下面內容 …

云原生生態周報 Vol. 2

業界要聞 Kubernetes External Secrets 近日,世界上最大的域名托管公司 Godaddy公司,正式宣布并詳細解讀了其開源的K8s外部 Secrets 管理項目: Kubernetes External Secrets,簡稱KES。這個項目定義了ExternalSecrets API&#xff…

centos 7新機使用前操作

關閉防火墻 systemctl stop firewalld(停服務) systemctl status firewalld(看狀態) systemctl disable firewalld.service (永久關閉) selinux getenforce(查狀態) vi /etc/selinux…

ubuntu10.04+hadoop0.20.2平臺配置(完全分布式模式)

配置環境及有關工具:ubuntu10.04 、hadoop0.20.2 、 jdk1.6.0_29 我們的機器有三臺,一臺當作namenode、兩臺當作datanode: namenode:IP:192.168.0.25、機器名:kiddenzj (這里的機器名要注意:機…

成佛、遠不止渡滄海

地之及東南,有一海,稱為“滄海”。滄海對面,就是仙家佛地。凡是能渡過滄海到達彼岸的人,就能立地成佛,修成正果。 于是,許許多多的人千里迢迢趕來,或乘帆船,或乘木筏,紛紛…

軟件架構演進

傳統架構到分布式架構詳解 軟件架構演進軟件架構的發展經歷了從單體架構、垂直架構、SOA架構到微服務架構的過程,博客里寫到了這四種架構的特點以及優缺點分析,個人學習之用,僅供參考! 1.1.1 單體架構 特點:1、所有的…

hadoop0.20.0第一個例子

這是Hadoop學習全程記錄第2篇,在這篇里我將介紹一下如何在Eclipse下寫第一個MapReduce程序。 新說明一下我的開發環境: 操作系統:在windows下使用wubi安裝了ubuntu 10.10 hadoop版本:hadoop-0.20.2.tar.gz Eclipse版本&…

IDEA 修改JavaWeb的訪問路徑

問題描述 對于我這個剛剛使用IDEA不久的新手來說,能夠正常運行就不錯了,不過到了后面,可能會覺得IDEA給你分配的默認訪問路徑很不順手,比如訪問的時候需要通過: http://localhost:8080/web_war_exploded/ 來訪問,對于web_w…

防撞庫基本要求

專用安全要求 口令要求 設計要求說明 要求 是否滿足 密碼長度至少 8位字符,密碼復雜性要求至少包含以下4種類別中的2種:大寫字母、小寫字母、數字、特殊符號 必選 滿足 系統應具備對口令強度檢測的能力,并對用戶進行提示(盡量不要…

odoo10 繼承(擴展)、模塊數據

一:繼承 在不改變底層對象的時候添加新的功能——這是通過繼承機制來實現的,作為在現有對象之上的修改層,這些修改可以發生在所有級別:模型,視圖和業務邏輯。不是直接修改現有模塊,而是創建一個新模塊以添加…

做一個vue的todolist列表

<template><div id"app"><input type"text" v-model"todo" ref"ip"/><button click"add()">新增</button><br/><br/><hr/><ul><li v-for"(item,key) in li…

hadoop+hive-0.10.0完全分布式安裝方法

hadoophive-0.10.0完全分布式安裝方法 1、jdk版本&#xff1a;jdk-7u60-linux-x64.tar.gz http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk7-downloads-1880260.html 2、hive版本&#xff1a;hive-0.10.0.tar.gz https://archive.apache.org/dist/hive/hive-0…

關于gitgithub的操作

先馬克&#xff0c;回頭細看&#xff0c;然后整理一下 https://linux.cn/article-4292-1.html轉載于:https://www.cnblogs.com/mengjie1001/p/10076530.html

一種解決 MacBook 里的 App Store 無法登錄的問題

剛剛買回來的 2018 款帶有 touchbar 的 MacBook Pro 15 inc 在用 App Store 安裝 app 時一直無法登錄成功&#xff08;網絡鏈接都是好的&#xff09;&#xff0c;導致軟件都無法更新&#xff0c;折騰了挺一會的。 后來發現是要退出設置里的 iCloud 登錄&#xff0c;然后重新登錄…

第二次沖刺

1、今日各個成員的問題 組員問題張晉誌對mui的API看得不是很懂&#xff0c;無法順利的使用袁慶杰基礎不牢,編寫困難周建峰eclipse沒法創建web項目&#xff0c;按照網上的方法&#xff0c;check for updates 和 install new software 之后也沒用許家燁給單一功能知道如何實現但項…

牌類游戲使用微服務重構筆記(八): 游戲網關服務器

網關服務器 所謂網關&#xff0c;其實就是維持玩家客戶端的連接&#xff0c;將玩家發的游戲請求轉發到具體后端服務的服務器&#xff0c;具有以下幾個功能點&#xff1a; 長期運行&#xff0c;必須具有較高的穩定性和性能對外開放&#xff0c;即客戶端需要知道網關的IP和端口&a…

配置獨立于系統的PYTHON環境

配置獨立于系統的PYTHON環境 python 當前用戶包 一種解決方案是在利用本機的python環境的基礎上&#xff0c;將python的包安裝在當前user的.local文件夾下 一共有兩種方式來實現pip的時候安裝到當前user 設置pip配置文件 pip.conf 一種是在~/.pip文件夾下的pip配置文件pip.conf…

好程序員技術教程分享JavaScript運動框架

好程序員技術教程分享JavaScript運動框架&#xff0c;有需要的朋友可以參考下。 JavaScript的運動&#xff0c;即讓某元素的某些屬性由一個值變到另一個值的過程。如讓div的width屬性由200px變到400px&#xff0c;opacity屬性由0.3變到1.0&#xff0c;就是一個運動過程。 實現運…