當前位置:米奇創意網>生活小發明>攝影技巧>

技術流:數碼相機中的人臉檢測技術與發展

攝影技巧 閲讀(2.59W)

市場上許多數碼相機帶有“人臉識別”功能,拍照的時候通過定位人臉進行準確聚焦。它的工作原理就是實時人臉檢測(Face detection)技術,把它稱為人臉識別其實是不準確的。檢測或者定位是指在一個圖像中找到人臉的位置,而識別(Recognition)是要指出這人是張三還是李四。識別是檢測的後續步驟,只有當人臉正確定位後,識別才能進行。

在1990年代之前,很多人臉檢測的方法是通過提取圖像中臉的明顯輪廓,比如鼻子眼睛和下巴的輪廓來進行的。比如先對圖像進行邊緣提取,根據人臉形狀為橢圓這一先驗知識找到臉部輪廓;或者通過對圖像水平和垂直方向的灰度值進行累加(稱為積分投影),在一維投影曲線上判斷眼睛或者嘴的位置。在人們用計算機進行人臉檢測的早期階段,這樣的思路是比較普遍,它看起來和一個普通人對“在圖像中怎樣找到人臉?”的回答一致:“先找眼睛鼻子或者嘴巴的輪廓......”。也許也有人會回答:“先根據皮膚顏色......”。實際上,形狀輪廓,或者膚色都不是很好的檢測線索。對於複雜的圖像通過設置簡單的閾值提取輪廓,很難奏效;而膚色也容易和圖像背景顏色相混淆,更何況顏色信息在黑白圖像中根本不存在。


進入90年代,隨着計算機處理能力不斷增強,進行圖像處理運算的門檻大大降低了。人們在一台普通的PC上也可以進行人臉檢測和識別算法的研究,大量人臉識別和檢測的相關算法湧現出來。人臉檢測方法也從之前的基於形狀輪廓的思路,轉向基於圖像的方法。

數字圖像處理通常把一個圖像表達成矩陣的形式,一幅黑白圖像矩陣中每個元素(稱為像素)用8Bit(可表達0~255)的整數表示圖像亮度。這樣的矩陣也可以看做一個3維曲面,如下圖。一個8Bit黑白圖像一般稱為灰度圖像,彩色圖像則是由3層分別表示紅黃藍的8Bit圖像(一個像素24Bit)疊加而成的。一個64×64的人臉圖像矩陣,它所能提供的全部信息都包含在這個矩陣裏,不會更多(實際上它也可能是有宂餘的),所以利用圖像的信息進行人臉檢測是當前最常規的方法。

技術流:數碼相機中的人臉檢測技術與發展

人臉檢測的基本方法是用一個一系列小窗口掃描照片,窗口的尺寸可視實際人臉的大小選擇,比如{16,20,24,32,..., 120} 。掃描窗口,這可以説是人臉圖像或者其他目標檢測的基本的工作方式,只有這樣才能覆蓋可能出現在不同位置、不同大小的人臉。對窗口中的圖像塊提取一系列特徵,當這些特徵表現出的統計信息滿足條件,才判斷這個圖像為人臉圖像。這是模式識別(Pattern recognition)領域的一個典型的兩類(“人臉”和“非人臉”)分類問題。

MIT媒體試驗室的Turk和Pentland在基於圖像的人臉檢測和識別方面做出了開創性的工作。1991年他們發表基於主成份分析(PCA)的方法。他們把人臉圖像二維矩陣每行首尾相接組成一個向量,這個向量可以看做是高維空間中的一個點。比如16×16的一個灰度圖像,可以看成是256維空間中的一個點。大量的人臉圖像在這樣的空間中應該是聚在一起的,叫做聚類(俗稱扎堆)。一個“非人臉”圖像離開這個“堆”則比較遠。這樣扎堆的人臉與非人臉圖像的邊界並不光滑,所以一般通過降低維數(高維空間投影到低維子空間,PCA就是幹這個的)的方法去除噪聲,另一方面在低維空間的計算量也會大大減小。作為人臉判斷的依據,“遠”和“近”是相對的概念,可以轉化為某種概率表達,比如高斯分佈的形式,但作為最終判斷Yes或No是需要一個閾值,它要在正確率和錯檢率之間取得平衡。這樣的閾值的選取非常微妙,在圖像處理和模式識別領域裏是避免不了的。所以有人説,無論多麼好的算法,歸根結底都是trade-off(權衡)。

基於PCA的方法,需要先對掃描窗口進行歸一化,變成長度一致的矢量,再通過一個變換矩陣進行投影,變到低維子空間。這樣的矩陣乘法,其實是由一系列矢量內積運算組成的,簡單説,就象一個2維矢量(4,9)投影到x座標軸(1,0),只要做內積即可:4*1+9*0=4。這樣的簡單的步驟,對於大量掃描窗口來説,計算量還是很大的。這對數碼相機的系統(比如Arm系統或者加上圖像處理DSP芯片)來説,負擔太重,幾乎無法做到實時處理。

另外,檢測算法的缺陷也導致無法有很好的魯棒性(robustness)。把圖像窗口矩陣簡單地首尾相接,實際上忽視了人臉在空間上的連續性,而僅僅是把圖像看成一個矢量,沒有更充分地利用人臉的先驗知識,比如眼睛區域的總是比臉部顏色深一些。

真正突破性的進展出現在2001年,P. Viola和M.J. Jones發表的會議論文,提出了基於“積分圖像”和AdaBoost訓練的著名方法,才使得實時人臉檢測變成可能。這篇文章幾乎可以説是具有劃時代的意義,可以毫不誇張地説,現在市場上幾乎所有的人臉算法都是以它為基礎的。我在一段很長的時間裏所做的工作都和它有關。以後有空我們再來談它吧,今天就到這裏。

相關文獻:

[1] 基於PCA方法在這裏可以查到,第一篇就是M. Turk, A. Pentland, Eigenfaces for Recognition。

[2]Viola-Jones論文Robust Real-time Object Detection