成 俊, 周桂桃,熊友龍, 姚建超
(1.湖北理工學(xué)院 計算機(jī)學(xué)院,湖北 黃石 435003;2.鄂東醫(yī)療集團(tuán)黃石市中心醫(yī)院(湖北理工學(xué)院附屬醫(yī)院) 全科醫(yī)學(xué)科,湖北 黃石 435000)
人臉置換是指用一段視頻中的人臉區(qū)域置換另一段視頻中的人臉區(qū)域,并保證置換后的人臉圖像擁有逼真自然的視覺效果,被廣泛用于保護(hù)隱私[1]、計算機(jī)生成圖像[2]和人臉數(shù)據(jù)集的潛在數(shù)據(jù)論證方法中[3],有著廣闊的應(yīng)用前景。Bitouk等[4]提出了一個具有相似外觀和姿態(tài)的大型人臉圖像庫,可以置換鼻子、眼睛、嘴巴,并進(jìn)行顏色調(diào)整以融合源臉和目標(biāo)臉。但是該系統(tǒng)具有一定的局限性,只能置換目標(biāo)人臉的內(nèi)容,而忽略了源人臉的表達(dá),使得人臉置換后的效果看起來不自然。Kevin Dale等[5]提出了一種使用多線性人臉模型從原始視頻片段和目標(biāo)視頻序列中跟蹤面部表情數(shù)據(jù)的視頻人臉置換方法。但是該方法要求原始視頻和目標(biāo)視頻中的人臉扮演相似的角色,因此需要進(jìn)行人工干預(yù),系統(tǒng)復(fù)雜。Afifi等[6]設(shè)計了一種利用MPB方法實(shí)現(xiàn)自動置換視頻中人臉的系統(tǒng)。該方法可以減少泊松圖像編輯引起的圖像混合問題,人臉置換效果較好,但也需要人工干預(yù)。為了充分利用人臉信息,Cheng等[7]提出了一種基于三維可變模型的視頻人臉自動替換方法。但它的三維掃描庫需要大量的人臉信息,置換過程會消耗較多的時間和空間。Suwajanakorn等[8]提出了一種基于三維人臉重建、跟蹤、對齊和多紋理模型的新方法,并應(yīng)用于木偶制作。但是該方法只適用于幾百幅圖像,不能應(yīng)用于單個圖像。
近年來,隨著深度學(xué)習(xí)算法的不斷發(fā)展,出現(xiàn)了一些置換效果更好的人臉置換方法。Korshunova等[9]提出了一個利用CNN網(wǎng)絡(luò)來替換人臉的方法,并建立一個由內(nèi)容損失、風(fēng)格損失、光損失和總變化規(guī)律等加權(quán)組合成的損失函數(shù)。但該方法只能置換一幅圖像,且與原始人臉相比,置換后的人臉看起來很僵硬。Nirkin等[10]提出了一種基于FCN[11]來分割并置換人臉的方法,置換后的人臉面部雖然看起來不是很自然,但能夠較好地處理面部遮擋問題。本文設(shè)計了一種基于深度學(xué)習(xí)的視頻人臉置換系統(tǒng),可以實(shí)現(xiàn)簡單快速地人臉置換,并可以將圖像合成為一個人臉置換視頻。
基于深度學(xué)習(xí)的視頻人臉置換系統(tǒng)設(shè)計的基本思路如下。
1)將目標(biāo)視頻素材和源視頻素材分別逐幀提取為序列圖。
2)對目標(biāo)視頻素材提取的每一幀圖片進(jìn)行人臉檢測,并保存人臉部分圖片到新的目錄下;將人臉部分圖片轉(zhuǎn)為灰度圖,采用Sobel算子計算x和y方向上的梯度,然后在x方向上減去y方向上的梯度;去除圖像上的噪聲,用低通濾波器平滑圖像。
3)對模糊圖像進(jìn)行二值化處理,將梯度大于90的圖像像素設(shè)置為255,其他圖像的像素設(shè)置為0。
4)尋找邊緣輪廓,使用dlib庫進(jìn)行人臉檢測并定位,獲取頭部序列圖(源視頻序列圖的頭部提取方法相同)。
5)對目標(biāo)視頻素材和源視頻素材分別進(jìn)行訓(xùn)練,生成共同的隱含信息;通過解碼器,重新生成目標(biāo)視頻序列圖像和源視頻序列圖像,并比較兩者之間的損失函數(shù),通過梯度下降法優(yōu)化,計算出MODEL。
6)將通過多次迭代的MODEL合成到目標(biāo)視頻中。
系統(tǒng)采用基于檢測點(diǎn)的人臉檢測方法,主要步驟為:①加載dlib自帶的frontal_face_detector作為人臉特征檢測器;②加載官方提供的模型構(gòu)建特征提取器;③使用detector進(jìn)行人臉檢測;④輸出人臉個數(shù);⑤使用predictor進(jìn)行人臉關(guān)鍵點(diǎn)識別;⑥繪出人臉關(guān)鍵點(diǎn)。
完成人臉關(guān)鍵點(diǎn)檢測后,可以獲得包含有目標(biāo)視頻的序列幀(圖片)素材和源視頻的臉部(圖片)素材,采用AutoEncoder(自編碼器)對素材進(jìn)行訓(xùn)練得到人臉模型,步驟如下。
1)首先encoder通過卷積神經(jīng)網(wǎng)絡(luò)抽取1張圖片的面部細(xì)節(jié)特征,然后decoder根據(jù)面部特征數(shù)據(jù)來還原這張圖片。模型訓(xùn)練過程中含有1個損失函數(shù)error function(loss function),根據(jù)此函數(shù)來衡量轉(zhuǎn)換的好壞程度,當(dāng)loss function(value)取到最小值,模型訓(xùn)練結(jié)束。
2)采用encoder來學(xué)習(xí)怎樣將1個圖片A和圖片B轉(zhuǎn)化為面部特征值;采用decoder A和decoder B來學(xué)習(xí)怎樣通過面部特征值重構(gòu)圖片A和圖片B。而在對素材進(jìn)行訓(xùn)練時,將圖片A和圖片B送入同1個encoder,但是分別用2個不同的decoder來還原這2張圖片;然后使用encoder抽取圖片B獲取到的人臉特征,使用A的decoder來還原這個人臉特征,最終得到A的臉和B的表情。
人臉置換系統(tǒng)由源視頻的人臉提取、目標(biāo)視頻的人臉提取、目標(biāo)視頻中的人臉置換3個部分組成。
人臉置換系統(tǒng)的功能是識別視頻中的人臉,將人臉作為一項重要的特征來對視頻進(jìn)行分析。系統(tǒng)流程圖如圖1所示。
圖1 系統(tǒng)流程圖
人臉置換系統(tǒng)首先輸入目標(biāo)視頻,提取視頻文件中每一幀的臉部數(shù)據(jù),如果提取失敗,則程序直接結(jié)束;如果提取成功,則繼續(xù)提取源視頻中每一幀的臉部數(shù)據(jù),如果繼續(xù)提取失敗,則程序直接結(jié)束。全部提取成功后,則通過深度學(xué)習(xí)訓(xùn)練算法將源視頻中的人臉置換到目標(biāo)視頻的人臉上,然后輸出合成視頻,程序結(jié)束。
人臉置換系統(tǒng)結(jié)構(gòu)主要分為3個模塊:分割視頻幀模塊、提取人物面部特征模塊和替換人物面部特征模塊,相應(yīng)地把視頻幀轉(zhuǎn)換成圖片和把替換成功的圖片轉(zhuǎn)換成視頻。系統(tǒng)分割視頻幀模塊可以分為2個部分:第1個是分割源視頻,把源文件的視頻幀分解成圖片;第2個是把目標(biāo)文件的視頻幀分解成圖片。提取人物面部特征模塊也可分為2個部分,即把源文件圖片的人物面部特征提取出來和把目標(biāo)文件圖片的人物面部特征提取出來。替換人物面部特征模塊時,通過pytorch工具訓(xùn)練后,將源圖片的人物面部替換成目標(biāo)圖片的人物面部,最后合成目標(biāo)視頻。系統(tǒng)結(jié)構(gòu)圖如圖2所示。
圖2 系統(tǒng)結(jié)構(gòu)圖
人臉置換實(shí)驗主要是在視頻處理的過程中,把視頻中的人臉置換為圖片中的人臉。開發(fā)工具為pycharm軟件,實(shí)驗所用視頻與圖片全部來源于網(wǎng)上,視頻格式主要為MP4和avi,圖片格式主要為jpg和png。軟硬件實(shí)驗環(huán)境見表1。
表1 軟硬件實(shí)驗環(huán)境
對提取的人臉圖像進(jìn)行訓(xùn)練,人臉模型訓(xùn)練過程如圖3所示。由圖3可以看出,該系統(tǒng)人臉置換效果較好,成功地將視頻中的人臉置換為圖片中的人臉,且合成后的圖像自然逼真,分辨率與清晰度均有提高。對于分辨率為640×480的視頻,平均處理速度為每幀180 ms;對于分辨率為1280×720的視頻,平均處理速度為每幀800 ms。視頻中的人臉置換每幀平均耗時分布情況如圖4所示,由圖4可以看出人臉圖像融合與特征點(diǎn)定位耗時較多,對處理速度影響較大。
圖3 人臉模型訓(xùn)練過程
圖4 視頻中的人臉置換每幀平均耗時分布情況
通過CNN深度神經(jīng)網(wǎng)絡(luò)分析處理輸入圖像的深層信息,設(shè)計并實(shí)現(xiàn)了人臉置換系統(tǒng)。實(shí)驗結(jié)果表明,人臉置換成功率較高,合成圖像自然逼真,具有一定的開發(fā)價值,基本滿足用戶需求。