基于主成分分析与支持向量机的人脸识别
PCA co SVM
Idea:
由于本學期課程設置有計算機視覺與機器學習,故試圖將兩者結合,通過機器學習的一般算法而非深度學習的方式,給出自己設計的簡單的圖像分類問題的解決方案,即預先通過PCA(主成分分析)將圖像進行“降維”,提取有效的特征,利用SVMs(多分類支持向量機)進行模型的參數學習。
一般地,常用的機器學習算法對于數據處理和分析具有很強的優勢和很好的可解釋性,但對于圖像識別問題則并不如有著“暴力美學”的神經網絡學習,導致這一結果的原因是直觀的,機器學習模型往往模型參數更小,對于圖像這種大宗的數據,并不能很好地進行規律統計和描述。但是對于某些任務,比如人臉識別,許多數據集的人臉信息表達是十分稀疏的,一張人臉圖像中,含有許多的冗余信息(背景等),如果將這些冗余信息視作噪聲,我們可以采取一定的方法將其去除,從而保有最關鍵的一些特征,依據關鍵特征進行分類,或許可以為圖像這種大宗數據的分類問題找到突破口。
何為關鍵特征?基于SIFT,SURF等傳統的特征點提取算法提出的關鍵點適合做分類的特征點嗎?
SIFT等算法能夠提取豐富的穩定的興趣點,但是這些興趣點包括但不僅限于人臉部特征(容易受環境影響引入噪聲),并且這些特征點容易受光照,尺度變換(可以理解為遠近),旋轉等影響,并且由于特征點描述子非常龐大(對于SIFT一個特征點需要一個128維的特征向量描述),所以這些傳統提取算法提取的特征點并不能為這個問題帶來簡化。
換個思路,如果我們將每一個像素點視為一個特征,是否我們拋棄一些“噪聲點”,就可以簡化運算復雜度?這一思路是直觀且可解釋的。那么我們設計的重點就落腳到了如何設計一個原則進行“拋棄”。哪些點屬于“噪聲點”,而哪些像素點又屬于“關鍵特征”。
報告將試圖從PCA和SVM一般原理出發,解釋本聯合算法的合理性和實驗效果。
一主成分分析(principal component analysis PCA):
1.1 算法思想
主成分分析是一種非常常用的分析思路,即使我們預先沒有了解過這個概念,但是對于算法的思想我們卻無時無刻不在使用。比如我們參加一次party,會上我們認識了許多朋友,其中有兩個新朋友是郭德綱和吳某凡,假如說我們參加party的主人公是個臉盲(這意味著不能依靠顏值判斷)并且記憶力沒那么好(這意味著需要足夠少的特征進行判斷),他怎么快速的區分開這兩位新朋友呢?于是他搜集了兩人的一些特征如下,他迅速檢索著,發現其實對于發型和性別特征是無法將兩人分開的,但是單靠身高一項特征就可以完美將凡凡和剛剛分開。于是下一次再見面,他可以只對兩人的身高進行比較即可判斷出哪個可以讓他開懷大笑,哪個可以讓他快速充電。
回顧這一過程,大致上經歷了這樣一個過程,即“提取特征—去冗余特征—學習判別依據—實例驗證”,我們聚焦到去冗余這一關鍵步驟上,對于我們人類而言,是可以快速找到判別的依據(身高)的,但是對于機器而言,我們怎么描述這一判別依據的有效性呢,即怎么評判哪些特征是有用的呢?我們發現有一個直觀的表述,那就是兩者的差異性體現最為明顯的特征,往往可以將兩者進行很好的區分。眾所周知,在數學中,用方差來描述樣本數據的差異性。下面將從數學原理入手,解釋算法的合理性。
后補充:事實上,舉例只是為了說明我們可以采用差異性來作為有效特征的選擇依據,但是對于PCA算法,它不僅僅是挑選一部分有用的特征出來,而是利用一些現有特征做線性組合,構造出新的特征,作為判別依據,當然,我們希望這些新的特征維數足夠少以達到我們降維的目的。
1.2 算法原理
見PPT。
1.3 算法測試
1.3.1 二維數據降維到一維
首先生成50條樣本數據(分布在y = x附近),為了方便可視化,每個樣本具有兩個特征。試圖將這50個樣本數據在一個直線上表示,即達到了降維的目的。數據可視化如圖1-2,經過PCA降維,重新投影得到綠色的圈,如圖1-3。并用連線的方式指出了對應的投影關系,大致上“投影線”和“投影面“呈現一個正交關系。
1.3.2 人臉數據降維
我采用了FaceDB_orl人臉數據集進行試驗,該數據集發布于1994年,共有40個人的人臉數據,每個人有10張人臉圖像,包含了不同的光線條件,不同的表情(睜眼,閉眼),有輕微遮擋(戴眼鏡和不戴眼鏡),分辨率為92*112。此處我將每個人取5張圖存在矩陣中,方便讀取,其中五個人的圖像如圖1-4。對其進行PCA降維,其中生成的特征臉如圖1-5。
在第一次實驗中,我取了前30維特征來描述一張人臉,恢復后效果對比如圖1-6.依次增加保留的維數,可以從視覺上明顯感覺到細節還原的逼近程度。降維的程度越大(保留的維數越少),細節丟失越嚴重。
更換小數據集之后重新驗證,發現仍有此規律,因此使用PCA算法確實可以達到壓縮數據的目的,從而為進一步的分類學習節省運算提供了可能性。
二 多分類支持向量機( SVMs):
由于在之前的支持向量機筆記中已經較為詳細地將該算法的原理和推導等做了比較詳細的記錄,節省篇幅起見,在這里主要對支持向量機的求解方法SMO(第一次沒有將其視為重點,故在此處作為補充)以及幾種常用的基于支持向量機解決多分類問題的實現方法進行學習。
2.1 SMO算法思想
見代碼說明文檔。
2.2 SMO算法實現步驟
見代碼說明文檔。
2.3 1v all多分類支持向量機
訓練時依次把某個類別的樣本歸為一類,其他剩余的樣本歸為另一類,這樣k個類別的樣本就構造出了k個SVM。分類時將未知樣本分類為具有最大分類函數值的那類。
優點:分類速度快,分離超平面個數為數據類別數。缺點:存在分類重疊與不可分類現象。
分類重疊現象:在進行測試時,對于每一類label,svm模型都會選擇說測試數據屬于這一類,導致都想“爭搶”測試樣本;此類問題比較容易解決,選擇一個置信度最高的類即可(幾何間隔最大)。
不可分類現象:在進行測試時,對于每一類label,svm都會說不屬于自己這一類,導致都選擇“排斥”測試樣本,這導致多分類svm失效。
數據集偏斜現象:訓練集本身,對于每一類樣本數據個數不對等,相差較多的情況,這樣學得的超平面,為了保證間隔最小,會導致讓小數據類別更多地被誤分類,這是不難理解的,因為犧牲小部分樣例誤分類如果可以讓大數目樣本更多的被正確分類,這種犧牲對于損失函數下降是有意義的,從而導致在測試時本屬于小數目樣本的數據可能被誤分類為大數目的樣本類別中。One-Versus-Rest 方案正是人為的造成了數據集偏斜。
解決方法有數據集平衡,可以采取上采樣或者下采樣的方式進行數據集再平衡。
2.4 1 v 1多分類支持向量機
具體做法是在任意兩類樣本之間設計一個SVM,因此k個類別的樣本就需要設計k(k-1)/2個SVM。當對一個未知樣本進行分類時,最后得票最多的類別即為該未知樣本的類別。在訓練時往往比一對多花的時間少,并且由于采用了投票表決的方式,一定程度上解決了樣本不可分問題,但是分類的類別多的時候,會使svm數目爆炸。
2.5 DAG多分類支持向量機
DAG存在的一個問題是單分類器的誤判代價較高。如上圖若根分類器判斷錯誤,輸入真實類別為A,卻被錯分至右邊,這次誤判將直接導致輸入不會被正確分類。故而在選擇根分類器時需選擇魯棒性較強的一個二分類器,子樹的根分類器同理。
綜合考量本實驗選擇的數據集以及編程難度實現的性價比,我最終選擇了1v1的方式實現支持向量機多分類問題。這種方法只需要將之前解決二分類問題的svm算法直接應用于任意兩類數據上即可,在分類判別時每一類維護一個“投票箱”,最終得票多者即為算法最終的判別結果。
三 算法可行性分析:
3.1 SVM時間復雜度粗略分析
對于 FaceDB_orl 數據集,每一例樣本具有92 * 112 = 10304維特征,如果單純利用支持向量機處理,算法的需要承受的復雜度是難以想象的,查閱資料了解到支持向量機算
可見,支持向量機算法復雜度是非常依賴于樣本特征維數,如果對樣本點的特征維數大幅度壓縮,是有望提升算法實際運行的效率的。
3.2 關于引入PCA算法帶來的復雜度粗略分析:
3.3 關于神經網絡的一點思考:
中需要引入激活函數(非線性映射關系)來打破層與層之間的仿射關系。
那么idea又出現了,如果將PCA降維后的特征進行非線性映射再重新降維是否會有出其不意的效果?對于這個問題本著不負責任的態度,我認為對于本聯合算法而言,非為不能,亦是不必。因為在支持向量機算法的核技巧事實上正是通過內積將特征進行了非線性的映射,因此即使真實的特征之間有非線性的耦合關系,支持向量機已經在一定程度上能夠應對。
四 some trick:
4.1 特征值mapping(零均值映射)
Mapping這個操作的表述是我特意與歸一化(normalization)區別開來,兩者是有一定區別的。首先我們知道對于許多問題,歸一化是極有可能帶來性能上提升的,我個人理解的原因在于不同特征之間的“相對描述“比”絕對描述“更有意義。比如我們在對兩個來自不同地區的學生的assess的時候,我們有他們的高考成績,但不幸的是一位是全國卷考生(總分750),一位是江蘇考生(總分485分),如果兩人都考了400分,我們人是可以”智能“的認為江蘇卷考生是更為優秀的(假設試題難度都大致相當的情況下),因為我們自動地進行了一種”重映射“,如果更為科學和量化的描述,我們可能會想到對其排名進行統計,最終可能得到江蘇考生位列前3%,而全國卷考生位列70%,這一差異是顯著的。那么對于機器而言,它對于數據是敏感的,因此我們將各維度特征都取歸一化,是有希望讓機器也獲得這種”智能“的。
為什么我的選擇是Mapping而不是normalization?在深度學習中,往往對圖像進行零均值化(zero-mean)處理,從而加快算法的收斂速度。在本聯合算法中,不牽扯到梯度運算的過程,因此對于加快算法的收斂應該是無意義的,有一點可以指出的是,我所說的Mapping是可以選擇映射的范圍的,同時又是零均值的,這至少有一點優點是顯而易見的,如果映射范圍較大,是有利于提高計算精度的。同時為特征引入符號上的不同,或許會帶來意想不到的效果(純瞎猜),而事實上經過實驗,對于支持向量機分類的問題并沒有產生明顯的影響,不過最終仍保留了Mapping操作,為以后引進其他策略做好準備。
4.2 Image augmentation(圖像增廣)
由于采用的數據集樣本數量少,并且實際中也可能存在訓練集樣本數少這種問題,應對策略有圖像增廣,包括但不限于剪切,對比度調整,旋轉,鏡像。對本數據集來說,廣泛存在弱鏡像關系的圖片,如圖4-2.可以明顯觀察到有此規律,因此可以在圖像預處理階段進行對訓練集的圖像增廣,即做鏡像對稱處理后的圖片加入到訓練集中。這樣有效地增加了樣本數量。
五 實驗數據對比:
5.1 性能粗略比較
5.2 ORL人臉數據集
5.3 LFW人臉數據集(非對齊人臉)
5.4 實驗總結:
在進行非對齊人臉測試時,有一種較為明顯的現象即SMO算法測得的測試集準確率往往略高于內點法測得的測試集準確率,猜想應該是內點法力求得到的是訓練集上的最優解,此時可能已經過擬合了,而SMO算法求得的是近似解,雖然對于訓練集擬合程度沒有特別高,但一定程度上應對了過擬合現象發生。
參考:
如何通俗易懂地講解什么是 PCA 主成分分析?
https://www.zhihu.com/question/41120789/answer/481966094
主成分分析(PCA)原理詳解
https://blog.csdn.net/program_developer/article/details/80632779
支持向量機SVM—實現多分類問題的解決方案
https://blog.csdn.net/weixin_44822636/article/details/110820652
支持向量機(Support Vector Machine,SVM)算法復雜度詳解
https://blog.csdn.net/weixin_36474809/article/details/103986845
t-SNE降維方法
http://www.360doc.com/content/18/0125/20/99071_725086942.shtml
你知道PCA的四種寫法么
https://zhuanlan.zhihu.com/p/62902515
深度學習圖像預處理中為什么使用零均值化(zero-mean)
https://blog.csdn.net/mooneve/article/details/81943904
總結
以上是生活随笔為你收集整理的基于主成分分析与支持向量机的人脸识别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel如何提取单元格中一部分文字
- 下一篇: 三星电子研发出其首款支持 CXL 2.0