高樹靜,王程龍,董廷坤
青島科技大學(xué) 信息科學(xué)技術(shù)學(xué)院,山東 青島266000
從20 世紀(jì)60 年代開始,人臉檢測技術(shù)一直不斷地被優(yōu)化和升級。近年來,對人臉檢測系統(tǒng)的研究主要集中在算法和系統(tǒng)實現(xiàn)兩方面。
在算法方面,主要研究目標(biāo)圍繞著提高準(zhǔn)確率和檢測速度。Wei等[1]試圖采用Adaboost算法尋找ROI(Region Of Interest)然后在利用膚色融合分割的方法進行人臉檢測,彌補Adaboost 算法側(cè)臉漏檢問題,但是準(zhǔn)確率仍需提高。劉王勝[2]對Adaboost 算進行改進,利用視頻幀前后相關(guān)性,提高人臉檢測的速率,可以達到每幀圖像檢測耗時在96 ms,這是很不錯的改進。但是最近也有一些利用視頻前后幀相關(guān)性進行研究的成果,比如齊蘇敏[3]采用Phash(感知哈希)算法對人臉追蹤中前后視頻相關(guān)性的研究是一個精簡且準(zhǔn)確率高的方法。結(jié)合前面學(xué)者的研究成果,本文利用YCbCr閾值分割提取膚色感興趣區(qū)域,減少Adaboost 人臉檢測范圍,達到提速的目的,再采用精簡且實時性高的Phash算法對人臉追蹤,減少人臉檢測次數(shù),提升人臉檢測的實時性。
在系統(tǒng)實現(xiàn)方面,主要目標(biāo)是滿足人臉檢測系統(tǒng)的實時性、準(zhǔn)確率和便攜性的需求。李昌湘等人[4]將Adaboost算法移植到嵌入式平臺,能滿足基本的人臉檢測準(zhǔn)確率,但實時性卻無法保證。龐偉等人[5]采用將Adaboost算法移植到FPGA 平臺,能滿足實時性要求,但以消耗大量的邏輯資源和存儲資源為代價,因此硬件成本卻開銷太大,不利于產(chǎn)品成本的降低。在文獻[6]充分利用SOPC 的靈活性,達到22 幀/s 的檢測速度,表明SOPC是個很好的研究方案。經(jīng)過前面的研究成果,本文采用Xilinx 的ZYNQ SoC 平臺進行實時人臉檢測,將人臉檢測算法中不利于ARM 處理的浮點數(shù)定點化處理之后再移植到ZYNQ平臺達到加速檢測目的,然后通過合理的軟硬件協(xié)同設(shè)計,滿足了系統(tǒng)實時性要求和便捷性需求的同時降低硬件成本。
本文主要使用的算法包含簡單的膚色分割、Adaboost人臉檢測算法與Phash 人臉追蹤算法。對Adaboost 人臉檢測算法進行優(yōu)化,主要對強分類器與弱分類器參數(shù)進行優(yōu)化,將其中浮點數(shù)轉(zhuǎn)化為定點數(shù),也就是將浮點數(shù)中的小數(shù)點全固定下來。這樣減少了浮點運算使得人臉檢測速度更快,也更適合ZYNQ平臺使用。
因為膚色的差異體現(xiàn)在亮度上,利用人臉皮膚的色度的聚類特征,可以將輸入視頻中的類膚色區(qū)域提取出來,而通常采集到的圖像是RGB格式,而RGB膚色空間對膚色聚類性不太理想,但是YCbCr膚色空間中可以容易地將圖像的亮度信息提取出來,所以首先將RGB 膚色空間轉(zhuǎn)到Y(jié)CbCr 膚色空間,官方提供的RGB 轉(zhuǎn)換YcbCr公式如式(1):

但是在式(1)展開的表達式中,有很多小數(shù)點運算,采用移位運算來避免出現(xiàn)小數(shù)點運算,采用如式(2)~(4)所示的方式將RGB膚色空間轉(zhuǎn)為YCbCr膚色空間:

利用移位運算減少了處理器對小數(shù)點處理,更快的檢測速率。主流的膚色分割是高斯模型和橢圓模型,但是這兩種算法有較多除法和浮點運算,不便于用于FPGA實現(xiàn),本文采用膚色閾值對膚色特征提取,因為CbCr分量具有很好的聚類性,設(shè)置合理的閾值,即可提取出膚色區(qū)域。在文獻[7]中的實驗表明,人臉的膚色像素值集中在90 ≤Cb ≤135,137 ≤Cr ≤167,故本文也將CbCr像素值處于閾值范圍內(nèi)的像素設(shè)置為1,其他像素值設(shè)置為0,即可提取出膚色區(qū)域,計算表達式如式(5)所示:

Adaboost 算法[8]的核心是一種前向迭代算法,通過大量的正負人臉樣本訓(xùn)練得到一系列的弱分類器,利用將弱分類器級聯(lián)成為強分類器。
2.2.1 Haar特征
本文選用Paul Viola 和Michael Jones[9]在牛津大學(xué)提出圖1 中四個方向的Haar 特征作為人臉分類器訓(xùn)練的特征。

圖1 Haar特征圖
2.2.2 分類器的訓(xùn)練
(1)選定樣本訓(xùn)練集(x1,y1),(x2,y2),(x3,y3),…,(xn,yn),其中yi代表樣本類別,yi=0為負樣本,yi=1為正樣本,n代表訓(xùn)練樣本總個數(shù)。
(2)樣本平均分配權(quán)值,正樣本權(quán)值為ω1,i=1/2w,負樣本權(quán)值為ω1,i=1/2m,其中正樣本個數(shù)為w,負樣本個數(shù)為m。假設(shè)訓(xùn)練T 次,則對權(quán)值進行歸一化處理:

(3)然后由選定的Haar 特征f、閾值θ 和不等號方向p來獲得弱分類器:

(4)產(chǎn)生弱分類器后,對其進行加權(quán)ω求和得到弱分類器的誤檢率βf:

(5)利用大量的樣本訓(xùn)練得到,最小錯誤率min(βf)對應(yīng)的分類器Ν( x,f ,p,q)
(7)最后形成最后需要的強分類器參數(shù)μt:

采用MIT-CBCL 人臉庫(包含2 429 個人臉正樣本,4 548 個負樣本),利用人臉庫中的正樣本和負樣本訓(xùn)練得到需要的強分類器,可以實現(xiàn)Adaboost人臉檢測。
2.2.3 分類器參數(shù)優(yōu)化
弱分類器閾值參數(shù)θ、強分類器中μt、Haar 特征值f都是是浮點形式存儲。浮點數(shù)在轉(zhuǎn)換過程中,盡量逼近參數(shù)精度,但不免會犧牲部分?jǐn)?shù)據(jù)精度來換取檢測算法速率的提升,對弱分類器的條件比較部分轉(zhuǎn)換方式:

強分類器轉(zhuǎn)換方式:

訓(xùn)練得到的弱分類器是22 級,總共2 135 個弱分類器,需要對2 135個弱分類器,22個強分類器進行定點化處理,但強分類器由弱分類器組成所以修改個數(shù)仍為2 135。由于左右兩側(cè)都有浮點數(shù),這樣先放大后比較也不會影響比較結(jié)果。
視頻幀的上下幀信息有強烈的時空連續(xù)性,利用這樣的時空關(guān)系,構(gòu)建Phash 函數(shù)序列[10]對人臉圖像進行追蹤。
2.3.1 感知哈希序列
感知哈希特征提取算法能夠準(zhǔn)確又快速地提取待檢測圖像中與目標(biāo)圖像區(qū)域的相似部分,具有非常優(yōu)秀的表現(xiàn),因此被廣泛的運用。
本文基于DCT 壓縮感知哈希算法,離散余弦變換(DCT)是一種圖像壓縮算法,將灰度人臉圖像H( )X,Y,通過DCT(離散余弦變換)壓縮獲得32×32 的尺寸的h(x,y)圖像[11],壓縮后可以減少圖像冗余信息,當(dāng)轉(zhuǎn)化到頻域后,系數(shù)從左上角到右下角,從低頻到高頻部分系數(shù)絕對值逐漸減小,能量集中于低頻部分。具體的變換過程如下所示:


F(u,v)是變換矩陣,u,v 是頻率采樣值,x,y 是空間采樣值。提取生成的32×32 的矩陣中最低頻的部分,也就是左上角的8×8 的矩陣,然后將低頻矩陣進行二值化,即大于DCT 均值的賦值1,低于均值的賦值為0,將形成的8×8的矩陣,排列成64位整數(shù)的哈希序列,
2.3.2 哈希值匹配
通過哈希序列可以計算模板圖像和目標(biāo)圖像之間的漢明距離,可以進行相識度判斷。計算方法如式(17)所示:

其中,Htemple(i )表示模板幀中的哈希序列第i 位。Hobject(i )表示待匹配窗口的哈希序列第i 位,為相識度因子,越大表示模板窗口和目標(biāo)窗口的相識度越小。設(shè)置相識度的閾值L,當(dāng)時候表示人臉匹配成功,若,則認(rèn)為模板與目標(biāo)相差較大。閾值設(shè)置的大小直接影響了匹配的效果,由于本文中人臉移動緩慢,將閾值設(shè)置為L=7即可準(zhǔn)確找到人臉區(qū)域。
2.3.3 目標(biāo)匹配與模板的更新
模板圖像跟隨目標(biāo)的變化而更新是跟蹤算法的關(guān)鍵一部分。本文采用搜索跟蹤的策略,將確定的位置坐標(biāo)作為下一幀菱形搜索的起點坐標(biāo),搜索區(qū)域長寬是模板區(qū)域長寬的4 倍大小,對該區(qū)域計算感知哈希值,并計算與目標(biāo)區(qū)域的漢明距離。
本設(shè)計將邏輯運算簡單,重復(fù)度高的膚色分割算法和中值濾波放在PL 部分,其中中值濾波采用三級流水線結(jié)構(gòu)設(shè)計,這樣加速圖像預(yù)處理。將邏輯復(fù)雜的人臉檢測和追蹤放在PS 部分,通過分析分類器的特點,利用不同窗口特征尺寸無關(guān)性,采用雙核ARM 并行人臉檢測也能實現(xiàn)加速人臉檢測。
采用Xilinx 開發(fā)的Vivado 2017.3 來進行整體設(shè)計,實現(xiàn)平臺是zybo 開發(fā)工具。平臺中包含28 000 多邏輯單元和665 MHz 的雙核ARM Cortex-A9 處理器,PS 包含32 KB 的一級緩存器和512 KB 的二級緩存器,并包含512 MB 的DDR3 存儲器[12]。系統(tǒng)軟硬協(xié)同實現(xiàn)圖像處理的工作,系統(tǒng)上電后進行初始化,PL 部分控制攝像頭采集圖像并進行初步處理后轉(zhuǎn)化成AXI-stream信號,通過VDMA傳入PS部分,在PS部分通過AXI-HP或者AXI-GP接口獲得VDMA傳入的每一幀信號,DDR3 Controller控制信號緩存入DDR3中,PS部分可以從DDR3中取出每一幀圖像進行人臉檢測。
本文所使用的算法包括YcbCr 膚色提取,二值化,中值濾波,最小外接矩陣獲取,Adaboost 人臉檢測和Phash人臉追蹤。系統(tǒng)流程如圖2所示。

圖2 系統(tǒng)流程圖
首先將采集到的RGB 圖像轉(zhuǎn)化到Y(jié)CbCr 膚色空間,Y 分量記錄圖像的灰度信息,CbCr 分量通過設(shè)置相應(yīng)閾值粗提取出圖像中的膚色區(qū)域,接著對膚色區(qū)域進行二值化處理,然后采用中值濾波去除二值化圖像中的椒鹽噪聲,并將濾波后的二值化圖像進行等間隔旋轉(zhuǎn)搜索獲取膚色區(qū)域的最小外接矩形,記錄最小外接矩形的四個頂點坐標(biāo),將坐標(biāo)值輸入到的灰度圖,對灰度圖進行裁剪,獲得人臉膚色區(qū)域的灰度圖,縮小Adaboost 人臉檢測算法可以在圖中的檢測范圍。
然后判斷當(dāng)前的人臉膚色區(qū)域是否是采集到的第一幀圖像。
若是第一幀圖像則進行人臉檢測,然后將人臉圖像作為哈希模板圖像,計算其哈希序列,并緩存起來,與下一幀膚色區(qū)域進行哈希匹配,達到人臉追蹤的目的,最后輸出檢測到的人臉區(qū)域,并進行下一幀信息采集。
若不是第一幀圖像,則直接進行Phash 人臉追蹤環(huán)節(jié),若追蹤成功,則更新模板哈希序列,輸出人臉區(qū)域,進行下一幀信息采集;若追蹤失敗,則跳回到Adaboost人臉檢測算法進行人臉檢測,然后更新模板序列,輸出人臉區(qū)域并進行下一幀信息采集。
ZYNQ 平臺被劃分PL-PS 兩個部分,兩個部分都可以分別獨立實現(xiàn)。本次設(shè)計中膚色提取模塊在PL 部分實現(xiàn),中值濾波在PL 部分中采用流水線方式實現(xiàn)。人臉檢測和人臉追蹤在PS 部分采用的雙核ARM 并行方式實現(xiàn)。
4.1.1 人臉膚色區(qū)域提取模塊
通過OV7670攝像頭采集的視頻分辨率是640×480,每個點色彩深度是16 位,所以每個點需要在傳輸總線上傳輸2次,視頻文件通過8位的并行總線傳輸,然后將視頻緩存到一個雙口RAM[13]。再從雙口BRAM 中讀出后,為了避免出現(xiàn)小數(shù)運算,對RGB 空間轉(zhuǎn)換到Y(jié)CbCr膚色空間將選用公式(2)~(4)的方式,其映射為硬件架構(gòu)如圖3所示。

圖3 人臉膚色提取模塊
圖3 右側(cè)表示的是進行膚色閾值提取,通過兩個LUT(Look Up Table)可以將圖像進行二值化處理,但二值化處理后的圖像有嚴(yán)重的噪聲情況,需要對噪聲進行消除。
4.1.2 膚色二值圖像的中值濾波
緩存在BRAM 中的膚色二值化圖像移入中值濾波模塊[14],中值濾波采用3×3 的濾波窗口,采用流水線設(shè)計。第一級中并行使用三個比較器將每一行中的三個數(shù)排序,第二級使用三個比較器找出第一級中的三個最大值中的最大值,三個中值中的中間值,三個最小值中的最小值。第三級使用一個比較器確定3×3 中最終的中間值。
利用軟硬件協(xié)同的結(jié)構(gòu),將Linaro Ubuntu 和Opencv3.3 圖像庫移植到PS 部分,通過調(diào)用移植的庫函數(shù)對視頻流信息處理。
4.2.1 膚色區(qū)域最小外接矩陣
通過等間隔旋轉(zhuǎn)搜索,將圖像物體在平面內(nèi)進行旋轉(zhuǎn),每次記錄其輪廊在坐標(biāo)系方向上的外接矩形參數(shù),通過計算外接矩形面積獲得最小外接矩形,獲得四個頂點坐標(biāo)后將坐標(biāo)點數(shù)據(jù)輸入YCbCr 膚色空間中的Y 分量形成的灰度圖,得到縮小圖像范圍的人臉膚色灰度區(qū)域,從而縮減了檢測范圍。
4.2.2 并行人臉檢測與追蹤
用實驗的訓(xùn)練分類器,調(diào)用opencv 中integral 方法獲得膚色區(qū)域積分圖,然后對膚色區(qū)域積分圖進行掃描尋找人臉區(qū)域。
ZYNQ 平臺擁有雙核Cortex A9 處理器,利用不同尺寸檢測窗口之間的無關(guān)性,將不同大小的檢測窗口分為兩部分,一部分在core1 進行檢測,另一部分利用core2 進行檢測,如圖4 所示的雙核并行檢測方式。core1 和core2 多線程并行處理利用不同尺寸的檢測窗口,且要讓ARM 核共享存儲在DDR3 中的積分圖和二級高速緩沖器數(shù)據(jù),達到加速檢測的目標(biāo)。

圖4 雙核ARM檢測
當(dāng)檢測結(jié)束以后,由于不同尺度的檢測窗口會對同一區(qū)域同時標(biāo)定多個檢測窗口。利用core1對檢測窗口進行合并操作,將core2 暫時掛起。core1 對相同尺度大小的檢測窗口相近位置的檢測窗口的坐標(biāo)求均值再歸并多余的檢測窗口,然后core1和core2并行提取人臉圖像信息的哈希序列,并生成模板哈希序列,同時將其緩存在DDR3 中,在下一幀視頻來之后,將膚色提取的最小外接矩形中的圖像信息生成追蹤目標(biāo)哈希序列,然后計算漢明距離,尋找最小的漢明距離后也就追蹤到當(dāng)前幀的人臉區(qū)域,直接輸出上一幀人臉窗口坐標(biāo),最后更新模板哈希序列。若追蹤失敗,再次進行人臉檢測,同時更新模板哈希序列。
本文先在PC 平臺驗證優(yōu)化算法的性能,對比本文算法與傳統(tǒng)的Adaboost 人臉檢測算法和Adaboost+YCbCr 檢測算法的人臉檢測速率,然后將算法移植到ZYNQ平臺,最后進行系統(tǒng)實現(xiàn)分析。
所采用的軟件平臺是Visual Studio 2015 和編譯后的Opencv3.3,將本文算法、Adaboost 算法和Adaboost+YcbCr[15-16]算法在PC(Core i5,主頻2.7 GHz,內(nèi)存16 GB)進行比較。對截取的600幀圖像的檢測時間分析結(jié)果如圖5所示。

圖5 優(yōu)化算法檢測時間
從圖5中可以看出:傳統(tǒng)Adaboost算法需要90~140 ms才能檢測到人臉,檢測時間最長。傳統(tǒng)Adaboost+YCbCr算法需要60~100 ms 檢測時間,消耗的時間比傳統(tǒng)Adaboost算法快一點。而本文算法采用優(yōu)化的Adaboost和Phash 算法進行人臉檢測和追蹤,消耗的時間集中在10~70 ms之間,統(tǒng)計結(jié)果顯示本文算法相比前面兩種算法的檢測時間明顯縮短。
為了對比本文檢測方案在系統(tǒng)實現(xiàn)方面的優(yōu)勢,選取了FDDB 數(shù)據(jù)庫中的250 張人臉圖像,其中包含單人臉和多人臉,且圖像中有側(cè)臉、有正臉,將圖像像素統(tǒng)一裁剪為320×240,總共367張人臉圖像,分別通過三種實現(xiàn)方法進行檢測,分別是:
(1)在ZYNQ 平臺的ARM 中軟件實現(xiàn)Adaboost 人臉檢測算法。
(2)在ZYNQ 平臺的ARM 中軟件實現(xiàn)Adaboost 人臉檢測+YCbCr算法。
(3)在ZYNQ 平臺中采用軟硬件協(xié)同設(shè)計實現(xiàn)本文檢測算法:YCbCr 膚色提取IP 進行硬件加速,同時使用定點化的Adaboost 人臉檢測和Phash 人臉追蹤檢測人臉在ARM部分實現(xiàn)。
統(tǒng)計各算法在ZYNQ平臺的人臉檢測時間,匯總?cè)绫?所示。

表1 ZYNQ平臺測試結(jié)果 ms
從表1 中實驗結(jié)果可以看出,軟硬件協(xié)同處理架構(gòu)下的人臉檢測算法的實時性在四種檢測場景下都高于其他兩種算法在純ARM平臺下軟件實現(xiàn)。
5.3.1 人臉檢測結(jié)果
如圖6、圖7 所示的是ZYNQ 平臺下攝像頭采集視頻信息,分別在兩種環(huán)境光下人臉俯視、仰視、左側(cè)臉、正常、右側(cè)臉的姿態(tài),驗證表明都能檢測出人臉,這表明系統(tǒng)具有一定的魯棒性。

圖6 強光照對比環(huán)境

圖7 正常光照對比環(huán)境
5.3.2 資源消耗分析
從表2 中可以看出FPGA 中的三種主要參數(shù)LUT、BRAM、DSP 都占用超過65%,表明工程在完成人臉檢測前提下,充分利用了Zybo開發(fā)平臺,在文獻[5]的人臉檢測使用19 897個LUT,而本文中使用了12 203個LUT,節(jié)約了邏輯資源,降低了系統(tǒng)硬件成本。

表2 FPGA占用資源表
本文在ZYNQ 平臺下,實現(xiàn)了膚色區(qū)域提取、優(yōu)化Adaboost 人臉檢測與Phash 人臉追蹤,滿足了便捷性與實時性的需求。實驗結(jié)論顯示,ZYNQ 平臺軟硬件協(xié)同設(shè)計的本文算法相比兩種傳統(tǒng)算法在ARM 平臺下純軟件檢測實時性大幅提高,同時合理的軟硬件劃分,與文獻[5]相比減少了7 694 個LUT 的使用,減少硬件資源消耗,節(jié)約了硬件成本。但在算法方面,本文沒有對人臉檢測算法準(zhǔn)確率進行優(yōu)化,是本文的后期研究目標(biāo)。在系統(tǒng)方面,需要選擇清晰度更高的攝像頭進行信息采集,減少后期圖像處理的難度。