南世慧 張俊杰
(北京師范大學(xué) 北京 100875)
回歸樹算法在嵌入式人臉置換的應(yīng)用
南世慧 張俊杰
(北京師范大學(xué) 北京 100875)
已有的人臉識別算法雖有較好的效果,但對于嵌入式應(yīng)用不都適用。針對終端人臉置換場景,提出使用迭代的方式來減少因光線等原因無法得到標(biāo)準(zhǔn)圖像的狀況。同時使用回歸樹的方法對圖像的局部特征進(jìn)行擬合以提高其識別速度,并在此基礎(chǔ)上使用普氏分析等圖像處理技術(shù)對圖像的顏色平衡進(jìn)行校正。在平衡效率的前提下,針對移動設(shè)備使用膠水語言Python進(jìn)行模擬實現(xiàn)該算法,實現(xiàn)準(zhǔn)確快速的人臉置換。實驗表明,該方法在提高檢測效率的同時,降低了對人臉的誤判率并為高復(fù)雜度算法在移動終端的應(yīng)用提供了借鑒。
人臉檢測 回歸樹 特征提取
近年來,社會的快速發(fā)展,科技進(jìn)一步提升,計算機(jī)軟硬件的性能以及計算機(jī)視覺、人工智能模式識別等這一類技術(shù)發(fā)展得尤為快速。在人們的生活中,對移動設(shè)備人臉識別能力的需求越來越大。目前,人臉識別在安全、軍事等方面已有很好的應(yīng)用[1],而對于人臉的編輯也隨之產(chǎn)生,諸如美圖秀秀這樣的應(yīng)用軟件,深受女生的喜歡。然而目前的應(yīng)用軟件,需要借助于用戶的手勢來對人臉的具體特征位置進(jìn)行相關(guān)的操作。雖然在PC上有著良好的識別人臉的處理方式,然而在嵌入式設(shè)備上面使用就不一定有很好的效果,因此,如何在手機(jī)上快速識別與合成人臉的圖像需要進(jìn)一步研究。幾年前,有研究者詳細(xì)地總結(jié)了國外人臉合成的相關(guān)技術(shù)[2],本文在此基礎(chǔ)上,結(jié)合移動環(huán)境下的人臉識別特征,采用適合在移動平臺下運(yùn)行的語言Python,將基于回歸樹的人臉識別技術(shù)和圖像處理技術(shù)相互結(jié)合從而實現(xiàn)人臉置換功能。
1.1 擬合函數(shù)的選取
模型的選取有兩種模型:一種是全局模型,另一種是局部模型。其中,全局模型對于線性和非線性模型的數(shù)據(jù)都能很好地擬合并得到相應(yīng)的參數(shù),但是現(xiàn)實過程中的數(shù)據(jù),并不一定都是規(guī)則的。因此,構(gòu)建全局模型顯得不合適,就需要采用局部模型,構(gòu)建相應(yīng)的決策的節(jié)點把數(shù)據(jù)分割成不同區(qū)域,然后針對部分的數(shù)據(jù)區(qū)域進(jìn)行相應(yīng)的回歸擬合,這就需要回歸樹。與通過香農(nóng)熵最小作為度量所得結(jié)果中樹的節(jié)點都是離散的相比,回歸樹通過計算分割數(shù)據(jù)的方差,得到的節(jié)點均為連續(xù)的數(shù)值。節(jié)點都是誤差最小的數(shù)據(jù)。
1.2 回歸函數(shù)的組成部分選取
圖片因為光線、人為操作或其他原因不能得到我們想要的標(biāo)準(zhǔn)的圖像,使得人臉圖像空間實際上并不是一個視覺上面的最優(yōu)空間,這時可通過迭代的方法來避免無法得到理想的特征這一問題。對于當(dāng)前的圖像,迭代后會產(chǎn)生一個標(biāo)準(zhǔn)坐標(biāo),從而得到模型參數(shù)[3-6]。
此外,雖然高維的向量更加符合圖像數(shù)據(jù),但是存在非凸的局部最優(yōu)問題[7]。通過設(shè)置回歸量以及假設(shè)建立的模型都是線性的子空間[8](可以通過查找訓(xùn)練集的主成分),可以減少一些潛在的非線性模型,來避免非凸的局部最優(yōu)問題,從而使預(yù)測更為理想。
以上即是回歸函數(shù)的兩個組成部分:一個是回歸形狀參數(shù)(標(biāo)準(zhǔn)坐標(biāo)),一個是模型都是線性的子空間。
1.3 回歸方程獨立變量的選取
常規(guī)的誤差函數(shù)是實際值減去預(yù)測值,然后對誤差函數(shù)進(jìn)行求導(dǎo),如式(1)所示,其中1/2是為了方便積分。
(1)
對每次得到的梯度,都會朝著梯度減少的方向。
(2)
在式(2)中θ有很多緯度,每個緯度都能求出一個梯度減小的方向,將它們相結(jié)合就能求出一個整體梯度下降的方向,不斷的下降,最終就能找到最小的點,而不管它是局部的還是全部的。結(jié)合梯度下降算法以及兩個像素輸入的偏差選擇出合適的稀疏像素集,作為回歸方程獨立變量進(jìn)行輸入。
通過以上模型的設(shè)定,能夠得到一個盡量標(biāo)準(zhǔn)的圖像,得到標(biāo)準(zhǔn)的圖像后,就要對圖像中的人臉進(jìn)行識別。
2.1 擬合函數(shù)的選取
2.2 回歸量的學(xué)習(xí)過程
πi∈{1,2,…,n}
(3)
(4)
對于i=1,2,…,N,我們設(shè)N=nR,R為每個圖像Ii用于初始化的數(shù)量。對于每個圖像的初始化模型是從{Z1,Z2,…,Zn}均勻的無替代抽取。
(5)
(6)
這個過程不斷迭代,直到所得出的回歸量能足夠精確。值得注意的是,這里要使用平方誤差損失,以及在每個訓(xùn)練樣本中得出的誤差函數(shù)的梯度是和最內(nèi)層循環(huán)的殘差相對應(yīng)。學(xué)習(xí)率的范圍是小于1,可以防止過度擬合[9]。
在梯度下降算法中,每個回歸函數(shù)rt的核心是基于回歸樹來擬合殘差的。因為人臉在大致上具有相似性,但在局部位置是有差異的,而回歸樹能夠很好地擬合局部的特征。
2.3 局部形狀不變的分割測試
在每個回歸樹的分割節(jié)點,決策是建立在不同像素二值化后的大小。像素是建立在平均模型的標(biāo)準(zhǔn)坐標(biāo)(u,v)。對于一張人臉的任意形狀,索引在基準(zhǔn)模型(u,v)下具有同樣位置相關(guān)性的點。為了實現(xiàn)這樣的效果,圖像在提取特征之前要封裝成具有基準(zhǔn)模型的圖像,因此我們只要使用圖片的表達(dá)方式變得相對稀疏,相對于用整張完整的圖片,這樣更加有效。這樣做的前提是,圖片是全局相似而局部不同,而人臉恰好符合這樣的特征。
通過使用以上算法,我們能夠成功地識別出人臉,接下來就需要對不同位置的兩張人臉進(jìn)行切換。
3.1 面部標(biāo)簽處理
對于兩張已識別出人臉的圖像,我們旋轉(zhuǎn)變形一張圖像,另一張與之保持對應(yīng),根據(jù)上面的步驟獲得兩個具有標(biāo)記的矩陣,并且每一個臉部的局部細(xì)節(jié)都有一個坐標(biāo)和他相互關(guān)聯(lián)。為了能夠使兩個標(biāo)記盡量相似,我們將第一個圖像進(jìn)行相同的變換,并使得與另一幅圖像能夠盡量覆蓋。
(8)
式中W是一個二維的向量,R是一個2×2的正交矩陣,其中q0和z0是具有標(biāo)記的行以及列。X是一個標(biāo)量,我們要做的是尋找W、X以及R,使得結(jié)果盡量小[10]。
在此使用了Pythondlib庫,通過get_landmarks()函數(shù)將一個圖像轉(zhuǎn)化成numpy數(shù)組,并返回一個68×2元素矩陣,輸入圖像的每個特征點對應(yīng)每行的一個(x,y)坐標(biāo)。
獲得一個標(biāo)準(zhǔn)的坐標(biāo)后,則要開始對兩張圖像進(jìn)行調(diào)整,為了能夠計算人臉在幾何變換時候所經(jīng)歷的過程,還需要使用常規(guī)的普氏分析。
3.2 普氏分析
普氏分析是分析形狀分布的一種方法。在為人臉構(gòu)建一個形變模型時,首先要做的就是從當(dāng)前的特征中除去無用的部分,也就是保留模型在除縮放、旋轉(zhuǎn)等幾何變換因素外所遺留的幾何信息。通過不斷的迭代從而找到一個標(biāo)準(zhǔn)的形狀,并在此基礎(chǔ)上使用最小二乘法找出每一個樣本,從最初始的形狀一直變化到標(biāo)準(zhǔn)形狀所經(jīng)歷的仿射變換方式[11]。
普氏分析的具體步驟先是:
1) 計算每一個樣本點在每一個圖像中的均值。
(9)
2) 然后通過對所有形狀進(jìn)行一次歸一化,得到的是每一個樣本減去對應(yīng)樣本點的均值。
(10)
3) 在此基礎(chǔ)上,對于每幅圖像,計算對應(yīng)的重心。
(11)
4) 經(jīng)過上面重心和角度的計算,將樣本的形狀和標(biāo)準(zhǔn)的形狀進(jìn)行對齊,使得對應(yīng)形狀的普氏距離越小。式(12)就是普氏距離的表達(dá)方式。
(12)
其具體的過程,即不斷重復(fù)下面的計算過程。
(1) 計算所有樣本點的歸一化平均值,通過數(shù)學(xué)運(yùn)算得到每一個具體圖像的標(biāo)準(zhǔn)形狀。
(2) 計算每一個圖像想要變到標(biāo)準(zhǔn)形狀所需要經(jīng)歷多少次旋轉(zhuǎn)?;蛘咝D(zhuǎn)的角度是多少。具體求解用最小二乘法。
(13)
在上面的公式中,a、b即對應(yīng)旋轉(zhuǎn)變化的參數(shù)。
(14)
通過求偏導(dǎo),就能得出a、b的值。
(15)
(3) 當(dāng)?shù)贸鯽、b的值就對樣本的形狀進(jìn)行一次旋轉(zhuǎn),使得它與標(biāo)準(zhǔn)圖像相對齊。
(16)
(4) 不斷地循環(huán)這個步驟直到達(dá)到規(guī)定的循環(huán)次數(shù)。
5) 其實現(xiàn)的普氏分析具體核心代碼片段為:
def transformation(points1,points2):
points1 = points1.astype(numpy.float64)
points2 = points2.astype(numpy.float64)
c1 = numpy.mean(points1, axis=0)
c2 = numpy.mean(points2, axis=0)
points1 -= c1
points2 -= c2
s1 = numpy.std(points1)
s2 = numpy.std(points2)
points1 /= s1
points2 /= s2
U, S, Vt = numpy.linalg.svd(points1.T * points2)
R = (U * Vt).T
return numpy.vstack([numpy.hstack(((s2 / s1) * R,c2.T - (s2 / s1) * R * c1.T)), numpy.matrix([0., 0., 1.])])
3.3 矯正圖像的色彩平衡
當(dāng)兩個圖像相互對齊的時候,為了使兩幅圖像能夠更好匹配,可以將它們相互重合。采用RGB縮放的方法,先將第二張圖片除以第二張圖片的高斯模糊,接著乘以第一張圖片的高斯模糊。該方法在一定程度上可以修正存在光線差異較大情況的兩張照片。
當(dāng)兩張圖片相互混合的時候,通過遮罩來決定哪一張圖片的部分應(yīng)顯示,哪一部分不顯示。因為人臉的差異集中體現(xiàn)在眉梁、眼睛到鼻子、嘴巴這一區(qū)域,這里使用這一區(qū)域進(jìn)行顯示,其他部分用另一張照片顯示。其主要色彩平衡代碼如下:
def correct_colour(im1, im2, landmarks1):
blur_amount = COLOUR_CORRECT_BLUR_FRAC *
numpy.linalg.norm( numpy.mean(landmarks1[LEFT_EYE_POINTS], axis=0) -
numpy.mean(landmarks1[RIGHT_EYE_POINTS], axis=0))
blur_amount = int(blur_amount)
if blur_amount % 2 == 0:
blur_amount += 1
im1_blur = cv2.GaussianBlur(im1, (blur_amount, blur_amount), 0)
im2_blur = cv2.GaussianBlur(im2, (blur_amount, blur_amount), 0)
im2_blur += 128 * (im2_blur <= 1.0)
return (im2.astype(numpy.float64) *
im1_blur.astype(numpy.float64) /
im2_blur.astype(numpy.float64))
3.4 移植到手機(jī)
在測試調(diào)通后,使用Python for Android將核心的Python代碼移植到Android上面。因為CLE支持Python和Java之間的交互,將Android類封裝成為CLE對象,就可以被其他語言調(diào)用[12]。同時借助于SL4A(Scripting layer for Android)使得通過JSON RPC通信接口,就能夠調(diào)用SL4A的RPC服務(wù)端程序,從而實現(xiàn)本地腳本和原生Android程序內(nèi)部通信。
3.5 結(jié)果對比
在對人臉數(shù)據(jù)庫的學(xué)習(xí)過程中,我們使用上文的算法對擴(kuò)展YaleB[13]以及PIE[14]人臉數(shù)據(jù)庫進(jìn)行學(xué)習(xí)。然后通過faceswap官方應(yīng)用進(jìn)行比對。
由圖1、圖2可以體會到本程序與其他程序效果最直觀的區(qū)別就是不需要用戶通過手動拖拽人臉進(jìn)行匹配,其次,在圖3以及圖4中可以看見faceswap應(yīng)用是直接將人臉裁下來就覆蓋到目標(biāo)臉上,所以結(jié)果看起來會有點不協(xié)調(diào),而本程序不需要拖拽,通過尋找人臉特征點進(jìn)行匹配變換,因此生成的效果更生動??紤]到不同人種的特點不同,我們還對東方人臉置換進(jìn)行了模擬。
圖1 原圖 圖2 操作圖
圖3 facewap生成圖 圖4 本應(yīng)用facewap生成圖
在圖5-圖7中就是將圖6的臉移到圖5上面得到的,就是圖7。從眼睛、鼻子到嘴巴能較清楚的觀察到,移植的臉相對比較精準(zhǔn)。這是因為在使用遮罩的時候,集中將這部分器官標(biāo)定顯示出來。所以看上去很自然,其次由于對圖像的色彩平衡做了處理,使得生成圖的色彩更自然、均勻。相比較圖6、圖7的色彩更加協(xié)調(diào)。
圖5 人形A 圖6人形B 圖7 合成圖
為了讓實驗結(jié)果更加準(zhǔn)確,我們將1 000組合成的圖像隨機(jī)的分成10組,讓10名志愿者對合成的圖像進(jìn)行選擇,結(jié)果分為“真實”、“無法判斷”、“合成效果明顯”。當(dāng)然志愿者的主觀因素會存在一定影響,因此我們最后統(tǒng)計的時候,采用合并統(tǒng)計以在一定程度上避免個人因素的影響。
如表1所示,通過對比可以看出本程序在無劉海的情況下,合成的成功率較高,然后在有物體遮擋的情況下,成功率相對低一些,但是總體上效果有提升。
表1 實驗結(jié)果表
注:成功率:結(jié)果真實/總合成圖片數(shù);失敗率:合成效果明顯/總合成圖片數(shù);A: 真實(有劉海/無劉海);B: 真假難辨(有劉海/無劉海);C: 明顯合成效果(有劉海/無劉海)
在識別算法方面,通過在Aber-dee人臉數(shù)據(jù)庫中抽取合成60張320×240的單張人臉圖片,計算平均值,得出采用回歸樹的方法大約用時為140 ms,而在相同的環(huán)境下文獻(xiàn)[14,15]的平均匹配時間分別為1.75 s和2.38 s。
在圖像合成方面,考慮到移動設(shè)備的圖像處理能力,沒有一些針對發(fā)型做定點人臉圖像修復(fù),所以相較于采用Criminisi算法的圖像合成效果會弱一點。但是采用高斯模糊也能在一定程度上緩解這樣的現(xiàn)象
隨著終端的硬件性能越來越好,基于人臉的操作將會在終端得到廣泛的應(yīng)用,但目前的人臉識別功能,在PC上可以模擬得很好,然而在移動終端相對來說偏弱,而且目前Android應(yīng)用市場的人臉置換應(yīng)用,均依賴用戶手動的拖拽識別,并沒有達(dá)到智能的層面。為此,本文針對移動設(shè)備采用了基于回歸樹的人臉識別算法,并結(jié)合圖像處理技術(shù),完成一款基于移動終端的人臉置換應(yīng)用。
其中圖像識別在學(xué)習(xí)的過程中,通過迭代的方式避免了因光照或者其他原因引起的圖像不均勻,同時為了使畫面更協(xié)調(diào),采用了普氏分析,使得圖像在光線不統(tǒng)一的時候,在一定程度上也能夠得到調(diào)整。基于回歸樹的人臉檢測,識別的速度比較快,在手機(jī)上比較合適,因人臉置換的場景,主要以娛樂的方式呈現(xiàn),如果用戶表情過度扭曲,還需要改進(jìn)。實驗表明,本方法在移動終端的置換效果相較于其他應(yīng)用效果良好。
[1] Cao X,Wei Y,Wen F,et al.Face alignment by explicit shape regression[J].International Journal of Computer Vision,2014,107(2):177-190.
[2] Sheng Y,Kucharski K,Sadka A H,et al.Automatic Face Synthesis and Analysis.A Quick Survey[M]//Computer Vision and Graphics.Springer Netherlands,2006:147-160.
[3] Xiong X,Torre F D L.Supervised Descent Method for Solving Nonlinear Least Squares Problems in Computer Vision[J].Eprint Arxiv,2014.
[4] Cristinacce D,Cootes T F.Boosted Regression Active Shape Models[C]//British Machine Vision Conference 2007,University of Warwick,Uk,September.2007:1-10.
[5] Yan J,Lei Z,Yang Y,et al.Stacked deformable part model with shape regression for object part localization[M]//Computer Vision-ECCV 2014.Springer International Publishing,2014:568-583.
[6] Yang B,Yan J,Lei Z,et al.Fine-grained evaluation on face detection in the wild[C]//Automatic Face and Gesture Recognition (FG),2015 11th IEEE International Conference and Workshops on.IEEE,2015,1:1-7.
[7] Forsgren A.Optimality conditions for nonconvex semidefinite programming[J].Mathematical Programming,2000,88(1):105-128.
[8] Zhang Z,Luo P,Chen C L,et al.Learning and Transferring Multi-task Deep Representation for Face Alignment[J].IEEE Transactions on Pattern Analysis & Machine Intelligence,2014,38(5):1-1.
[9] Cao X,Wei Y,Wen F,et al.Face alignment by explicit shape regression[J].International Journal of Computer Vision,2014,107(2):177-190.
[10] 劉光燦.基于機(jī)器學(xué)習(xí)的物體識別[D].上海交通大學(xué),2013.
[11] Beazley D M.Python essential reference[M].Addison-Wesley Professional,2009.
[12] 馬小虎,譚延琪.基于鑒別稀疏保持嵌入的人臉識別算法[J].自動化學(xué)報,2014,40(1):73-82.
[13] Han H,Shan S,Chen X,et al.A comparative study on illumination preprocessing in face recognition[J].Pattern Recognition,2013,46(6):1691-1699.
[14] 王俊艷,蘇光大,林行剛.用于人臉識別的下頜輪廓線分類方法[J].光電子·激光,2005,16(11):1368-1372.
[15] 杜立強(qiáng).基于主動形狀模型的面部關(guān)鍵特征點定位技術(shù)研究[D].國防科學(xué)技術(shù)大學(xué),2009.
APPLICATION OF REGRESSION TREE ALGORITHM IN EMBEDDED FACE REPLACEMENT
Nan Shihui Zhang Junjie
(BeijingNormalUniversity,Beijing100875,China)
Although the existing face recognition algorithm has a good effect, but for embedded applications are not applicable. Aiming at the terminal face replacement scene, it is proposed to use iterative method to reduce the situation of failing to get standard image due to light and other reasons. At the same time, the regression tree method is used to fit the local features of the image to improve its recognition speed. On this basis, the color balance of the image is corrected by using image processing techniques such as Platts analysis. In the premise of balance efficiency, it uses the glue language Python for mobile devices to simulate the algorithm, to achieve accurate and rapid face replacement. Experimental results show that this method can improve the detection efficiency and reduce the misjudgment rate of face recognition, and provides a reference for the application of high complexity algorithm in mobile terminal.
Face detection Regression tree Feature extraction
2016-05-31。南世慧,碩士生,主研領(lǐng)域:信息安全,圖像識別。張俊杰,助教。
TP391.4
A
10.3969/j.issn.1000-386x.2017.06.037