對于人臉識別這種類型的應(yīng)用來說蝌衔,通常都會分為幾個步驟:
人臉檢測(Face Detection)。檢測到人臉?biāo)诘膮^(qū)域油额。并進(jìn)行一系列的矯正斑鸦。
-
人臉校準(zhǔn)(Face Alignment)。人臉校準(zhǔn)指的是在圖片中尋找到鼻子砖顷、眼睛贰锁、嘴巴之類的位置。
如圖中滤蝠,紅色的框是在進(jìn)行檢測豌熄,白色的點(diǎn)是在進(jìn)行校準(zhǔn)。
信息識別(Info Recognition)物咳。進(jìn)行性別锣险、年齡等信息的分析和識別。
這三個問題可以說每一個都是一個非常廣泛的研究領(lǐng)域所森,有很多值得做的工作囱持。本文只做一些簡單的介紹夯接。
人臉檢測
Viola-Jones方法
傳統(tǒng)的人臉檢測算法是Viola-Jones算法焕济。在OpenCV中的人臉檢測功能也是使用的這種算法。它有三個核心步驟:Haar-like特征盔几、Adaboost分類器和Cascade級聯(lián)分類器晴弃。
Haar-like特征
所謂Haar-like特征其實(shí)很好理解。Haar-like特征類似于下圖:
而所謂的Haar-like的特征值就是圖中白色的像素值求和,求和之后與黑色的像素值做差得到的上鞠。即
feature=sum(white)-sum(black)
但是在一幅圖中這樣的特征是非常多的际邻。根據(jù)Viola-Jones的論文,一幅24*24的圖中這樣的Haar-like特征就會達(dá)到18萬種之多(具體的計(jì)算方式我們以后再說)芍阎。所以我們可以引入積分圖(Integral Image)技術(shù)世曾。積分圖是一張與原圖像大小完全相同的圖片,不同之處在于其每一點(diǎn)的像素值是其左上角所有像素值的和谴咸。如圖
在這樣一幅圖中轮听,我們記某一點(diǎn)的像素值為ii(x),則當(dāng)我們想要計(jì)算D區(qū)域中所有像素和時岭佳,使用ii(4)-ii(2)-ii(3)+ii(1)即可血巍。這就可以大大減少計(jì)算時間,提升效率珊随。
Adaboost方法
有了特征述寡,想要得到區(qū)分函數(shù)是非常容易的。常見的SVM方法和KNN方法都是可以做到的叶洞。但盡管本身的計(jì)算并不復(fù)雜鲫凶,但Haar特征還是太多了。尤其現(xiàn)在圖片分辨率動輒成千上萬衩辟。從這些特征中選取合適的特征就非常重要掀序。從工程中得到的實(shí)踐結(jié)果是,我們可以通過結(jié)合很多個弱分類器從而組合成一個強(qiáng)分類器惭婿。這就是Adaboost方法不恭。用數(shù)學(xué)的方式就可以表示為:
F(x) =Σαf(x)
其中F為強(qiáng)分類器,f為弱分類器财饥。x是特征向量换吧,α為權(quán)重。Adaboost是一種序列化的方式钥星,需要經(jīng)過很多步沾瓦。舉個例子來看。
在上圖中谦炒,每個數(shù)據(jù)點(diǎn)都有一個類別的標(biāo)簽贯莺,不妨設(shè)紅色為1,綠色為-1宁改。每個數(shù)據(jù)點(diǎn)也有一個權(quán)重wt缕探。初始權(quán)重均為1。
我們不妨先隨意分一下看看还蹲。
看上去錯誤的還挺多的爹耗。我們可以經(jīng)過幾次平移選一個相對比較好的耙考。雖然看上去就和亂分差不多。
這是只有一個線性劃分函數(shù)的情況下比較好的結(jié)果了潭兽,但是仍然有很多錯誤的結(jié)果倦始,我們不妨把它們的權(quán)重加大。
這個時候就發(fā)現(xiàn)了一個新的問題山卦,類似地鞋邑,我們把現(xiàn)在的權(quán)重情況下的數(shù)據(jù)點(diǎn)進(jìn)行分類。
之后再加大劃分錯誤的點(diǎn)的權(quán)重账蓉,并再次進(jìn)行劃分炫狱。
反復(fù)數(shù)次后就可以在數(shù)個線性分類器(或者說弱分類器)的基礎(chǔ)上,構(gòu)造一個非線性的分類器(強(qiáng)分類器)剔猿。而且這個分類器還比較好地完成了分類的任務(wù)视译。
渣渣我還做了個gif展示效果。
Cascade分類器
在VJ方法中的第三個亮點(diǎn)就是使用了級聯(lián)分類器归敬。簡單來說酷含,就是先將幾個通過Adaboost方法得到的強(qiáng)分類器進(jìn)行排序,排序原則是簡單的放在前邊汪茧。因?yàn)橥ǔ碚f人臉只占一小部分椅亚,所以可以很放心地在前幾層分類器就拒絕掉大部分非人臉區(qū)域。只要前一級拒絕了舱污,就不在進(jìn)入下一級分類器呀舔,這可以大大提高速度。其本質(zhì)是一顆退化決策樹扩灯。
結(jié)果
在Viola和Jones的論文中媚赖,共建立了38層分類器來檢測正面的人臉。使用了4916張人工標(biāo)記的人臉珠插,并調(diào)整到了24*24的分辨率惧磺。測試結(jié)果如下: