本文連接:https://blog.csdn.net/cy1070779077/article/details/85224347
人臉替換(FaceSwap)的一些思考網絡
最一開始,我使用了openCV(一個機器學習視覺庫)的一個比較專業的tutorial(以前人臉檢測也是使用了這個)中提供的一種人臉替換的方式。主要思路是,假設臉A要替換爲臉B,先檢測出臉A和臉B的臉部標記(facial landmarks,包括眼睛、鼻子、嘴巴等等諸多特徵點的位置),針對臉B全部特徵點構造一個凸包,凸包(外邊界)上的點兩兩鏈接,能夠劃分出不少小的三角形,而後利用微分的思想將這些每一個小三角形替換(仿射等變換)到臉A對應的位置,最後openCV提供了讓結果圖顯得看起來天然一些的處理函數(泊松克隆,Seamless cloning)。框架
其實以上這種處理方式對圖片上的人臉替換應用需求已經比較足夠了,好比圖output.jpg,它本來是特朗普的臉,替換爲了泰德·科魯茲的臉(雖然乍一看有些不天然,但感受整體仍是不錯的)less
接下來我使用Premiere自制了一段簡單的小視頻,本質上就是特朗普圖片的縮放和移動。而後咱們進行視頻中人臉的替換實驗,獲得輸出視頻。咱們很容易發現存在的問題,就是視頻中臉部的抖動問題。機器學習
(以上這個方法和我以前在處理的模塊化的應用同樣,實現步驟比較簡易,可是因爲預期目標的不一樣,因此可能給人的滿意度會大有不一樣。像人臉檢測的話,咱們的bounding box有必定抖動其實影響不大,可是人臉替換則否則。)模塊化
關於臉部抖動的緣由,我思考了一下,主要應該是由於人臉檢測的時候每一幀獲得的每一個臉部標記點的相對位置變更性致使的。通俗地講,第1幀的鼻子和嘴巴的標記點之間可能距離20個像素點,可是第2幀的鼻子和嘴巴的標記點之間可能距離25個像素點,由於咱們送入到人臉檢測模型裏的是一幀對應的一整張圖片,人臉的大小以及人臉在這整張圖片上的位置都會影響最後臉部每一個標記點的位置以及標記點之間的相對位置。因此致使了從第1幀到第2幀可能發生的臉部抖動的問題。函數
因此我也查閱了一下其餘的人臉替換方法。學習
第一個是DeepFakes,它是使用深度神經網絡作圖像生成。我大體看了一下它的基本思想,通俗地講,假設要把臉A替換爲臉B,那麼咱們自行將臉B的圖片進行各類方式的扭曲化(扭曲方式應該是有講究的),獲得大量扭曲化圖片的集合S_B,咱們訓練一個深度神經網絡模型M能將S_B裏每張扭曲化的臉還原爲臉B,以後咱們把臉A送入模型M,這樣咱們就能較好的實現把臉A替換爲臉B。spa
第二個是DeepFaceLab,也只是大體看了一下,須要使用tensorflow機器學習框架。.net
這兩種方法和一開始第一種方法不一樣。一開始第一種方法只是在人臉檢測的過程當中運用了機器學習的思想,用的是pretrained的預測模型,而真正到替換的時候只是簡單的作仿射變換而已;可是後兩種的話就比較完全、完整地在使用機器學習方法作人臉替換,效果我的感受應該會好很多。可是後兩種方法若是想要較好地利用起來可能還得花很多時間配置環境、看懂技術細節。
————————————————
版權聲明:本文爲CSDN博主「RoyChen97」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。
原文連接:https://blog.csdn.net/cy1070779077/article/details/85224347視頻