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