【人脸识别】初识人脸识别
【人臉識別】初識人臉識別
/*?Author: ? ?cyh_24? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? */
/*?Date: ? ? ? ?2014.10.2? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?*/
/*?Email:? ? ? ?cyh@buaa.edu.cn? ? ? ? ? ? ? ? ? */
/*?More:? ? ? ?http://blog.csdn.net/cyh_24? */
http://blog.csdn.net/cyh_24/article/details/39755661
由于導師給我們布置了每周閱讀兩篇大牛論文,并寫ppt的任務。反正ppt都寫了,所以我想干脆直接把ppt的內容再整理一下寫成博客。近期的閱讀論文都是人臉識別相關的主題。
如果你研究過人臉識別,或者對這方面有興趣,那么你一定聽說過Paul Viola。他可以算得上是人臉檢測識別的始祖,他的一篇大作《RobustReal-time Object Detection》可以說是人臉識別領域最重要的一篇論文。
本文主要就這篇論文展開,介紹Haar特征,積分圖,Adaboost等內容。
1、Haar特征
1.1??特征
什么是特征?
想一想我們是如何分辨物體的?更具體一點,你是如何辨別一張圖片里面的人臉是一個人臉的?其實很簡單,你會去找是不是有眼睛、嘴巴等面部器官。當然這些器官的位置基本是固定的。是否有眼睛,眼睛之間的距離,眼睛跟鼻子的位置關系等等這些都叫特征。選擇使用特征的一個重要的原因:基于特征的系統的運行速度要遠比基于像素的快。
有的人想,特征什么的誰不知道,但是怎么表示這些特征呢?我要怎么表示、分辨特征呢?
1.2??Haar特征
講haar特征之前,我想先直觀地給大家看看haar特征長什么樣,下圖就是viola等人提出的haar特征:
當然,這只是第一次提出的樣子,后來又有很多人對這些圖進行了改進,Lienhart等大神后來又提出了下面這些haar特征:
這些圖有什么用呢?
也很簡單,把這些圖形放到人臉區域上,然后,將白色區域的像素和–黑色區域的像素和,得到的結果就是一個特征值。如下圖:
例如:我們都知道,眼睛跟眼窩的顏色不同,眼睛更黑。我們定義一個閾值K,當一張使用(上黑下白)的矩形特征模板進行運算(白色區域的像素和 – 黑色區域的像素和),如果運算的結果>=K時,我們就認為找到了眼睛。
有的人就反對了,憑什么你用一個矩形特征模板運算得到一個結果>=K就算找到眼睛了,萬一我這個圖像就是一個區域上面是黑的,下面是白的呢?
不要著急,我們再使用第二個矩形特征模板對這塊區域進行驗證,是不是能增加可靠度呢?如果再用其他的矩形特征模板驗證,是不是還可以增加可靠度呢?如果再換個區域,再換個矩形特征模板再驗證,是不是還可以增加可靠度呢?
通過改變特征模板的大小和位置,可在圖像子窗口中窮舉出大量的特征。對于一個給定的24*24像素的人臉圖像,根據不同的位置,以及不同的縮放,可以產生160,000個特征。
有這么多的特征,我想這個時候的精確度應該已經很高了,但是同時其他問題也出現了——運算速度。
為了提高運算速度,我們的大神viola又提出了積分圖的概念。
2、積分圖
積分圖是個啥東西呢?
上面提到haar特征計算方法是用白色區域的像素和-黑色區域的像素和,如果是我,我可能會這么做:
1、 找出黑色區域所有像素點,全部加起來=BSum;
2、 找出白色區域所有像素點,全部加起來=WSum;
3、 WSum-BSum;
這么算顯然是很笨的,因為有很多值我之前都算過了,重復計算就是無意義的消耗cpu了。
所以viola提出了積分圖的概念,算法的思想其實有點像動態規劃,就是一次計算,多次使用。實際上,積分圖只需要遍歷一次圖像就可以求出圖像中所有區域像素和,大大提高了圖像特征值計算的效率。
來看看他究竟是這么做的。還是先放圖:
坐標(x,y)的值 = 陰影部分所有像素之和。
積分圖構建算法:
1)用s(i,j)表示行方向的累加和,初始化s(i,-1)=0;
2)用ii(i,j)表示一個積分圖像,初始化ii(-1,i)=0;
3)逐行掃描圖像,遞歸計算每個像素(i,j)行方向的累加和s(i,j)和積分圖像ii(i,j)的值
s(i,j)=s(i,j-1)+f(i,j)
ii(i,j)=ii(i-1,j)+s(i,j)
4)掃描圖像一遍,當到達圖像右下角像素時,積分圖像ii就構造好了。
積分圖構造好之后,圖像中任何矩陣區域的像素累加和都可以通過簡單運算得到如圖所示:
例如:區域D的像素值之和 = (4 + 1 -(2+3))
3、Adaboost
有的人說,有了haar特征,有了提升性能的積分圖,是不是已經可以很好的解決問題了?答案是:no. 因為,計算每一個特征值的時候速度都大幅提升了,但是,一個小小的24*24是人臉圖像根據不同的位置,以及不同的縮放,可以產生超過160,000個特征!這個數量太龐大了,所以肯定要舍棄大量的特征。那么,如何保證使用少量的特征,而又能得到精確的結果呢?大神永遠有解決方法,viola等人使用adaboost來進行分類。
聲明一下,adaboost并不是viola等人提出的,而是Freund和Schapire提出。但是viola的偉大正是因為他將這個模型首次用到了人臉識別中,這使得人臉識別成為一個可能的事情。
?????? 這里不對adaboost進行詳細的探討,網絡上關于這方面的信息很多。這里只簡單介紹一下人臉識別中,是如何使用這個模型的。
3.1 級聯結構
所有偉大的東西,其思想都是很簡單的。
所謂的級聯結構無非就是:
?????? 將多個強分類器連接在一起進行操作。每一個強分類器都由若干個弱分類器加權組成。例如,一個級聯用的強分類器包含20個左右的弱分類器,然后在將10個強分類器級聯起來,就構成了一個級聯強分類器,這個級聯強分類器中總共包括200個(20*10)分類器。因為每一個強分類器對負樣本的判別準確度非常高,所以一旦發現檢測到的目標位負樣本,就不在繼續調用下面的強分類器,減少了很多的檢測時間。因為一幅圖像中待檢測的區域很多都是負樣本,這樣由級聯分類器在分類器的初期就拋棄了很多負樣本的復雜檢測,所以級聯分類器的速度是非常快的;只有正樣本才會送到下一個強分類器進行再次檢驗,這樣就保證了最后輸出的正樣本的偽正(false positive)的可能性非常低。
3.2 最優弱分類器的誕生:
尋找合適的閾值,使該分類器對所有樣本的判斷誤差最小
對于每個特征f,計算所有訓練樣本的特征值并排序:
遍歷排序后的特征值,對于序列中的每個元素,計算以下值:
???????? 1.全部人臉樣本的權重和t1
? ? ?2.全部非人臉樣本的權重和t0
? ? ?3.在此元素之前的人臉樣本的權重和s1
? ? ?4.在此元素之前的非人臉樣本的權重和s0
? ? ?5.此元素的分類誤差:r=min{[s1+(t0-s0)],[s0+(t1-s1)]}
找出r值最小的元素作為最優閾值,最優分類器誕生
?
3.3 強分類器:
For T輪迭代:
? ? ? ? ?1.重新統一權重
? ? ?2.訓練出本輪的最優弱分類器(詳見上一P)
? ? ?3.根據本輪迭代中的分類結果重新分配樣本權重(增加錯誤分配樣本的權重)
這樣,T輪之后將產生T個最優弱分類器
組合T個最優弱分類器得到強分類器:
? ? ? ? 相當于讓所有弱分類器投票,再對投票結果按照弱分類器的錯誤率加權求和,將投票加權求和的結果與平均投票結果比較得出最終的結果
3.4 如何訓練一個級聯分類器
1.在更高的檢測率和更低的錯誤率之間權衡。
2.在更多的特征點和更快的運行速度之間權衡。
所以在我們的框架中以下三個值關系到上述兩點:
???????? 1. the number of classifier stages
???????? 2. the number of features of eachstage,ni
???????? 3. the threshold of each stage
3.5 訓練詳細過程:
1.設定每層最小要達到的檢測率d,最大誤識率f,最終級聯分類器的誤識率Ft
2. P=人臉訓練樣本,N=非人臉訓練樣本,D0=1.0,F0=1.0
3.for( i=0;Fi<=Ft; i++ )
???????? ni = 0; Fi = Fi-1;
???????? while Fi > f x Fi-1
?????????????????? ni++;
?????????????????? 利用AdaBoost算法在P和N上訓練具有ni個弱分類器的強分類器;
?????????????????? 衡量當前級聯分類器的檢測率Di和誤識率Fi ;
?????????????????? for : di < d x Di-1
??????????????????????????? 降低第i層的強分類器閾值
??????????????????????????? 衡量當前級聯分類器的檢測率Di和誤識別率Fi
?????????????????? N = Φ
?????????????????? 用當前級聯分類器檢測非人臉圖像,將誤識別圖像放入N
?
4、論文實驗效果
論文中提到的效果:測試使用MIT+CMU測試集,平均6061個特征中有10個特征被挑出。發現有大量子窗口被級聯的第一層和第二層剔除。
在700M的奔騰3CPU上,該人臉檢測可以約0.67秒的速度處理一幅384×288像素大小的圖像。
這個速度大概是Rowley-Baluja-Kanade檢測器的15倍,Schneiderman-?Kanade檢測器的約600倍。
from:?http://blog.csdn.net/cyh_24/article/details/39755661 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的【人脸识别】初识人脸识别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Theano深度学习入门
- 下一篇: 【人脸识别】人脸识别必读论文