方仲秋
摘 要:文章在A8處理器作為硬件平臺,嵌入式Linux操作系統(tǒng)作為軟件平臺的基礎(chǔ)上深入研究了AdaBoost人臉檢測算法,并對其進(jìn)行了優(yōu)化改進(jìn),采用遺傳算法消除了冗余弱分類器,形成了最終的強(qiáng)分類器。
關(guān)鍵詞:人臉檢測;嵌入式系統(tǒng);AdaBoost
人臉識別技術(shù)不斷進(jìn)入大眾視野。蘋果新機(jī)iPhone X具備“刷臉”解鎖功能,并且可運(yùn)用到Apple Pay以及各種需要身份驗(yàn)證的APP中;首個(gè)“刷臉”支付的商用試點(diǎn)也在杭州一家肯德基餐廳開啟;一些銀行正嘗試啟用自動取款機(jī)“刷臉”取款功能;高鐵檢票、賓館入住也在使用“刷臉”技術(shù)。人臉識別已經(jīng)在人們衣食住行的各個(gè)領(lǐng)域發(fā)力,迎來運(yùn)用的“井噴期”。本文針對嵌入式系統(tǒng)的應(yīng)用平臺,對人臉檢測算法進(jìn)行了改進(jìn)和優(yōu)化,并在嵌入式開發(fā)板上對改進(jìn)后的算法進(jìn)行了性能評測,效果良好。
1 AdaBoost人臉檢測算法的原理
1.1 AdaBoost人臉檢測算法的特點(diǎn)
采用積分圖方法對Harr-like矩形特征值進(jìn)行計(jì)算,方便快速;采用AdaBoost機(jī)器學(xué)習(xí)算法尋找出分類特征,利用這些分類特征生成弱分類器,然后將弱分類器進(jìn)行疊加構(gòu)成強(qiáng)分類器;強(qiáng)分類器通過串聯(lián)的方式合成為分類效率高、結(jié)構(gòu)復(fù)雜的級聯(lián)分類器;使用最后產(chǎn)生的級聯(lián)分類器對人臉待測圖像進(jìn)行搜索,可以快速排除掉不包括人臉的背景區(qū)域,大大節(jié)省了檢測時(shí)間[1]。
1.2 AdaBoost人臉檢測算法的檢測過程
(1)加載人臉待測圖像和級聯(lián)分類器。(2)將人臉待測圖像中YUV格式的像素值用八位灰度值表示,即轉(zhuǎn)化為灰度圖像。(3)對轉(zhuǎn)化后的待測圖像進(jìn)行掃描并采用積分圖方法對Harr-like矩形特征值進(jìn)行計(jì)算。(4)對待測圖像進(jìn)行分步檢測,首先按照一定的策略對整幅圖像使用一定規(guī)格的子窗口進(jìn)行檢測,然后按照一定比例對子窗口的尺寸進(jìn)行擴(kuò)大,直到當(dāng)前待測圖像和檢測窗口大小一致;子窗口對待測圖像的檢測過程,實(shí)際上就是由簡單到復(fù)雜的過程,首先對比較明顯的分類特征進(jìn)行選擇,去除大部分不包括人臉的背景區(qū)域,然后經(jīng)過多級分類器的篩選,最終對待測圖像是否存在人臉及存在的個(gè)數(shù)做出判斷。(5)最后對待測圖像中人臉的位置及大小進(jìn)行確定。(6)分割人臉區(qū)域。
2 嵌入式平臺上人臉檢測算法的優(yōu)化
2.1 代碼的優(yōu)化
2.1.1 消滅重復(fù)計(jì)算
通過分析工具,找出最影響速度的代碼段,有針對性地優(yōu)化。一般來說是判斷窗口是否是人臉的代碼最耗時(shí),因?yàn)檎{(diào)用次數(shù)最多。代碼里首先要消滅的是重復(fù)計(jì)算,如代碼
int b1=pixels[y×step+x]-pixels[y×step+x+1];
int b2=pixels[y×step+x+2]-pixels[y×step+x+3];
可以寫為
int offset=y×step+x;
int b1=pixels[offset]-pixels[offset+1];
int b2=pixels[offset+2]-pixels[offset+3];
2.1.2 展開循環(huán)
如果循環(huán)次數(shù)是固定的,可以去掉for循環(huán),直接展開。代碼行數(shù)雖然多了,但是少了for循環(huán)的條件判斷,可以加速,例如可加速10%~20%。另外可以在設(shè)計(jì)分類器的時(shí)候,就把這些因素考慮進(jìn)去,由訓(xùn)練程序生成的強(qiáng)分類器包含固定數(shù)目的弱分類器,或者某種規(guī)律數(shù)目的弱分類器,這樣有利于檢測代碼優(yōu)化。
2.1.3 利用SIMD指令
無論Intel CPU還是ARM CPU,都有單指令多數(shù)據(jù)(Single Instruction Multiple Data,SIMD)指令。利用這些指令,可以一次算多個(gè)數(shù)據(jù)。例如兩個(gè)byte向量相加,支持128位的SIMD指令可以一次算16個(gè)byte的加法,理論上可以加速16倍。人們常用的加速利器積分圖,其構(gòu)建過程很難用SIMD加速。如果有更好的策略,可以果斷拋棄積分圖。
2.1.4 多核并行運(yùn)算
共享存儲并行編程(Open Multi-Processing,OpenMP)或者Inter線程構(gòu)建模塊(Thread Building Blocks,TBB)可以讓人們充分利用CPU的多個(gè)內(nèi)核進(jìn)行并行運(yùn)算,提升速度。但用了OpenMP或TBB,未必可以加速,或未必可以加速到期望的倍數(shù)。多核并行,任務(wù)的拆分的粒度應(yīng)該盡可能粗,不同的任務(wù)盡可能不用同一塊內(nèi)存,也就是任務(wù)之間的相關(guān)度低一些有利于加速。舉個(gè)例子:如果兩個(gè)矩陣相加,按像素進(jìn)行并行操作,加速效果會很糟糕;如果按行并行,效果會好很多,但不要按列并行。
2.2 分類器的訓(xùn)練優(yōu)化
AdaBoost人臉檢測算法在嵌入式平臺上的實(shí)現(xiàn)訓(xùn)練過程既復(fù)雜又耗時(shí),由此產(chǎn)生的級聯(lián)分類器也特別龐大,鑒于嵌入式系統(tǒng)的存儲空間有限,需要對級聯(lián)分類器訓(xùn)練進(jìn)行改進(jìn)。本文采用AdaBoost算法選取特征弱分類器,通過遺傳算法來消除冗余弱分類器,同時(shí)學(xué)習(xí)相應(yīng)的權(quán)值,權(quán)值和借助于遺傳算法擇優(yōu)之后的弱分類器線性組合之后得到最終的強(qiáng)分類器。AdaBoost特征數(shù)目可以通過遺傳算法所具有的全局尋優(yōu)能力來實(shí)現(xiàn)有效地減少,從而減少計(jì)算量[2]。
2.3 單訓(xùn)練樣本人臉識別模型的優(yōu)化
單訓(xùn)練樣本人臉識別問題,由于每個(gè)人都只有一幅人臉樣本圖像,沒有充分具有代表性的一定數(shù)量的訓(xùn)練樣本,采用一些常用的方法識別率將明顯下降,有的甚至不適用。針對這一情況,本文在單樣本人臉識別中引進(jìn)了一些幾何變換增加虛擬樣本的數(shù)量,同時(shí)使用二維主成分分析,提取更利于進(jìn)行分類的特征,大大提高了單訓(xùn)練樣本人臉識別中的準(zhǔn)確率和辨識率[3]。
3 實(shí)驗(yàn)分析endprint
為了驗(yàn)證優(yōu)化后的AdaBoost人臉檢測算法在嵌入式應(yīng)用平臺的有效性,本文在嵌入式環(huán)境下對人臉檢測的檢測速度和準(zhǔn)確度進(jìn)行了統(tǒng)計(jì)分析。實(shí)驗(yàn)平臺的CPU選用了ARM A8處理器芯片,主頻800 MHz,內(nèi)存512 M,最高工作頻率1 GHz,系統(tǒng)開發(fā)環(huán)境為Linux3.2.0版本。實(shí)驗(yàn)采用攝像頭采集的圖片,圖片背景復(fù)雜而且成像隨機(jī),選用CMU數(shù)據(jù)庫測試檢測率。AdaBoost人臉檢測原始算法和優(yōu)化算法的檢測率如表1所示。
本文通過選取同一張照片的不同分辨率對檢測時(shí)間進(jìn)行測試,檢測結(jié)果如表2所示。
由表1和表2可以看出,優(yōu)化后的AdaBoost人臉檢測算法所構(gòu)建的級聯(lián)分類器能夠以更快的檢測速度完成檢測功能,而且隨著分辨率的提高,檢測時(shí)間明顯縮短。在魯棒性方面,本文采用的AdaBoost人臉檢測優(yōu)化算法沒有利用圖像色彩對人臉進(jìn)行檢測,而是使用了圖像的灰度信息,較好地避免了色彩對檢測過程的干擾。部分圖片的檢測結(jié)果如圖1所示。
4 結(jié)語
本文主要對AdaBoost人臉檢測算法及其在嵌入式平臺上的優(yōu)化改進(jìn)技術(shù)進(jìn)行了研究分析,為人臉檢測算法在嵌入式環(huán)境的應(yīng)用提供了理論依據(jù)和解決方案。隨著嵌入式技術(shù)的發(fā)展,對人臉檢測技術(shù)的研究還將進(jìn)一步深化,實(shí)現(xiàn)適合特定環(huán)境的高效算法,充分利用圖像的灰度信息和色彩信息進(jìn)行檢測,提高人臉檢測的精確度。
[參考文獻(xiàn)]
[1]盧鑫.基于嵌入式系統(tǒng)的人臉檢測算法研究與實(shí)現(xiàn)[D].西安:西安科技大學(xué),2016.
[2]王芹芹.面向嵌入式系統(tǒng)的人臉識別算法性能優(yōu)化研究[D].北京:中國石油大學(xué),2010.
[3]張忠.Adaboost人臉檢測算法在嵌入式平臺上的實(shí)現(xiàn)與研究[D].上海:上海交通大學(xué),2008.
Abstract:Based on the A8 processor as the hardware platform and the embedded Linux operating system as the software platform, this article studies the AdaBoost face detection algorithm in-depth and optimizes it. The genetic algorithm is used to eliminate the redundant weak classifier, formed the final strong classifier.
Key words:face detection; embedded system; AdaBoostendprint