人臉替換(FaceSwap)的一些思考


本文鏈接:https://blog.csdn.net/cy1070779077/article/details/85224347
人臉替換(FaceSwap)的一些思考

最一開始,我使用了openCV(一個機器學習視覺庫)的一個比較專業的tutorial(之前人臉檢測也是使用了這個)中提供的一種人臉替換的方式。主要思路是,假設臉A要替換為臉B,先檢測出臉A和臉B的臉部標記(facial landmarks,包括眼睛、鼻子、嘴巴等等諸多特征點的位置),針對臉B所有特征點構造一個凸包,凸包(外邊界)上的點兩兩連接,可以划分出很多小的三角形,然后利用微分的思想將這些每個小三角形替換(仿射等變換)到臉A對應的位置,最后openCV提供了讓結果圖顯得看起來自然一些的處理函數(泊松克隆,Seamless cloning)。

其實以上這種處理方式對圖片上的人臉替換應用需求已經比較足夠了,比如圖output.jpg,它原本是特朗普的臉,替換為了泰德·科魯茲的臉(雖然乍一看有些不自然,但感覺總體還是不錯的)


接下來我使用Premiere自制了一段簡單的小視頻,本質上就是特朗普圖片的縮放和移動。然后我們進行視頻中人臉的替換實驗,得到輸出視頻。我們很容易發現存在的問題,就是視頻中臉部的抖動問題。

(以上這個方法和我之前在處理的模塊化的應用一樣,實現步驟比較簡易,但是由於預期目標的不同,所以可能給人的滿意度會大有不同。像人臉檢測的話,我們的bounding box有一定抖動其實影響不大,但是人臉替換則不然。)

關於臉部抖動的原因,我思考了一下,主要應該是因為人臉檢測的時候每一幀得到的每個臉部標記點的相對位置變動性導致的。通俗地講,第1幀的鼻子和嘴巴的標記點之間可能距離20個像素點,但是第2幀的鼻子和嘴巴的標記點之間可能距離25個像素點,因為我們送入到人臉檢測模型里的是一幀對應的一整張圖片,人臉的大小以及人臉在這整張圖片上的位置都會影響最后臉部每個標記點的位置以及標記點之間的相對位置。所以導致了從第1幀到第2幀可能發生的臉部抖動的問題。

所以我也查閱了一下其他的人臉替換方法。

第一個是DeepFakes,它是使用深度神經網絡做圖像生成。我大致看了一下它的基本思想,通俗地講,假設要把臉A替換為臉B,那么我們自行將臉B的圖片進行各種方式的扭曲化(扭曲方式應該是有講究的),得到大量扭曲化圖片的集合S_B,我們訓練一個深度神經網絡模型M能將S_B里每張扭曲化的臉還原為臉B,之后我們把臉A送入模型M,這樣我們就能較好的實現把臉A替換為臉B。

第二個是DeepFaceLab,也只是大致看了一下,需要使用tensorflow機器學習框架。

這兩種方法和一開始第一種方法不同。一開始第一種方法只是在人臉檢測的過程中運用了機器學習的思想,用的是pretrained的預測模型,而真正到替換的時候只是簡單的做仿射變換而已;但是后兩種的話就比較徹底、完整地在使用機器學習方法做人臉替換,效果個人感覺應該會好不少。但是后兩種方法如果想要較好地利用起來可能還得花不少時間配置環境、看懂技術細節。
————————————————
版權聲明:本文為CSDN博主「RoyChen97」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/cy1070779077/article/details/85224347


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM