0
本文作者: 深度學(xué)習(xí)大講堂 | 2016-08-10 14:13 |
雷鋒網(wǎng)按:本文作者鄔書哲, 中科院計算所智能信息處理重點實驗室VIPL課題組博士生,研究方向:目標檢測,尤其關(guān)注基于深度學(xué)習(xí)的目標檢測方法。
本文分上下兩篇,上篇主要介紹人臉檢測的基本流程,以及傳統(tǒng)的VJ人臉檢測器及其改進,下篇介紹基于深度網(wǎng)絡(luò)的檢測器,以及對目前人臉檢測技術(shù)發(fā)展的思考與討論。為了讓本文更適合非計算機視覺和機器學(xué)習(xí)背景的讀者,文中對所涉及到的專業(yè)術(shù)語盡量以通俗的語言和用舉例的方式來進行解釋,同時力求嚴謹,以體現(xiàn)實事求是和一絲不茍的科學(xué)研究精神。
這是一個看臉的世界!自拍,我們要藝術(shù)美顏;出門,我么要靚麗美妝。上班,我們要刷臉簽到;回家,我們要看臉相親。 當(dāng)手機把你的臉變得美若天仙,當(dāng)考勤機認出你的臉對你表示歡迎,你知道是什么魔力讓冷冰冰的機器也變得溫情脈脈,讓呆呆的設(shè)備也變得善解人意嗎?今天就讓我們走近它們的內(nèi)心,了解這些故事背后的一項關(guān)鍵技術(shù):人臉檢測。
看人先看臉,走在大街上,我們可以毫不費勁地看到所有人的臉:棱角分明的國字臉,嬌小可人的瓜子臉,擦肩而過路人甲的臉,迎面走來明星乙的臉,戴著口罩被遮住的臉,斜向上45度仰角自拍的臉??墒?,對于我們的計算機和各種終端設(shè)備而言,從眼前的畫面中把人臉給找出來,并不是一件容易的事情,原因就在于,一千個讀者就有一千個哈姆雷特,在你的眼里,人臉是這樣的:
而在機器的眼里,人臉是這樣的:
你沒看錯,圖像存儲在機器中不過就是一個由0和1組成的二進制串!更確切地說,機器看到的是圖像上每一個點的顏色值,因此對于機器來說,一張圖像就是一個由數(shù)排成的陣列。試想一下,如果我把每個點的顏色值都念給你聽,你能告訴我對應(yīng)的這張圖像上有沒有人臉和人臉在哪里嗎?很顯然,這并不是一個容易解決的問題。
如果手機沒法在自拍照中找到我們臉,那它就像一個失明的化妝師,沒法展現(xiàn)出我們最好的一面;如果考勤機沒法通過攝像頭看到我們的臉,那我們的笑就只是自作多情,它也根本不可能識別出我們到底是誰。人臉檢測架起了機器和我們之間溝通的橋梁,使得它能夠知道我們的身份(人臉識別),讀懂我們的表情(表情識別),和我們一起歡笑(人臉動畫),與我們一起互動(人機交互)。
人臉檢測的開始和基本流程
具體來說,人臉檢測的任務(wù)就是判斷給定的圖像上是否存在人臉,如果人臉存在,就給出全部人臉所處的位置及其大小。由于人臉檢測在實際應(yīng)用中的重要意義,早在上世紀70年代就已經(jīng)有人開始研究,然而受當(dāng)時落后的技術(shù)條件和有限的需求所影響,直到上世紀90年代,人臉檢測技術(shù)才開始加快向前發(fā)展的腳步,在新世紀到來前的最后十年間,涌現(xiàn)出了大量關(guān)于人臉檢測的研究工作,這時期設(shè)計的很多人臉檢測器已經(jīng)有了現(xiàn)代人臉檢測技術(shù)的影子,例如可變形模板的設(shè)計(將人臉按照五官和輪廓劃分成多個相互連接的局部塊)、神經(jīng)網(wǎng)絡(luò)的引入(作為判斷輸入是否為人臉的分類模型)等。這些早期的工作主要關(guān)注于檢測正面的人臉,基于簡單的底層特征如物體邊緣、圖像灰度值等來對圖像進行分析,結(jié)合關(guān)于人臉的先驗知識來設(shè)計模型和算法(如五官、膚色),并開始引入一些當(dāng)時已有的的模式識別方法。
雖然早期關(guān)于人臉檢測的研究工作離實際應(yīng)用的要求還有很遠,但其中進行檢測的流程已經(jīng)和現(xiàn)代的人臉檢測方法沒有本質(zhì)區(qū)別。給定一張輸入圖像,要完成人臉檢測這個任務(wù),我們通常分成三步來進行:
1.選擇圖像上的某個(矩形)區(qū)域作為一個觀察窗口;
2.在選定的窗口中提取一些特征對其包含的圖像區(qū)域進行描述;
3.根據(jù)特征描述來判斷這個窗口是不是正好框住了一張人臉。
檢測人臉的過程就是不斷地執(zhí)行上面三步,直到遍歷所有需要觀察的窗口。如果所有的窗口都被判斷為不包含人臉,那么就認為所給的圖像上不存在人臉,否則就根據(jù)判斷為包含人臉的窗口來給出人臉所在的位置及其大小。
那么,如何來選擇我們要觀察的窗口呢?所謂眼見為實,要判斷圖像上的某個位置是不是一張人臉,必須要觀察了這個位置之后才知道,因此,選擇的窗口應(yīng)該覆蓋圖像上的所有位置。顯然,最直接的方式就是讓觀察的窗口在圖像上從左至右、從上往下一步一步地滑動,從圖像的左上角滑動到右下角——這就是所謂的滑動窗口范式,你可以將它想象成是福爾摩斯(檢測器)在拿著放大鏡(觀察窗口)仔細觀察案發(fā)現(xiàn)場(輸入圖像)每一個角落(滑動)的過程。
別看這種用窗口在圖像上進行掃描的方式非常簡單粗暴,它的確是一種有效而可靠的窗口選擇方法,以至于直到今天,滑動窗口范式仍然被很多人臉檢測方法所采用,而非滑動窗口式的檢測方法本質(zhì)上仍然沒有擺脫對圖像進行密集掃描的過程。
對于觀察窗口,還有一個重要的問題就是:窗口應(yīng)該多大?我們認為一個窗口是一個人臉窗口當(dāng)且僅當(dāng)其恰好框住了一張人臉,即窗口的大小和人臉的大小是一致的,窗口基本貼合人臉的外輪廓。
那么問題來了,即使是同一張圖像上,人臉的大小不僅不固定,而且可以是任意的,這樣怎么才能讓觀察窗口適應(yīng)不同大小的人臉呢?一種做法當(dāng)然是采用多種不同大小的窗口,分別去掃描圖像,但是這種做法并不高效。換一個角度來看,其實也可以將圖像縮放到不同的大小,然后用相同大小的窗口去掃描——這就是所謂的構(gòu)造圖像金字塔的方式。圖像金字塔這一名字非常生動形象,將縮放成不同大小的圖像按照從大到小的順序依次往上堆疊,正好就組成了一個金字塔的形狀。
通過構(gòu)建圖像金字塔,同時允許窗口和人臉的貼合程度在小范圍內(nèi)變動,我們就能夠檢測到不同位置、不同大小的人臉了。另外需要一提的是,對于人臉而言,我們通常只用正方形的觀察窗口,因此就不需要考慮窗口的長寬比問題了。
選好了窗口,我們開始對窗口中的圖像區(qū)域進行觀察,目的是收集證據(jù)——真相只有一個,我們要依靠證據(jù)來挖掘真相!在處理圖像的過程中,這個收集證據(jù)的環(huán)節(jié)我們稱之為特征提取,特征就是我們對圖像內(nèi)容的描述。由于機器看到的只是一堆數(shù)值,能夠處理的也只有數(shù)值,因此對于圖像所提取的特征具體表示出來就是一個向量,稱之為特征向量,其每一維是一個數(shù)值,這個數(shù)值是根據(jù)輸入(圖像區(qū)域)經(jīng)由某些計算(觀察)得到的,例如進行求和、相減、比較大小等??偠灾?,特征提取過程就是從原始的輸入數(shù)據(jù)(圖像區(qū)域顏色值排列組成的矩陣)變換到對應(yīng)的特征向量的過程,特征向量就是我們后續(xù)用來分析和尋找真相的證據(jù)。
特征提取之后,就到了決斷的時刻:判別當(dāng)前的窗口是否恰好包含一張人臉。我們將所有的窗口劃分為兩類,一類是恰好包含人臉的窗口,稱之為人臉窗口,剩下的都歸為第二類,稱之為非人臉窗口,而最終判別的過程就是一個對當(dāng)前觀察窗口進行分類的過程。因為我們的證據(jù)是由數(shù)值組成的特征向量,所以我們是通過可計算的數(shù)學(xué)模型來尋找真相的,用來處理分類問題的數(shù)學(xué)模型我們通常稱之為分類器,分類器以特征向量作為輸入,通過一系列數(shù)學(xué)計算,以類別作為輸出——每個類別會對應(yīng)到一個數(shù)值編碼,稱之為這個類別對應(yīng)的標簽,如將人臉窗口這一類編碼為1,而非人臉窗口這一類編碼為-1;分類器就是一個將特征向量變換到類別標簽的函數(shù)。
考慮一個最簡單的分類器:將特征向量每一維上的數(shù)值相加,如果得到的和超過某個數(shù)值,就輸出人臉窗口的類別標簽1,否則輸出非人臉窗口的類別標簽-1。記特征向量為,
分類器為函數(shù)f(x),那么有:
這里的t就是前面所說的“某個數(shù)值”,其決定了分類器在給定特征向量下的輸出結(jié)果,我們稱其為分類器的參數(shù)。不同形式和類型的分類器會有不同的參數(shù),一個分類器可以有一個或者多個參數(shù),參數(shù)或者其取值不同則對應(yīng)到不同的分類器。選定了一個分類器之后,緊接著的一個問題就是:參數(shù)該怎么設(shè)置?具體到我們正在考慮的情況,就是:t的值該如何選???
要做出選擇,就要有一個目標,在分類問題中,目標當(dāng)然就是盡可能正確地進行分類,即分類的準確率盡可能高。然而,盡管我們對目標非常明確,我們也仍然沒法給出一個最優(yōu)的參數(shù)取值,因為我們并不使用機器所采用的二進制語言系統(tǒng),我們并不懂什么才是對機器最好的。于是我們只有一種選擇:把我們的目標告訴機器,舉一些例子向其進行解釋,然后讓機器自己去學(xué)習(xí)這個參數(shù),最后我們給機器設(shè)計一場考試,測試其是否滿足了我們的要求。我們從一些圖像上選出一部分人臉和非人臉窗口的樣例,用對應(yīng)的類別標簽對其進行標注,然后將這些樣例劃分成兩個集合,一個集合作為分類器學(xué)習(xí)所使用的訓(xùn)練集,另一個集合作為最終考查分類器能力的測試集,同時我們設(shè)定一個目標:希望分類的準確率能夠在80%以上。
學(xué)習(xí)過程開始時,我們先給分類器的參數(shù)設(shè)定一個初始值,然后讓分類器通過訓(xùn)練集中帶有“答案”(類別標簽)的樣例,不斷去調(diào)整自己參數(shù)的取值,以縮小其實際的分類準確率和目標準確率之間的差距。當(dāng)分類器已經(jīng)達到了預(yù)先設(shè)定的目標或者其它停止學(xué)習(xí)的條件——期末考試的時間是不會因為你沒有學(xué)好而推遲的,或者分類器覺得自己已經(jīng)沒有辦法再調(diào)整了,學(xué)習(xí)過程就停止了,這之后我們可以考查分類器在測試集上的準確率,以此作為我們評判分類器的依據(jù)。這一過程中,分類器調(diào)整自己參數(shù)的方式和分類器的類型、設(shè)定的目標等都有關(guān),由于這部分內(nèi)容超出了本文所討論的范疇,也并不影響讀者對人臉檢測方法的理解,因此不再展開進行講述。
在確定了選擇窗口的策略,設(shè)計好了提取特征的方式,并學(xué)習(xí)了一個針對人臉和非人臉窗口的分類器之后,我們就獲得了構(gòu)建一個人臉檢測系統(tǒng)所需要的全部關(guān)鍵要素——還有一些小的環(huán)節(jié)相比之下沒有那么重要,這里暫且略去。
由于采用滑動窗口的方式需要在不同大小的圖像上的每一個位置進行人臉和非人臉窗口的判別,而對于一張大小僅為480*320的輸入圖像,窗口總數(shù)就已經(jīng)高達數(shù)十萬,面對如此龐大的輸入規(guī)模,如果對單個窗口進行特征提取和分類的速度不夠快,就很容易使得整個檢測過程產(chǎn)生巨大的時間開銷,也確實就因為如此,早期所設(shè)計的人臉檢測器處理速度都非常慢,一張圖像甚至需要耗費數(shù)秒才能處理完成——視頻的播放速度通常為每秒25幀圖像,這給人臉檢測投入現(xiàn)實應(yīng)用帶來了嚴重的障礙。
人臉檢測技術(shù)的突破:VJ人臉檢測器及其發(fā)展
人臉檢測技術(shù)的突破發(fā)生在2001年,兩位杰出的科研工作者Paul Viola和Michael Jones設(shè)計了出了一個快速而準確的人臉檢測器:在獲得相同甚至更好準確度的同時,速度提升了幾十上百倍——在當(dāng)時的硬件條件下達到了每秒處理15張圖像的速度,已經(jīng)接近實時速度25fps(即25幀每秒)。這不僅是人臉檢測技術(shù)發(fā)展的一個里程碑,也標志著計算機視覺領(lǐng)域的研究成果開始具備投入實際應(yīng)用的能力。為了紀念這一工作,人們將這個人臉檢測器用兩位科研工作者的名字命名,稱之為Viola-Jones人臉檢測器,或者簡稱為VJ人臉檢測器。
VJ人臉檢測之所以器能夠獲得成功,極大地提高人臉檢測速度,其中有三個關(guān)鍵要素:特征的快速計算方法——積分圖,有效的分類器學(xué)習(xí)方法——AdaBoost,以及高效的分類策略——級聯(lián)結(jié)構(gòu)的設(shè)計。VJ人臉檢測器采用Haar特征來描述每個窗口,所謂Haar特征,其實就是在窗口的某個位置取一個矩形的小塊,然后將這個矩形小塊劃分為黑色和白色兩部分,并分別對兩部分所覆蓋的像素點(圖像上的每個點稱為一個像素)的灰度值求和,最后用白色部分像素點灰度值的和減去黑色部分像素點灰度值的和,得到一個Haar特征的值。
Haar特征反映了局部區(qū)域之間的相對明暗關(guān)系,能夠為人臉和非人臉的區(qū)分提供有效的信息,例如眼睛區(qū)域比周圍的皮膚區(qū)域要暗,通過Haar特征就可以將這一特點表示出來。但是由于提取Haar特征時每次都需要計算局部區(qū)域內(nèi)多個像素點灰度值之和,因此在速度上其并不快,為此VJ人臉檢測器引入了積分圖來加速Haar特征的提取。
積分圖是一張和輸入圖像一樣大的圖,但其每個點上不再是存放這個點的灰度值,而是存放從圖像左上角到該點所確定的矩形區(qū)域內(nèi)全部點的灰度值之和。
積分圖所帶來的好處是兩方面的,一方面它使得每次計算局部區(qū)域像素點的灰度值之和僅需要做4次加減法,與局部區(qū)域的大小無關(guān);另一方面它避免了在相同像素點上重復(fù)求和,只在最開始計算一次——相鄰的窗口有很大的重疊部分,對應(yīng)的Haar特征也會重疊,如果每次都重新計算像素點的灰度值之和,則重疊部分的計算是重復(fù)的。積分圖極大地加速了Haar特征的提取,向快速的檢測器邁出了第一步。
除了特征提取,分類過程的速度對于檢測的速度也至關(guān)重要。分類的速度取決于分類器的復(fù)雜程度,也即從特征向量變換到類別標簽的計算過程的復(fù)雜程度。復(fù)雜的分類器往往具有更強的分類能力,能夠獲得更好的分類準確度,但是分類時的計算代價比較高,而簡單的分類器雖然計算代價小,但是分類準確度也較低。那么有沒有兼顧計算代價和分類準確度兩方面的辦法呢?當(dāng)然有,這就是AdaBoost方法。希望計算代價小,所以只用簡單的分類器,但是又希望分類準確度高,于是把多個簡單的分類器組合起來——聚弱為強,將多個弱分類器組合成一個強分類器,這就是AdaBoost方法的核心理念。通過AdaBoost方法來學(xué)習(xí)分類器,達到了以更小的計算代價換取同樣的分類準確度的目的。
造成人臉檢測速度慢的根本原因還在于輸入規(guī)模過大,動輒需要處理幾十上百萬的窗口,如果這樣的輸入規(guī)模是不可避免的,那么有沒有可能在處理的過程中盡快降低輸入規(guī)模呢?如果能夠通過粗略地觀察快速排除掉大部分窗口,只剩下少部分窗口需要進行仔細的判別,則總體的時間開銷也會極大地降低。從這樣的想法出發(fā),VJ人臉檢測器采用了一種級聯(lián)結(jié)構(gòu)來達到逐步降低輸入規(guī)模的目的。
具體說來,VJ人臉檢測器將多個分類器級聯(lián)在一起,從前往后,分類器的復(fù)雜程度和計算代價逐漸增大,對于給定的一個窗口,先由排在最前面也最簡單的分類器對其進行分類,如果這個窗口被分為非人臉窗口,那么就不再送到后面的分類器進行分類,直接排除,否則就送到下一級分類器繼續(xù)進行判別,直到其被排除,或者被所有的分類器都分為人臉窗口。這樣設(shè)計的好處是顯而易見的,每經(jīng)過一級分類器,下一級分類器所需要判別的窗口就會減少,使得只需要付出非常少的計算代價就能夠排除大部分非人臉窗口。從另一個角度來看,這實際上也是根據(jù)一個窗口分類的難度動態(tài)地調(diào)整了分類器的復(fù)雜程度,這顯然比所有的窗口都用一樣的分類器要更加高效。
VJ人臉檢測器通過積分圖、AdaBoost方法和級聯(lián)結(jié)構(gòu)取得的巨大成功對后續(xù)的人臉檢測技術(shù)研究產(chǎn)生了深遠的影響,大量的科研工作者開始基于VJ人臉檢測器進行改進,這些改進也分別覆蓋了VJ人臉檢測器的三個關(guān)鍵要素。
特征的改進和變遷
雖然Haar特征已經(jīng)能夠刻畫人臉的一些特點,但是相比于人臉復(fù)雜的變化模式,VJ人臉檢測器所采用的5種Haar特征還是過于簡單。光考慮姿態(tài)上的變化,人臉可能是斜著的(平面內(nèi)旋轉(zhuǎn)),也可能是仰著的或者側(cè)著的(平面外旋轉(zhuǎn)),同一個Haar特征在不同姿態(tài)的人臉上差異可能非常大,而同時又可能和非人臉區(qū)域上的特征更相近,這就很容易在分類的時候引起誤判。于是人們開始對Haar特征進行擴展,使得其能夠刻畫更加豐富的變化模式:
1. 環(huán)形的黑白區(qū)域劃分模式,而不僅僅是上下或者左右型;
2. 旋轉(zhuǎn)的Haar的特征,即將原來提取Haar特征的局部小塊順時針或逆時針旋轉(zhuǎn)45度;
3. 分離的Haar特征,即允許一個Haar特征由多個互相分離的黑白區(qū)域來計算,而不要求黑白區(qū)域必須處于一個矩形小塊中;
4. 對角型Haar特征;
5. 組合Haar特征,即對多個不同的Haar特征進行組合和二值編碼;
6. 局部組合二值特征,即在局部對特定的Haar特征按照一定的結(jié)構(gòu)進行組合和二值編碼;
7. 帶權(quán)多通道Haar特征,即一個Haar特征不再只包含黑白兩種塊,而允許有多種不同形狀和不同顏色的塊,其中不同的顏色對應(yīng)著不同的權(quán)值,表示像素點上求和之后所占的比重——原來只有1和-1兩種,多通道指的是在像素點上求和不僅僅是在灰度這一個通道上計算,而是同時在其它通道上計算(如RGB三個顏色通道;事實上,基于原圖計算而來和原圖同樣大小的任何一張圖都可以是圖像的一個通道)。
這些擴展極大地增強了Haar特征的表達能力,使得人臉窗口和非人臉窗口之間具有更好的區(qū)分性,從而提高了分類的準確度。
除了直接對Haar特征進行改進,人們也同時在設(shè)計和嘗試其它特征。Haar特征本質(zhì)上是局部區(qū)域像素值的一種線性組合,其相對應(yīng)的更一般的形式則是不指定線性組合的系數(shù),允許系數(shù)為任意實數(shù),這被稱之為線性特征——這里的組合系數(shù)可以基于訓(xùn)練樣例來進行學(xué)習(xí),類似于學(xué)習(xí)分類器參數(shù)的過程。稀疏粒度特征也是一種基于線性組合來構(gòu)造的特征,與線性特征所不同的是,稀疏粒度特征是將不同尺度(將100*100的圖像放大到200*200,它和原本大小就為200*200的圖像是處于不同的尺度上)、位置和大小的局部區(qū)域進行組合,而線性特征只是組合同一個局部區(qū)域內(nèi)的像素值。
LBP特征是一種二值編碼特征,其直接基于像素灰度值進行計算,特點是在編碼時考慮的是兩個值的相對大小,并且按照一定的空間結(jié)構(gòu)來進行編碼,局部組合二值特征就是在LBP特征的啟發(fā)下設(shè)計的;從計算上來看,提取LBP特征比提取Haar特征要快,但是Haar特征對于人臉和非人臉窗口的區(qū)分能力更勝一籌。簡化的SURF特征是一種和Haar特征相類似的特征,但是其計算的是局部區(qū)域中像素點的梯度和,并在求和的過程中考慮了梯度方向(所謂梯度,最簡單的一種情形就是指同一行上兩個不同位置像素值的差比上它們水平坐標的差);SURF特征比Haar特征更為復(fù)雜,因此計算代價更高,但是由于其表達能力更強,因此能夠以更少數(shù)目的特征來達到相同的區(qū)分度,在一定程度上彌補了其在速度上的不足。HOG特征也是一種基于梯度的特征,其對一個局部區(qū)域內(nèi)不同方向的梯度進行統(tǒng)計,計算梯度直方圖來表示這個區(qū)域。積分通道特征和多通道的Haar特征有些類似,但是其使用的通道更加多樣化,將通道的概念推廣為由原圖像變換而來并且空間結(jié)構(gòu)和原圖像對應(yīng)的任何圖像。聚合通道特征則在積分通道特征的基礎(chǔ)上進一步加入了對每個通道進行下采樣的操作,實現(xiàn)局部區(qū)域信息的聚合。
在過去十幾年的探索過程中,涌現(xiàn)出的特征不勝枚舉,這里只選取了部分比較有代表性和反映了人們探索思路的特征進行舉例。這里所有列舉的特征都有一個共同的特點:都由科研工作者根據(jù)自己的經(jīng)驗手工設(shè)計,這些特征的設(shè)計反映了人們對問題的理解和思考。雖然隨著不斷的改進,設(shè)計出的特征已經(jīng)日臻完善,但直到現(xiàn)在,人們在特征上的探索還遠沒有結(jié)束。
分類器及其學(xué)習(xí)方法的改進
分類器能力的強弱直接決定了分類準確度的高低,而分類的計算代價是影響檢測速度的一個關(guān)鍵因素,因此,人們探索的另一個方向就是對分類器及其學(xué)習(xí)方法的改進。
采用AdaBoost方法由弱分類器構(gòu)建強分類器,這是一個順序執(zhí)行的過程,換言之,一旦一個弱分類器被選中,其就必定會成為強分類器的組成部分,不允許反悔,這其實是假設(shè)增加弱分類器一定會使得強分類器的分類準確度更高,但是,這個假設(shè)并不總是成立。事實上,每次對弱分類器的選擇只是依照當(dāng)時的情況決定,而隨著新的弱分類器被增加進來,從整體上來看,之前的選擇未必最優(yōu)?;谶@樣的想法,出現(xiàn)了允許回溯的FloatBoost方法。FloatBoost方法在選擇新的弱分類器的同時,也會重新考查原有的弱分類器,如果去掉某個弱分類器之后強分類器的分類準確度得到了提升,那說明這個弱分類器帶來了負面影響,應(yīng)該被剔除。
VJ人臉檢測器中,相級聯(lián)的多個分類器在學(xué)習(xí)的過程中并不會產(chǎn)生直接的聯(lián)系,其關(guān)聯(lián)僅體現(xiàn)在訓(xùn)練樣例上:后一級分類器的訓(xùn)練樣例一定要先通過前一級分類器。不同分類器在學(xué)習(xí)時的獨立性會帶來兩方面的壞處:一是在每個分類器都是從頭開始學(xué)習(xí),不能借鑒之前已經(jīng)學(xué)習(xí)好的分類器的經(jīng)驗;二是每個分類器在分類時都只能依靠自己,不能利用其它分類器已經(jīng)獲得的信息。為此,出現(xiàn)了兩種改進的方案:鏈式Boosting方法和嵌套式Boosting方法。兩種方案都在學(xué)習(xí)新一級的分類器時,都考慮之前已經(jīng)學(xué)好的分類器,區(qū)別在于鏈式Boosting方法直接將前面各級分類器的輸出進行累加,作為基礎(chǔ)得分,新分類器的輸出則作為附加得分,換言之,前面各級分類器實際上是新分類器的一個“前綴”,所有的分類器通過這種方式鏈在了一起;嵌套式Boosting方法則直接將前一級分類器的輸出作為新分類器第一個弱分類器的特征,形成一種嵌套的關(guān)系,其特點是只有相鄰的分類器才會互相影響。還有一種和嵌套式Boosting方法相類似的方案:特征繼承,即從特征而不是分類器的角度來關(guān)聯(lián)不同的分類器,具體而言,新的分類器在學(xué)習(xí)時會先繼承前一級分類器的所有特征,基于這些特征學(xué)習(xí)弱分類器,再此基礎(chǔ)上再考慮增加新的弱分類器,這一方案的特點在于其只引入了分類器學(xué)習(xí)時的相互影響,而在分類時分類器之間仍然是相互獨立的。
相關(guān)的任務(wù)之間往往會相互產(chǎn)生促進作用,相輔相成,而和人臉檢測密切相關(guān)的一個任務(wù)就是特征點定位:預(yù)測臉部關(guān)鍵點的位置,這些關(guān)鍵點可以是雙眼中心、鼻尖、嘴角等?;谶@樣一種想法,在2014年出現(xiàn)了Joint Cascade,即把檢測人臉所需要的分類器和預(yù)測特征點位置的回歸器交替級聯(lián),同時進行人臉檢測和特征點定位兩個任務(wù)。用特征點定位輔助人臉檢測的關(guān)鍵在于形狀索引特征的引入,即特征不再是在整個窗口中提取,而是在以各個特征點為中心的局部區(qū)域進行提取,這樣的好處就在于提高了特征的語義一致性。不同的人臉其對應(yīng)的特征點位置是不同的,反過來看,也就是說相同的位置實際上對應(yīng)于臉部的不同區(qū)域,那么在相同區(qū)域提取的特征實際上表示的是不同的語義,簡單地說,就是在拿鼻子去和嘴巴匹配。采用形狀索引特征可以很好地避免這個問題,從而增大人臉和非人臉窗口之間的區(qū)分性。對于一個給定的窗口,我們并不知道特征點的位置,因此采用一個“平均位置”作為初始位置,即基于標注有特征點坐標的人臉樣例集,計算出的每個點坐標的平均值;在平均位置的基礎(chǔ)上,我們提取特征預(yù)測各個特征點真實的位置,不過一次預(yù)測往往是不準確的,就好像跑步的時候我們沒法直接從起點跳到終點一樣,所以需要不斷基于當(dāng)前確定的特征點位置來預(yù)測新的位置,逐步向其真實的位置靠近。這個過程很自然地形成了一種級聯(lián)結(jié)構(gòu),從而能夠和人臉檢測器耦合在一起,形成一種不同模型交替級聯(lián)的形式。
針對分類器學(xué)習(xí)過程中的每一個環(huán)節(jié),人們都進行了細致而充分的探索,除了上面提到的幾個方向,在分類器分類閾值的學(xué)習(xí)、提升分類器學(xué)習(xí)的速度等問題上,也出現(xiàn)了很多出色的研究工作。大部分在分類器及其學(xué)習(xí)方法上進行改進的工作關(guān)注的還是Boosting方法(AdaBoost方法是Boosting方法的一個杰出代表)和相對簡單的分類器形式,如果能夠引入具有更強分類能力的分類器,相信能給檢測器帶來進一步的性能提升,這一點在后文會有所涉及。
級聯(lián)結(jié)構(gòu)的演化
分類器的組織結(jié)構(gòu)也是人們關(guān)心的一個重要問題,尤其是在面臨多姿態(tài)人臉檢測任務(wù)的時候。人臉的姿態(tài)是指人臉在三維空間中繞三個坐標軸旋轉(zhuǎn)的角度,而多姿態(tài)人臉檢測就是要將帶旋轉(zhuǎn)的人臉給檢測出來,不管是斜著的(繞x軸旋轉(zhuǎn))、仰著的(繞y軸旋轉(zhuǎn))還是側(cè)著的(繞z軸旋轉(zhuǎn))。不同姿態(tài)的人臉在表觀特征上存在很大的差異,這給檢測器帶來了非常大的挑戰(zhàn),為了解決這一問題,通常采用分治的策略,即分別針對不同姿態(tài)的人臉單獨訓(xùn)練分類器,然后組合起來構(gòu)建成多姿態(tài)人臉檢測器。
最簡單的多姿態(tài)人臉檢測器就是將針對不同姿態(tài)人臉的分類器采用并列式的結(jié)構(gòu)進行組織,其中并列的每一個分類器仍然采用原來的級聯(lián)結(jié)構(gòu)(我們稱這種分類器為級聯(lián)分類器);在檢測人臉的過程中,一個窗口如果被其中一個級聯(lián)分類器分為人臉窗口,則認為其確實是一個人臉窗口,而只有當(dāng)每一個級聯(lián)分類器都將其判別為非人臉窗口時,才將其排除掉。這種并列式的組織架構(gòu)存在兩方面的缺陷:一是造成了檢測時間的成倍增長,因為絕大部分窗口是非人臉窗口,這些窗口需要經(jīng)過每一個級聯(lián)分類器的排除;二是容易造成整體分類準確度的降低,因為整個檢測器分錯的窗口包含的是所有級聯(lián)分類器分錯的窗口。
有人設(shè)計了一種金字塔式的級聯(lián)結(jié)構(gòu),金字塔的每一層對應(yīng)于對人臉姿態(tài)(旋轉(zhuǎn)角度)的一個劃分,從頂層到底層劃分越來越細,級聯(lián)的每個分類器只負責(zé)區(qū)分非人臉和某個角度范圍內(nèi)的人臉。對于一個待分類的窗口,從最頂層的分類器開始對其進行分類,如果其被分為人臉窗口,則送入到下一層的第一個分類器繼續(xù)進行分類,如果其被分為非人臉窗口,則送入到同一層的下一個分類器繼續(xù)進行分類,當(dāng)在某一層上所有的分類器都將其分為非人臉窗口時,就確認其為非人臉窗口,將其排除。金字塔式的級聯(lián)結(jié)構(gòu)也可以看成是一種特殊的并列式結(jié)構(gòu),只不過每個級聯(lián)分類器相互之間有共享的部分,這樣最直接的好處就在于減少了計算量,共享的部分只需要計算一次,同時在底層又保留了分治策略所帶來的好處——子問題比原問題更加容易,因此更容易學(xué)習(xí)到分類準確度更高的分類器。
還有一種比較典型的結(jié)構(gòu)是樹形的級聯(lián)結(jié)構(gòu),從形狀上來看其和金字塔式的級聯(lián)結(jié)構(gòu)是一樣的,也是從上往下分類器的數(shù)目逐層增多,區(qū)別就在于樹形的級聯(lián)結(jié)構(gòu)中沒有同一層分類器之間的橫向連接,只有相鄰層分類器之間的縱向連接,即一個窗口在同一層上不會由多個分類器進行分類,而會直接被送往下一層或者被排除。樹形級聯(lián)結(jié)構(gòu)通過引入分支跳轉(zhuǎn)機制,進一步減少了對一個窗口進行分類所需要的計算量,不過同時也帶來了新的問題,分支跳轉(zhuǎn)通常根據(jù)姿態(tài)估計(估計旋轉(zhuǎn)角度的范圍)的結(jié)果來進行,而如果姿態(tài)估計出現(xiàn)錯誤,就會出現(xiàn)某個姿態(tài)的人臉窗口被送給另一個姿態(tài)人臉對應(yīng)的分類器進行分類的情況,容易導(dǎo)致錯誤的分類。為了緩解這一問題,出現(xiàn)了允許多個分支同時跳轉(zhuǎn)的設(shè)計,從而降低了由于跳轉(zhuǎn)錯誤而引起分類錯誤的風(fēng)險。
分治策略是處理多姿態(tài)人臉檢測任務(wù)最基本的策略,但要同時兼顧速度和分類準確度并不是一件容易的事情,分類能力的增強不可避免地會帶來計算代價的增大,如何用更小的計算代價來換取更高的分類準確度,這仍然是一個需要去思考和探索的問題。
人臉檢測器的比拼
在不斷對人臉檢測器進行改進的過程中,有一個問題是不容忽視的:如何科學(xué)地比較兩個人臉檢測器的優(yōu)劣?簡單地說,出一套考題讓所有的檢測器進行一場考試,誰得分高誰就更好。對于人臉檢測器而言,所謂考題(測試集)就是一個圖像集合,通常其中每張圖像上都包含至少一張人臉,并且這些人臉的位置和大小都已經(jīng)標注好。關(guān)于得分,需要考慮檢測器兩方面的表現(xiàn),一是檢測率,也即對人臉的召回率,檢測出來的人臉占總?cè)四樀谋壤獪y試集中一共標注了100張人臉,檢測器檢測出其中70張人臉,則檢測率為70%;二是誤檢(也稱為虛警)數(shù)目,即檢測器檢測出來的人臉中出現(xiàn)錯誤(實際上不是人臉)的數(shù)目——檢測器一共檢測出80張人臉,然而其中有10個錯誤,只有70個是真正的人臉,那么誤檢數(shù)目就是10。在這兩個指標上,我們所希望的總是檢測率盡可能高,而誤檢數(shù)目盡可能少,但這兩個目標之間一般是存在沖突的;在極端的情況下,如果一張臉也沒有檢測出來,那么誤檢數(shù)目為0,但是檢測率也為0,而如果把所有的窗口都判別為人臉窗口,那么檢測率為100%,而誤檢數(shù)目也達到了最大。在比較兩個檢測器的時候,我們通常固定一個指標,然后對比另一個指標,要么看相同誤檢數(shù)目時誰的檢測率高,要么看相同檢測率時誰的誤檢少。
對于每一個檢測出的人臉,檢測器都會給出這個檢測結(jié)果的得分(或者說信度),那么如果人為地引入一個閾值來對檢測結(jié)果進行篩選(只保留得分大于閾值得檢測結(jié)果),那么隨著這個閾值的變化,最終得檢測結(jié)果也會不同,因而其對應(yīng)得檢測率和誤檢數(shù)目通常也會不同。通過變換閾值,我們就能夠得到多組檢測率和誤檢數(shù)目的值,由此我們可以在平面直角坐標系中畫出一條曲線來:以x坐標表示誤檢數(shù)目,以y坐標表示檢測率,這樣畫出來的曲線稱之為ROC曲線(不同地方中文譯法不一,如接收機曲線、接收者操作特征曲線等,這里直接采用英文簡寫)。ROC曲線提供了一種非常直觀的比較不同人臉檢測器的方式,得到了廣泛的使用。
評測人臉檢測器時還有一個重要的問題:怎么根據(jù)對人臉的標注和檢測結(jié)果來判斷某張人臉是否被檢測到了?一般來說,檢測器給出的檢測框(即人臉窗口)不會和標注的人臉邊框完全一致,而且對人臉的標注也不一定是矩形,例如還可能是橢圓形;因此當(dāng)給定了一個檢測框和一個標注框時,我們還需要一個指標來界定檢測框是否和標注框相匹配,這個指標就是交并比:兩者交集(重疊部分)所覆蓋的面積占兩者并集所覆蓋面積的比例,一般情況下,當(dāng)檢測框和標注框的交并比大于0.5時,我們認為這個檢測框是一個正確檢測的人臉。
在早期的人臉檢測工作中,一般采用MIT-CMU人臉檢測數(shù)據(jù)集作為人臉檢測器的測試集,來比較不同的檢測器。這個測試集只包含幾百張帶有人臉的圖像,并且人臉主要是清晰且不帶遮擋的正面人臉,因而是一個相對簡單的測試集,現(xiàn)在幾乎已經(jīng)不再使用。在2010年,美國麻省大學(xué)的一個實驗室推出了一個新的人臉檢測評測數(shù)據(jù)集:FDDB,這個集合共包含2845張帶有人臉的互聯(lián)網(wǎng)新聞圖像,一共標注了5171張人臉,其中的人臉在姿態(tài)、表情、光照、清晰度、分辨率、遮擋程度等各個方面都存在非常大的多樣性,貼近真實的應(yīng)用場景,因而是一個非常具有挑戰(zhàn)性的測試集。FDDB的推出激發(fā)人們在人臉檢測任務(wù)上的研究熱情,極大地促進了人臉檢測技術(shù)的發(fā)展,在此后的幾年間,新的人臉檢測方法不斷涌現(xiàn),檢測器在FDDB上的表現(xiàn)穩(wěn)步提高。從100個誤檢時的檢測率來看,從最初VJ人臉檢測器的30%,發(fā)展到現(xiàn)在已經(jīng)超過了90%——這意味著檢測器每檢測出50張人臉才會產(chǎn)生一個誤檢,這其中的進步是非常驚人的,而檢測器之間的比拼還在繼續(xù)。
雷鋒網(wǎng)注:本文由作者發(fā)布于深度學(xué)習(xí)大講堂,轉(zhuǎn)載請聯(lián)系授權(quán)并保留出處和作者,不得刪減內(nèi)容。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。