0
雷鋒網(wǎng)按:本文作者鄔書哲, 中科院計算所智能信息處理重點實驗室VIPL課題組博士生,研究方向:目標檢測,尤其關注基于深度學習的目標檢測方法。
|深度學習給目標檢測帶來的變革
人臉檢測作為一種特定類型目標的檢測任務,一方面具有其自己鮮明的特點,需要考慮人臉這一目標的特殊性,另一方面其也和其它類型目標的檢測任務具有一定的共性,能夠直接借鑒在通用目標檢測方法上的研究經(jīng)驗。
目標檢測任務作為一個分類問題,其不僅受益于計算機視覺領域相關技術的不斷發(fā)展,在機器學習領域的研究進展同樣也對目標檢測任務具有推波助瀾的作用。事實上,從2006年開始逐步蔓延開的深度學習大爆發(fā)給目標檢測的研究帶來了強勁的助推力,使得通用的目標檢測以及各種特定類型目標的檢測任務得到了跨越式地發(fā)展。
從神經(jīng)網(wǎng)絡到深度學習
深度學習本質(zhì)上并不是一項新的技術,作為其物理核心的神經(jīng)網(wǎng)絡早在上個世紀中葉就已經(jīng)有人開始研究,并且在上世紀末已經(jīng)經(jīng)歷過一次研究高潮。
從“深度學習”這一字面上可以看到,神經(jīng)網(wǎng)絡改頭換面重出江湖,關鍵在一個“深”字上。神經(jīng)網(wǎng)絡是一種受大腦結構啟發(fā)而設計出的層級模型,其由一系列按照一定規(guī)則相連接的節(jié)點組成,形成一種層次化的結構。最簡單的一個神經(jīng)網(wǎng)絡只包含3層:輸入層、隱層(和外部的輸入、輸出沒有直接關聯(lián))和輸出層,相鄰兩層之間的節(jié)點通過有向邊相連接,其中每條邊對應有一個權值。
為了說明神經(jīng)網(wǎng)絡所表示的函數(shù),我們考慮一個更為簡單的結構:只有一個輸入層和一個輸出層,其中輸入層有 d 個節(jié)點,輸出層只有一個節(jié)點,這個節(jié)點和所有的輸入層節(jié)點相連。輸入層節(jié)點從外部接受輸入x = (x1, x2, · · · , xd),其和輸出層節(jié)點的連接對應的權值是 w = (w1, w2, · · · , wd),輸出層節(jié)點會對自己的輸入做一個變換 g,得到輸出 y,那么有
其中變換 g 通常稱為節(jié)點的激活函數(shù),是一個非線性函數(shù),如
通常我們還會在求和時增加一個偏置項 b,即有
類似地,我們可以寫出 3 層神經(jīng)網(wǎng)絡所表示的函數(shù)
其中 W2 和 W3 分別是輸入層節(jié)點與隱層節(jié)點之間、隱層節(jié)點和輸出層節(jié)點之間的連接的權值所構成的矩陣,而 b2 和 b3 則是對應的偏置項所構成的向量。依次類推,我們可以推廣到 n 層的神經(jīng)網(wǎng)絡??梢钥吹?,神經(jīng)網(wǎng)絡有一個非常大的特點,就是非線性激活函數(shù)的引入和層層嵌套,這使得其能夠表示高度非線性(相對于輸入而言)的函數(shù),因而對于復雜的數(shù)據(jù)變化模式具有更強的建模能力。
早期的神經(jīng)網(wǎng)絡一般層數(shù)比較少(如3層的淺層網(wǎng)絡),因為多層的深度網(wǎng)絡學習起來非常困難,在各種任務上難以取得令人滿意的表現(xiàn),這一狀況直到 2006 年才被打破。在2006年,機器學習領域的泰斗 Geoffrey E.Hinton 教授在《科學》雜志上發(fā)表了題為《Reducing the Dimensionality of Data with Neural Networks》的論文,這一工作為深度網(wǎng)絡的學習提供了一種有效的解決方案:采用無監(jiān)督的方式對網(wǎng)絡進行逐層預訓練,從而打開了學習深度網(wǎng)絡的大門。在接下來的幾年中,人們對深度網(wǎng)絡的熱情已經(jīng)高漲到了無以復加的地步,有關設計和學習深度網(wǎng)絡的各種問題也逐一被解決,從初始化方式到優(yōu)化方法,從激活函數(shù)到網(wǎng)絡結構,科研工作者們對此產(chǎn)生了全方位的研究,使得深度網(wǎng)絡的訓練能夠做得又快又好。由于對神經(jīng)網(wǎng)絡本身的探討并不在本文所涉及的范疇之內(nèi),因此這里不再展開討論,讀者只需要將神經(jīng)網(wǎng)絡看成是一種具有更強非線性建模能力的模型即可。
神經(jīng)網(wǎng)絡分為很多種,上面提到的只是其中最簡單一種:前饋神經(jīng)網(wǎng)絡——也經(jīng)常被簡稱為神經(jīng)網(wǎng)絡,因此神經(jīng)網(wǎng)絡這個名字很多時候指的僅僅是前饋網(wǎng)絡這一種。在計算機視覺領域,應用最成功的一種神經(jīng)網(wǎng)絡是卷積神經(jīng)網(wǎng)絡(CNN),其最大的特點就是引入了卷積操作,將前饋網(wǎng)絡中的全連接替換為局部連接,在不同的連接之間進行權值共享——將一個卷積核作用于一張圖像時,卷積核就像檢測時的觀察窗口,其從圖像的左上角逐步滑動到右下角,其滑動的每個位置對應于一個輸出節(jié)點,這個節(jié)點只和窗口內(nèi)的輸入節(jié)點(圖像上每一個點都對應于一個輸入節(jié)點)相連接,而不同輸出節(jié)點和對應輸入節(jié)點連接的權值是相同的。
卷積神經(jīng)網(wǎng)絡在處理圖像問題上具有得天獨厚的優(yōu)勢,因為卷積操作可以自然地保留圖像的空間信息,其只作用域局部,因而輸出節(jié)點的空間結構和輸入節(jié)點的空間結構是對應的,而前饋神經(jīng)網(wǎng)絡則做不到這一點:輸入節(jié)點的排列順序甚至可以是任意的,只要相應地調(diào)換連接的權值,就能保證輸出不變。CNN早在上世紀末就由著名的機器學習研究者Yann LeCun設計出來,并應用于手寫數(shù)字的識別問題,不過其在計算機視覺領域大規(guī)模得到應用則源于2012年CNN在一般的圖像分類任務上的巨大成功。
R-CNN 系列
在2013年底,深度學習給目標檢測任務點起了一把火,這個火種就是R-CNN,其中R對應于“Region(區(qū)域)”,意指CNN以圖像區(qū)域作為輸入,這個工作最終發(fā)展成了一個系列,也啟發(fā)和衍生出了大量的后續(xù)工作,這一場大火簡直燒紅了計算機視覺領域的半邊天。
R-CNN的提出變革了目標檢測方法中很多舊有的做法,同時在標準的目標檢測評測數(shù)據(jù)集上使檢測精度得到了前所未有的提升。在檢測方法上的變革,首當其沖的是拋棄了滑動窗口范式,取而代之的是一個新的生成候選窗口的環(huán)節(jié)。對于給定的圖像,不再用一個滑動窗口去對圖像進行掃描,枚舉所有可能的情況,而是采用某種方式“提名”出一些候選窗口,在獲得對待檢測目標可接受的召回率的前提下,候選窗口的數(shù)量可以控制在幾千個或者幾百個。從某種意義上講,VJ 人臉檢測器中多個分類器相級聯(lián),每一級分類器都在為接下來的一級分類器提名候選窗口,但是這和 R-CNN 所采用的生成候選窗口的方式有一個重要的區(qū)別:實際上所有的窗口仍然都被檢查了一遍,只是不斷在排除,這是一種減法式的方案。相比之下,R-CNN 采用的候選窗口生成方式,是根據(jù)圖像的某些特征來猜測可能有哪些地方存在待檢測的目標,以及這些目標有多大,這是一種從無到有的加法式的方案。Selective Search是一種典型的候選窗口生成方法,其采用了圖像分割的思路,簡單地說,Selective Search方法先基于各種顏色特征將圖像劃分為多個小塊,然后自底向上地對不同的塊進行合并,在這個過程中,合并前后的每一個塊都對應于一個候選窗口,最后挑出最有可能包含待檢測目標的窗口作為候選窗口。
除了引入候選窗口生成方法,第二點非常大的改變在特征提取上:不再采用人工設計的特征,而是用 CNN來自動學習特征。特征提取過程就是從原始的輸入圖像(像素顏色值構成的矩陣)變換到特征向量的過程,之前的如 Haar 特征等是科研工作者根據(jù)自己的經(jīng)驗和對研究對象的認識設計出來的,換言之人工定義了一個變換,而新的做法是只限定這個變換能夠用CNN來表示——事實上 CNN 已經(jīng)可以表示足夠多足夠復雜的變換,而不具體設計特征提取的細節(jié),用訓練數(shù)據(jù)來取代人的角色。這種自動學習特征的做法是深度學習一個非常鮮明的特色。自動去學習合適的特征,這種做法的好處和讓分類器自動去學習自己的參數(shù)的好處是類似的,不僅避免了人工干預,解放了人力,而且有利于學習到更契合實際數(shù)據(jù)和目標的特征來,特征提取和分類兩個環(huán)節(jié)可以相互促進,相輔相成;不過缺點也是有的,自動學習出的特征往往可解釋性比較差,不能讓人直觀地去理解為什么這樣提取出特征會更好,另外就是對訓練集會產(chǎn)生一定程度的依賴。
還有一點值得一提的是,R-CNN在檢測過程中引入了一個新的環(huán)節(jié):邊框回歸(友情提醒:“框”念第四聲,不是多音字!),檢測不再僅僅是一個分類問題,它還是一個回歸問題——回歸和分類的區(qū)別就在于回歸模型輸出的不是離散的類別標簽,而是連續(xù)的實數(shù)值。邊框回歸指的是在給定窗口的基礎上去預測真實檢測框的位置和大小,也就是說,有了候選窗口之后,如果其被判別成了一個人臉窗口,那就會進一步被調(diào)整以得到更加精確的位置和大小——和待檢測目標貼合得更好。邊框回歸一方面提供了一個新的角度來定義檢測任務,另一方面對于提高檢測結果的精確度有比較顯著的作用。
用R-CNN進行目標檢測的流程是:先采用如 Selective Search等方法生成候選窗口,然后用學習好的CNN提取候選窗口對應的特征,接著訓練分類器基于提取的特征對候選窗口進行分類,最后對判別為人臉的窗口采用邊框回歸進行修正。
雖然R-CNN帶來了目標檢測精度的一次巨大提升,然而由于所采用的候選窗口生成方法和深度網(wǎng)絡都具有比較高的計算復雜度,因而檢測速度非常慢。為了解決R-CNN的速度問題,緊接著出現(xiàn)了Fast R-CNN和Faster R-CNN,從名字上可以看到,它們的速度一個比一個快。第一步加速是采用了類似于 VJ 人臉檢測器中積分圖的策略,積分圖是對應整張輸入圖像計算的,它就像一張表,在提取單個窗口的特征時,直接通過查表來獲取所需要的數(shù)據(jù),然后進行簡單的計算即可,在R-CNN中每個候選窗口都需要單獨通過CNN來提取特征,當兩個窗口之間有重疊部分時,重疊部分實際上被重復計算了兩次,而在 Fast R-CNN 中,直接以整張圖像作為輸入,先得到整張圖對應的卷積特征圖,然后對于每一個候選窗口,在提取特征時直接去整張圖對應的卷積特征圖上取出窗口對應的區(qū)域,從而避免重復計算,之后只需要通過所謂的RoIPooling層來將所有的區(qū)域放縮到相同大小即可,這一策略的使用可以提供幾十甚至上百倍的加速。第二步加速,F(xiàn)ast R-CNN利用了一種名為 SVD 的矩陣分解技術,其作用是將一個大的矩陣(近似)拆解為三個小的矩陣的乘積,使得拆解之后三個矩陣的元素數(shù)目遠小于原來大矩陣的元素數(shù)目,從而達到在計算矩陣乘法時降低計算量的目的,通過將 SVD應用于全連接層的權值矩陣,處理一張圖片所需要的時間能夠降低30%。
第三步加速,F(xiàn)aster R-CNN開始著眼于生成候選窗口的環(huán)節(jié),其采用 CNN 來生成候選窗口,同時讓其和分類、邊框回歸所使用的 CNN 共享卷積層,這樣使得兩個步驟中可以使用同樣的卷積特征圖,從而極大地減少計算量。
除了采用各種策略進行加速,從R-CNN到Faster R-CNN,檢測的框架和網(wǎng)絡結構也在不斷發(fā)生改變。R-CNN從整體框架上來說,和傳統(tǒng)的檢測方法沒有本質(zhì)區(qū)別,不同的環(huán)節(jié)由單獨的模塊來完成:一個模塊生成候選窗口(Selective Search),一個模塊進行特征提?。–NN),一個模塊對窗口進行分類(SVM),除此之外還增加了一個模塊做邊框回歸。到Fast R-CNN的時候,后面三個模塊合并成了一個模塊,全部都用CNN來完成,因此整個系統(tǒng)實際上只剩下兩個模塊:一個模塊生成候選窗口,另一個模塊直接對窗口進行分類和修正。再到Faster R-CNN,所有的模塊都整合到了一個CNN中來完成,形成了一種端到端的框架:直接從輸入圖像通過一個模型得到最終的檢測結果,這種多任務在同一個模型中共同學習的做法,能夠有效利用任務之間的相關性,達到相輔相成、相得益彰的效果。從 R-CNN 到 Faster R-CNN,這是一個化零為整的過程,其之所以能夠成功,一方面得益于CNN強大的非線性建模能力,能夠?qū)W習出契合各種不同子任務的特征,另一方面也是因為人們認識和思考檢測問題的角度在不斷發(fā)生改變,打破舊有滑動窗口的框架,將檢測看成一個回歸問題,不同任務之間的耦合。盡管目前 Faster R-CNN在速度上仍然無法和采用非深度學習方法的檢測器相比,但是隨著硬件計算能力的不斷提升和新的CNN加速策略的接連出現(xiàn),速度問題在不久的將來一定能夠得到解決。
全卷積網(wǎng)絡和 DenseBox
卷積層是CNN區(qū)別于其它類型神經(jīng)網(wǎng)絡的本質(zhì)特點,不過CNN通常也不僅僅只包含卷積層,其也會包含全連接層,全連接層的壞處就在于其會破壞圖像的空間結構,因此人們便開始用卷積層來“替代”全連接層,通常采用1 × 1的卷積核,這種不包含全連接層的CNN稱為全卷積網(wǎng)絡(FCN)。FCN最初是用于圖像分割任務,之后開始在計算機視覺領域的各種問題上得到應用,事實上,F(xiàn)aster R-CNN中用來生成候選窗口的CNN就是一個FCN。
FCN 的特點就在于輸入和輸出都是二維的圖像,并且輸出和輸入具有相對應的空間結構,在這種情況下,我們可以將 FCN 的輸出看成是一張熱度圖,用熱度來指示待檢測目標的位置和覆蓋的區(qū)域:在目標所處的區(qū)域內(nèi)顯示較高的熱度,而在背景區(qū)域顯示較低的熱度,這也可以看成是對圖像上的每一個像素點都進行了分類:這個點是否位于待檢測的目標上。DenseBox是一個典型的基于全卷積網(wǎng)絡的目標檢測器,其通過 FCN得到待檢測目標的熱度圖,然后根據(jù)熱度圖來獲得目標的位置和大小,這給目標檢測又提供了一種新的問題解決思路。(下面這張圖其實來源于另一篇論文,放在這里僅用來幫助讀者了解人臉熱度圖長什么樣子。)
在DenseBox中,還有一點值得一提,其在分類的同時還會預測特征點的位置——就像上篇中提到的 JointCascade一樣,DenseBox將檢測和特征點定位兩個任務集成在同一個網(wǎng)絡中,并且也用熱圖的方式來確定每個點的位置。
基于CNN的人臉檢測器
上面提到的都是通用的目標檢測器,這些檢測器可以直接通過人臉圖像來學習從而得到人臉檢測器,雖然它們沒有考慮人臉本身的特殊性,但是也能夠獲得非常好的精度,這反映出不同類型目標的檢測其實是相通的,存在一套通用的機制來處理目標檢測問題。也有一部分工作是專門針對人臉檢測任務的,有的考慮了人臉自身的特點,有的其實也是比較通用的目標檢測方法,可以自然地遷移到各種類型目標的檢測任務中去。
FacenessNet是專門針對人臉設計的一個檢測器,其考慮了頭發(fā)、眼睛、鼻子、嘴巴和胡子這五個臉部特征,簡單地說,對于一個候選窗口,F(xiàn)acenessNet 先分析這五個部分是否存在,然后再進一步判斷是不是一張人臉。
這種方法一方面同時利用了整體和局部的信息,能夠從不同的角度對圖像內(nèi)容進行刻畫,使得人臉和非人臉能夠更好地被區(qū)分;另一方面增強了對遮擋的魯棒性,人臉的局部遮擋會影響整體表現(xiàn)出的特征,但是并不會對所有的局部區(qū)域造成影響,因而增強了檢測器對遮擋的容忍度。
檢測精度的大躍進
隨著越來越多的檢測器開始采用深度網(wǎng)絡,人臉檢測的精度也開始大幅地提升。在2014年,學術界在FDDB上取得的最好檢測精度是在100個誤檢時達到84%的檢測率,達到這一精度的是JointCascade 人臉檢測器。到2015年,這一紀錄被FacenessNet 打破,在100個誤檢時,檢測率接近88%,提升了幾乎4個百分點。不僅如此,工業(yè)界的最好記錄已經(jīng)達到了100個誤檢時92.5%的檢測率,檢測率達到 90%以上的公司還不止一家,并且這些結果都是通過基于深度網(wǎng)絡的人臉檢測器所獲得的。
在大幅提升人臉檢測精度的同時,深度學習實際上還降低了包括人臉檢測技術在內(nèi)的各種目標檢測技術的門檻,幾乎到了只要采用深度網(wǎng)絡就能獲得不錯的檢測精度的地步;在精度方面,相比于基于非深度學習方法的檢測器,基于深度學習方法的檢測器在起點上就要高出一截。不過在檢測速度方面,基于深度學習方法的檢測器還難以達到實際應用的需求,即使是在GPU上,也還不能以實時的速度(25fps)運行;而反過來看,一旦速度問題能夠得到解決,那么深度學習也一定會在目標檢測任務上有更廣泛和更大規(guī)模的應用。
|傳統(tǒng)人臉檢測技術和 CNN 的結合
VJ人臉檢測器自提出以來,啟發(fā)和影響了后續(xù)的大量工作,所引入的積分圖、AdaBoost方法、級聯(lián)結構等至今仍在各種各樣的檢測器中以不同的形式被使用。傳統(tǒng)的人臉檢測技術優(yōu)勢在于速度,而在精度上則相比基于深度網(wǎng)絡的方法要略輸一籌,在這種情況下,一個自然的想法就是:能否將傳統(tǒng)的人臉檢測技術和深度網(wǎng)絡(如CNN)相結合,在保證檢測速度的情況下進一步提升精度?
Cascade CNN可以認為是傳統(tǒng)技術和深度網(wǎng)絡相結合的一個代表,和VJ人臉檢測器一樣,其包含了多個分類器,這些分類器采用級聯(lián)結構進行組織,然而不同的地方在于,Cascade CNN采用CNN作為每一級的分類器,而不是用AdaBoost方法通過多個弱分類器組合成的強分類器,并且也不再有單獨的特征提取過程,特征提取和分類都由CNN來統(tǒng)一完成。在檢測過程中,Cascade CNN采用的還是傳統(tǒng)的滑動窗口范式,為了避免過高的計算開銷,第一級的CNN僅包含一個卷積層和一個全連接層,并且輸入圖像的尺寸控制在12*12,同時滑動窗口的步長設置為4個像素,在這種情況下,一方面每張圖像上候選窗口的數(shù)量變少了,窗口數(shù)量隨著滑動步長的增大是按照平方規(guī)律下降的,另一方面每個窗口提取特征和分類的計算開銷也受到了嚴格控制。經(jīng)過第一級CNN之后,由于通過的窗口中人臉和非人臉窗口之間更加難以區(qū)分,因此第二級CNN將輸入圖像的尺寸增大到了24*24,以利用更多的信息,并且提高了網(wǎng)絡復雜度——雖然仍然只包含一個卷積層和一個全連接層,但是卷積層有更多的卷積核,全連接層有更多的節(jié)點。第三級CNN也采用了類似的思路,增大輸入圖像大小的同時提高網(wǎng)絡的復雜度——采用了兩個卷積層和一個全連接層。通過引入CNN,傳統(tǒng)的級聯(lián)結構也煥發(fā)出了新的光彩,在FDDB上,Cascade CNN在產(chǎn)生100個誤檢的時候達到了85%的檢測率,而在速度上,對于大小為640*480的圖像,在限定可檢測的最小人臉大小為80*80的條件下,Cascade CNN在CPU上能夠保持接近10fps的處理速度。Cascade CNN中還采用了一些其它的技術來保證檢測的精度和速度,如多尺度融合、邊框校準、非極大值抑制等,限于篇幅,這里不再繼續(xù)展開。
吸取傳統(tǒng)人臉檢測技術中的精華,借鑒深度學習研究的最新成果,在對問題的深刻思考和理解上,探尋舊瓶裝新酒的最佳模式,這是一條值得去繼續(xù)探索的道路。
|對現(xiàn)狀和未來的簡單思考
經(jīng)過幾十年的研究和發(fā)展,人臉檢測方法正日趨成熟,在現(xiàn)實場景中也已經(jīng)得到了比較廣泛的應用,但是人臉檢測問題還并沒有被完全解決,復雜多樣的姿態(tài)變化,千奇百怪的遮擋情況,捉摸不定的光照條件,不同的分辨率,迥異的清晰度,微妙的膚色差,各種內(nèi)外因素的共同作用讓人臉的變化模式變得極其豐富,而目前還沒有檢測器可以同時對所有的變化模式都足夠魯棒。
目前的人臉檢測器在FDDB上已經(jīng)能夠取得不錯的性能,不少檢測器在100個誤檢時的檢測率達到了80%以上,這意味著它們檢測出40個以上的人臉才會出現(xiàn)一個誤檢。到目前為止,本文所提到的誤檢和召回率都對應于FDDB上的離散型得分ROC曲線,所謂“離散型”是指每個人臉是否被檢測到是分別用1和0來表示的;相對應地也有連續(xù)型得分ROC曲線,而“連續(xù)型”指的是人臉被檢測到與否是通過檢測框和標注框之間的交并比來表示的,從某種意義上來說,連續(xù)型得分試圖評判的是檢測框的準確程度,即檢測框的位置和大小與實際人臉的位置和大小的接近程度。對于兩個不同的檢測器而言,兩類曲線的相對關系并非是完全一致的:離散型得分ROC曲線接近的兩個檢測器,其對應的連續(xù)型得分ROC曲線可能存在明顯的差異。最直接地,這說明有的檢測器雖然檢測出了人臉,但是檢測框的準確度比較低,但其實造成這種不一致性的另一個重要原因還在于檢測框與標注框之間的差異性。在FDDB中人臉是通過橢圓來進行標注的,大多數(shù)情況下,幾乎會包含整個頭部,相比之下,檢測器給出的檢測結果是矩形的人臉框,并且通常只包含臉部區(qū)域——尤其是對于采用滑動窗口范式的檢測器,這就很容易導致檢測框和標注橢圓之間的交并比過小,甚至可能小于0.5。對不同的檢測器來說,其能夠最好地區(qū)分人臉和非人臉窗口的情況所對應的框的大小會有所不同,從而不同檢測器給出的檢測框也會存在差別,部分方法會采用擴大檢測框或者回歸橢圓的方式,以盡量減小由標注框和檢測框的不一致性所造成的影響,保證評測的公平性。
除了標注框的問題之外,要更為客觀地看待FDDB上的評測結果,我們還需要考慮另外一點:FDDB測試圖像上的人臉和實際應用場景的差異性,換言之,我們需要思考這樣一個問題:人臉檢測器在FDDB上所達到的精度能否真實反映其在實際應用場景中的表現(xiàn)?FDDB中測試圖像上的人臉包含了從表情到姿態(tài)、從光照到遮擋等各個方面的變化,因而是一個相對通用的數(shù)據(jù)集,但是在實際應用中,不同場景下人臉往往呈現(xiàn)出比較鮮明的特點,例如在視頻監(jiān)控場景下,由于攝像頭架設位置較高和分辨率有限,同時在存儲和傳輸過程中會引入噪聲,因此圖像上的人臉往往具有較大的俯仰角,且清晰度較低,在這種情況下,原來在FDDB上表現(xiàn)出色的檢測器就未必能夠達到令人滿意的精度。在FDDB中,有大約10%的人臉其大小在40*40以下,而對于人臉識別等一些任務來說,太小的人臉并不適合,因此如果一個檢測器因為在小臉上表現(xiàn)不好而導致其在FDDB上表現(xiàn)平平,而在較大的人臉上和表現(xiàn)更好的一些檢測器沒有太大差別,那么將其應用在人臉識別任務中是完全沒有問題的,甚至還可能因為模型簡單帶來速度上的優(yōu)勢。總而言之,當面對具體的應用場景時,一方面,我們還需要具體問題具體分析,不能盲目地根據(jù)檢測器在FDDB或者其它人臉檢測數(shù)據(jù)集上精度來下結論;另一方面,我們需要基于當前的人臉檢測器去適配實際所需要處理的數(shù)據(jù),以使檢測器能夠在特定的場景下達到更好的精度。
除了FDDB之外,比較常用的人臉檢測評測集還有AFW,以及最近幾年公開的MALF、IJB-A和Wider Face。AFW包含的圖像數(shù)比較少,總共只有205張測試圖像,標注了468張人臉,不過由于其覆蓋了眾多的人臉變化模式,具有一定的挑戰(zhàn)性,因此也比較常用。另外三個評測集在圖像規(guī)模上都相對較大,其中MALF和Wider Face沒有發(fā)布人臉標注和評測程序,需要提交檢測結果給發(fā)布方進行評測,這在一定程度上防止了由于評測方式不一致而導致比較不公平和對測試集進行過擬合的情況;這兩個數(shù)據(jù)集還按照不同的屬性(如分辨率、姿態(tài)、難易程度等)將測試集分成了多個子集,評測時會同時在全集和子集上進行測試,這能夠更加全面地反映檢測器在不同場景下的能力。IJB-A中不僅包含靜態(tài)人臉圖像,還有一部分是從視頻中提取的視頻幀。在上面提到的所有評測集中,只有Wider Face提供了專門的訓練集和驗證集,其它評測集合都只包含測試集,這其實也給不同方法的比較帶來了一個問題:我們難以判斷導致檢測器在精度上存在差異的原因到底是訓練數(shù)據(jù)還是算法和模型本身,也不知道這兩方面的因素誰起的作用更大。Wider Face應該是難度最大的一個評測集,所標注的人臉在姿態(tài)、遮擋情況等方面的跨度非常大,并且分辨率在50*50以下的人臉占到了50%(訓練集和校驗集中達到了80%以上),不過在部分應用場景下(如人臉識別),過于關注小尺寸的人臉并沒有必要。
雖然基于深度網(wǎng)絡的檢測器目前能夠達到很高的檢測精度,并且其通用性非常強,但其所付出的計算代價也非常高,因此這類檢測器突破的關鍵在于深度網(wǎng)絡的簡化和加速。除此之外,如果單單考慮人臉檢測,這個分類問題相對來說要簡單一些,也存在一種可能性:直接學習一個小型的網(wǎng)絡就能足夠好地完成這個任務。對于采用非深度學習方法的檢測器,其基礎的檢測精度相比會低不少,但是速度上會有明顯的優(yōu)勢,因此其關鍵在于針對特定應用場景下的問題進行合理的改進和適配,以獲得更好的檢測精度。
為了提供更加便利的人機交互接口,創(chuàng)造有效的視覺理解手段,讓機器變得有溫度,會觀察,能感受,廣大的科研工作者們在人臉檢測和通用目標檢測任務上還在繼續(xù)探索。終有一天,當我們和機器四目相對時,彼此能夠會心一笑:科學讓生活更美好!
后記
本文從人臉檢測任務本身開始,介紹了人臉檢測的一般流程,然后分別介紹了三類不同的人臉檢測方法:以VJ人臉檢測器為代表的傳統(tǒng)方法,基于深度網(wǎng)絡的現(xiàn)代方法,以及將傳統(tǒng)的人臉檢測技術和深度網(wǎng)絡相結合的方法。然而,在人臉檢測幾十年的研究歷程中,還有很多其它的方法不能歸到這三類中來,其中比較重要的包括基于部件模型的方法和基于范本的方法,雖然本文沒有對這兩類方法進行介紹,但是它們在人臉檢測這一問題上仍然具有重要的地位和意義,感興趣的讀者可以進一步去閱讀相關論文進行了解。
雷鋒網(wǎng)(搜索“雷鋒網(wǎng)”公眾號關注)注:本文由作者發(fā)布于深度學習大講堂,轉(zhuǎn)載請聯(lián)系授權并保留出處和作者,不得刪減內(nèi)容。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。