南世慧 張俊杰
(北京師范大學(xué) 北京 100875)
回歸樹算法在嵌入式人臉置換的應(yīng)用
南世慧 張俊杰
(北京師范大學(xué) 北京 100875)
已有的人臉識(shí)別算法雖有較好的效果,但對(duì)于嵌入式應(yīng)用不都適用。針對(duì)終端人臉置換場(chǎng)景,提出使用迭代的方式來減少因光線等原因無法得到標(biāo)準(zhǔn)圖像的狀況。同時(shí)使用回歸樹的方法對(duì)圖像的局部特征進(jìn)行擬合以提高其識(shí)別速度,并在此基礎(chǔ)上使用普氏分析等圖像處理技術(shù)對(duì)圖像的顏色平衡進(jìn)行校正。在平衡效率的前提下,針對(duì)移動(dòng)設(shè)備使用膠水語(yǔ)言Python進(jìn)行模擬實(shí)現(xiàn)該算法,實(shí)現(xiàn)準(zhǔn)確快速的人臉置換。實(shí)驗(yàn)表明,該方法在提高檢測(cè)效率的同時(shí),降低了對(duì)人臉的誤判率并為高復(fù)雜度算法在移動(dòng)終端的應(yīng)用提供了借鑒。
人臉檢測(cè) 回歸樹 特征提取
近年來,社會(huì)的快速發(fā)展,科技進(jìn)一步提升,計(jì)算機(jī)軟硬件的性能以及計(jì)算機(jī)視覺、人工智能模式識(shí)別等這一類技術(shù)發(fā)展得尤為快速。在人們的生活中,對(duì)移動(dòng)設(shè)備人臉識(shí)別能力的需求越來越大。目前,人臉識(shí)別在安全、軍事等方面已有很好的應(yīng)用[1],而對(duì)于人臉的編輯也隨之產(chǎn)生,諸如美圖秀秀這樣的應(yīng)用軟件,深受女生的喜歡。然而目前的應(yīng)用軟件,需要借助于用戶的手勢(shì)來對(duì)人臉的具體特征位置進(jìn)行相關(guān)的操作。雖然在PC上有著良好的識(shí)別人臉的處理方式,然而在嵌入式設(shè)備上面使用就不一定有很好的效果,因此,如何在手機(jī)上快速識(shí)別與合成人臉的圖像需要進(jìn)一步研究。幾年前,有研究者詳細(xì)地總結(jié)了國(guó)外人臉合成的相關(guān)技術(shù)[2],本文在此基礎(chǔ)上,結(jié)合移動(dòng)環(huán)境下的人臉識(shí)別特征,采用適合在移動(dòng)平臺(tái)下運(yùn)行的語(yǔ)言Python,將基于回歸樹的人臉識(shí)別技術(shù)和圖像處理技術(shù)相互結(jié)合從而實(shí)現(xiàn)人臉置換功能。
1.1 擬合函數(shù)的選取
模型的選取有兩種模型:一種是全局模型,另一種是局部模型。其中,全局模型對(duì)于線性和非線性模型的數(shù)據(jù)都能很好地?cái)M合并得到相應(yīng)的參數(shù),但是現(xiàn)實(shí)過程中的數(shù)據(jù),并不一定都是規(guī)則的。因此,構(gòu)建全局模型顯得不合適,就需要采用局部模型,構(gòu)建相應(yīng)的決策的節(jié)點(diǎn)把數(shù)據(jù)分割成不同區(qū)域,然后針對(duì)部分的數(shù)據(jù)區(qū)域進(jìn)行相應(yīng)的回歸擬合,這就需要回歸樹。與通過香農(nóng)熵最小作為度量所得結(jié)果中樹的節(jié)點(diǎn)都是離散的相比,回歸樹通過計(jì)算分割數(shù)據(jù)的方差,得到的節(jié)點(diǎn)均為連續(xù)的數(shù)值。節(jié)點(diǎn)都是誤差最小的數(shù)據(jù)。
1.2 回歸函數(shù)的組成部分選取
圖片因?yàn)楣饩€、人為操作或其他原因不能得到我們想要的標(biāo)準(zhǔn)的圖像,使得人臉圖像空間實(shí)際上并不是一個(gè)視覺上面的最優(yōu)空間,這時(shí)可通過迭代的方法來避免無法得到理想的特征這一問題。對(duì)于當(dāng)前的圖像,迭代后會(huì)產(chǎn)生一個(gè)標(biāo)準(zhǔn)坐標(biāo),從而得到模型參數(shù)[3-6]。
此外,雖然高維的向量更加符合圖像數(shù)據(jù),但是存在非凸的局部最優(yōu)問題[7]。通過設(shè)置回歸量以及假設(shè)建立的模型都是線性的子空間[8](可以通過查找訓(xùn)練集的主成分),可以減少一些潛在的非線性模型,來避免非凸的局部最優(yōu)問題,從而使預(yù)測(cè)更為理想。
以上即是回歸函數(shù)的兩個(gè)組成部分:一個(gè)是回歸形狀參數(shù)(標(biāo)準(zhǔn)坐標(biāo)),一個(gè)是模型都是線性的子空間。
1.3 回歸方程獨(dú)立變量的選取
常規(guī)的誤差函數(shù)是實(shí)際值減去預(yù)測(cè)值,然后對(duì)誤差函數(shù)進(jìn)行求導(dǎo),如式(1)所示,其中1/2是為了方便積分。
(1)
對(duì)每次得到的梯度,都會(huì)朝著梯度減少的方向。
(2)
在式(2)中θ有很多緯度,每個(gè)緯度都能求出一個(gè)梯度減小的方向,將它們相結(jié)合就能求出一個(gè)整體梯度下降的方向,不斷的下降,最終就能找到最小的點(diǎn),而不管它是局部的還是全部的。結(jié)合梯度下降算法以及兩個(gè)像素輸入的偏差選擇出合適的稀疏像素集,作為回歸方程獨(dú)立變量進(jìn)行輸入。
通過以上模型的設(shè)定,能夠得到一個(gè)盡量標(biāo)準(zhǔn)的圖像,得到標(biāo)準(zhǔn)的圖像后,就要對(duì)圖像中的人臉進(jìn)行識(shí)別。
2.1 擬合函數(shù)的選取
2.2 回歸量的學(xué)習(xí)過程
πi∈{1,2,…,n}
(3)
(4)
對(duì)于i=1,2,…,N,我們?cè)O(shè)N=nR,R為每個(gè)圖像Ii用于初始化的數(shù)量。對(duì)于每個(gè)圖像的初始化模型是從{Z1,Z2,…,Zn}均勻的無替代抽取。
(5)
(6)
這個(gè)過程不斷迭代,直到所得出的回歸量能足夠精確。值得注意的是,這里要使用平方誤差損失,以及在每個(gè)訓(xùn)練樣本中得出的誤差函數(shù)的梯度是和最內(nèi)層循環(huán)的殘差相對(duì)應(yīng)。學(xué)習(xí)率的范圍是小于1,可以防止過度擬合[9]。
在梯度下降算法中,每個(gè)回歸函數(shù)rt的核心是基于回歸樹來擬合殘差的。因?yàn)槿四樤诖笾律暇哂邢嗨菩裕诰植课恢檬怯胁町惖?,而回歸樹能夠很好地?cái)M合局部的特征。
2.3 局部形狀不變的分割測(cè)試
在每個(gè)回歸樹的分割節(jié)點(diǎn),決策是建立在不同像素二值化后的大小。像素是建立在平均模型的標(biāo)準(zhǔn)坐標(biāo)(u,v)。對(duì)于一張人臉的任意形狀,索引在基準(zhǔn)模型(u,v)下具有同樣位置相關(guān)性的點(diǎn)。為了實(shí)現(xiàn)這樣的效果,圖像在提取特征之前要封裝成具有基準(zhǔn)模型的圖像,因此我們只要使用圖片的表達(dá)方式變得相對(duì)稀疏,相對(duì)于用整張完整的圖片,這樣更加有效。這樣做的前提是,圖片是全局相似而局部不同,而人臉恰好符合這樣的特征。
通過使用以上算法,我們能夠成功地識(shí)別出人臉,接下來就需要對(duì)不同位置的兩張人臉進(jìn)行切換。
3.1 面部標(biāo)簽處理
對(duì)于兩張已識(shí)別出人臉的圖像,我們旋轉(zhuǎn)變形一張圖像,另一張與之保持對(duì)應(yīng),根據(jù)上面的步驟獲得兩個(gè)具有標(biāo)記的矩陣,并且每一個(gè)臉部的局部細(xì)節(jié)都有一個(gè)坐標(biāo)和他相互關(guān)聯(lián)。為了能夠使兩個(gè)標(biāo)記盡量相似,我們將第一個(gè)圖像進(jìn)行相同的變換,并使得與另一幅圖像能夠盡量覆蓋。
(8)
式中W是一個(gè)二維的向量,R是一個(gè)2×2的正交矩陣,其中q0和z0是具有標(biāo)記的行以及列。X是一個(gè)標(biāo)量,我們要做的是尋找W、X以及R,使得結(jié)果盡量小[10]。
在此使用了Pythondlib庫(kù),通過get_landmarks()函數(shù)將一個(gè)圖像轉(zhuǎn)化成numpy數(shù)組,并返回一個(gè)68×2元素矩陣,輸入圖像的每個(gè)特征點(diǎn)對(duì)應(yīng)每行的一個(gè)(x,y)坐標(biāo)。
獲得一個(gè)標(biāo)準(zhǔn)的坐標(biāo)后,則要開始對(duì)兩張圖像進(jìn)行調(diào)整,為了能夠計(jì)算人臉在幾何變換時(shí)候所經(jīng)歷的過程,還需要使用常規(guī)的普氏分析。
3.2 普氏分析
普氏分析是分析形狀分布的一種方法。在為人臉構(gòu)建一個(gè)形變模型時(shí),首先要做的就是從當(dāng)前的特征中除去無用的部分,也就是保留模型在除縮放、旋轉(zhuǎn)等幾何變換因素外所遺留的幾何信息。通過不斷的迭代從而找到一個(gè)標(biāo)準(zhǔn)的形狀,并在此基礎(chǔ)上使用最小二乘法找出每一個(gè)樣本,從最初始的形狀一直變化到標(biāo)準(zhǔn)形狀所經(jīng)歷的仿射變換方式[11]。
普氏分析的具體步驟先是:
1) 計(jì)算每一個(gè)樣本點(diǎn)在每一個(gè)圖像中的均值。
(9)
2) 然后通過對(duì)所有形狀進(jìn)行一次歸一化,得到的是每一個(gè)樣本減去對(duì)應(yīng)樣本點(diǎn)的均值。
(10)
3) 在此基礎(chǔ)上,對(duì)于每幅圖像,計(jì)算對(duì)應(yīng)的重心。
(11)
4) 經(jīng)過上面重心和角度的計(jì)算,將樣本的形狀和標(biāo)準(zhǔn)的形狀進(jìn)行對(duì)齊,使得對(duì)應(yīng)形狀的普氏距離越小。式(12)就是普氏距離的表達(dá)方式。
(12)
其具體的過程,即不斷重復(fù)下面的計(jì)算過程。
(1) 計(jì)算所有樣本點(diǎn)的歸一化平均值,通過數(shù)學(xué)運(yùn)算得到每一個(gè)具體圖像的標(biāo)準(zhǔn)形狀。
(2) 計(jì)算每一個(gè)圖像想要變到標(biāo)準(zhǔn)形狀所需要經(jīng)歷多少次旋轉(zhuǎn)?;蛘咝D(zhuǎn)的角度是多少。具體求解用最小二乘法。
(13)
在上面的公式中,a、b即對(duì)應(yīng)旋轉(zhuǎn)變化的參數(shù)。
(14)
通過求偏導(dǎo),就能得出a、b的值。
(15)
(3) 當(dāng)?shù)贸鯽、b的值就對(duì)樣本的形狀進(jìn)行一次旋轉(zhuǎn),使得它與標(biāo)準(zhǔn)圖像相對(duì)齊。
(16)
(4) 不斷地循環(huán)這個(gè)步驟直到達(dá)到規(guī)定的循環(huán)次數(shù)。
5) 其實(shí)現(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)兩個(gè)圖像相互對(duì)齊的時(shí)候,為了使兩幅圖像能夠更好匹配,可以將它們相互重合。采用RGB縮放的方法,先將第二張圖片除以第二張圖片的高斯模糊,接著乘以第一張圖片的高斯模糊。該方法在一定程度上可以修正存在光線差異較大情況的兩張照片。
當(dāng)兩張圖片相互混合的時(shí)候,通過遮罩來決定哪一張圖片的部分應(yīng)顯示,哪一部分不顯示。因?yàn)槿四樀牟町惣畜w現(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ī)
在測(cè)試調(diào)通后,使用Python for Android將核心的Python代碼移植到Android上面。因?yàn)镃LE支持Python和Java之間的交互,將Android類封裝成為CLE對(duì)象,就可以被其他語(yǔ)言調(diào)用[12]。同時(shí)借助于SL4A(Scripting layer for Android)使得通過JSON RPC通信接口,就能夠調(diào)用SL4A的RPC服務(wù)端程序,從而實(shí)現(xiàn)本地腳本和原生Android程序內(nèi)部通信。
3.5 結(jié)果對(duì)比
在對(duì)人臉數(shù)據(jù)庫(kù)的學(xué)習(xí)過程中,我們使用上文的算法對(duì)擴(kuò)展YaleB[13]以及PIE[14]人臉數(shù)據(jù)庫(kù)進(jìn)行學(xué)習(xí)。然后通過faceswap官方應(yīng)用進(jìn)行比對(duì)。
由圖1、圖2可以體會(huì)到本程序與其他程序效果最直觀的區(qū)別就是不需要用戶通過手動(dòng)拖拽人臉進(jìn)行匹配,其次,在圖3以及圖4中可以看見faceswap應(yīng)用是直接將人臉裁下來就覆蓋到目標(biāo)臉上,所以結(jié)果看起來會(huì)有點(diǎn)不協(xié)調(diào),而本程序不需要拖拽,通過尋找人臉特征點(diǎn)進(jìn)行匹配變換,因此生成的效果更生動(dòng)??紤]到不同人種的特點(diǎn)不同,我們還對(duì)東方人臉置換進(jìn)行了模擬。
圖1 原圖 圖2 操作圖
圖3 facewap生成圖 圖4 本應(yīng)用facewap生成圖
在圖5-圖7中就是將圖6的臉移到圖5上面得到的,就是圖7。從眼睛、鼻子到嘴巴能較清楚的觀察到,移植的臉相對(duì)比較精準(zhǔn)。這是因?yàn)樵谑褂谜谡值臅r(shí)候,集中將這部分器官標(biāo)定顯示出來。所以看上去很自然,其次由于對(duì)圖像的色彩平衡做了處理,使得生成圖的色彩更自然、均勻。相比較圖6、圖7的色彩更加協(xié)調(diào)。
圖5 人形A 圖6人形B 圖7 合成圖
為了讓實(shí)驗(yàn)結(jié)果更加準(zhǔn)確,我們將1 000組合成的圖像隨機(jī)的分成10組,讓10名志愿者對(duì)合成的圖像進(jìn)行選擇,結(jié)果分為“真實(shí)”、“無法判斷”、“合成效果明顯”。當(dāng)然志愿者的主觀因素會(huì)存在一定影響,因此我們最后統(tǒng)計(jì)的時(shí)候,采用合并統(tǒng)計(jì)以在一定程度上避免個(gè)人因素的影響。
如表1所示,通過對(duì)比可以看出本程序在無劉海的情況下,合成的成功率較高,然后在有物體遮擋的情況下,成功率相對(duì)低一些,但是總體上效果有提升。
表1 實(shí)驗(yàn)結(jié)果表
注:成功率:結(jié)果真實(shí)/總合成圖片數(shù);失敗率:合成效果明顯/總合成圖片數(shù);A: 真實(shí)(有劉海/無劉海);B: 真假難辨(有劉海/無劉海);C: 明顯合成效果(有劉海/無劉海)
在識(shí)別算法方面,通過在Aber-dee人臉數(shù)據(jù)庫(kù)中抽取合成60張320×240的單張人臉圖片,計(jì)算平均值,得出采用回歸樹的方法大約用時(shí)為140 ms,而在相同的環(huán)境下文獻(xiàn)[14,15]的平均匹配時(shí)間分別為1.75 s和2.38 s。
在圖像合成方面,考慮到移動(dòng)設(shè)備的圖像處理能力,沒有一些針對(duì)發(fā)型做定點(diǎn)人臉圖像修復(fù),所以相較于采用Criminisi算法的圖像合成效果會(huì)弱一點(diǎn)。但是采用高斯模糊也能在一定程度上緩解這樣的現(xiàn)象
隨著終端的硬件性能越來越好,基于人臉的操作將會(huì)在終端得到廣泛的應(yīng)用,但目前的人臉識(shí)別功能,在PC上可以模擬得很好,然而在移動(dòng)終端相對(duì)來說偏弱,而且目前Android應(yīng)用市場(chǎng)的人臉置換應(yīng)用,均依賴用戶手動(dòng)的拖拽識(shí)別,并沒有達(dá)到智能的層面。為此,本文針對(duì)移動(dòng)設(shè)備采用了基于回歸樹的人臉識(shí)別算法,并結(jié)合圖像處理技術(shù),完成一款基于移動(dòng)終端的人臉置換應(yīng)用。
其中圖像識(shí)別在學(xué)習(xí)的過程中,通過迭代的方式避免了因光照或者其他原因引起的圖像不均勻,同時(shí)為了使畫面更協(xié)調(diào),采用了普氏分析,使得圖像在光線不統(tǒng)一的時(shí)候,在一定程度上也能夠得到調(diào)整?;诨貧w樹的人臉檢測(cè),識(shí)別的速度比較快,在手機(jī)上比較合適,因人臉置換的場(chǎng)景,主要以?shī)蕵返姆绞匠尸F(xiàn),如果用戶表情過度扭曲,還需要改進(jìn)。實(shí)驗(yàn)表明,本方法在移動(dòng)終端的置換效果相較于其他應(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í)的物體識(shí)別[D].上海交通大學(xué),2013.
[11] Beazley D M.Python essential reference[M].Addison-Wesley Professional,2009.
[12] 馬小虎,譚延琪.基于鑒別稀疏保持嵌入的人臉識(shí)別算法[J].自動(dòng)化學(xué)報(bào),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] 王俊艷,蘇光大,林行剛.用于人臉識(shí)別的下頜輪廓線分類方法[J].光電子·激光,2005,16(11):1368-1372.
[15] 杜立強(qiáng).基于主動(dòng)形狀模型的面部關(guān)鍵特征點(diǎn)定位技術(shù)研究[D].國(guó)防科學(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)域:信息安全,圖像識(shí)別。張俊杰,助教。
TP391.4
A
10.3969/j.issn.1000-386x.2017.06.037