1. 程式人生 > >深度學習AI美顏系列---天天P圖瘋狂變臉演算法

深度學習AI美顏系列---天天P圖瘋狂變臉演算法

自從天天P圖出了瘋狂變臉的特效之後,到現在為止已經近兩年時間了,這兩年時間,天天P圖多次憑藉換臉特效登上APP Store排行榜首,從小學生證件照到聖誕節夢幻妝再到後來的各種影視遊戲特效,以及後來的軍裝照等等等等,5月4日青年節,天天P圖的“前世青年照”又是傳遍了朋友圈,火遍了排行榜。

在這裡本人將這個換臉放到這個模組來講,是因為這個技術,用深度學習來搞,個人認為潛力更大。下面簡單將換臉分為深度學習方法和傳統方法來講。

[深度學習方法]

2016年的一篇論文Fast Face-swap Using Convolutional Neural Networks,通過卷積神經網路實現了換臉效果,如下圖所示:


具體演算法思路是:

1,人臉對齊(根據特徵點將目標影象與模板影象中的人臉對齊);

2,通過CNN進行換臉,網路結構如下:


3,定義內容損失/風格損失/光照損失/平滑損失代價函式,加入訓練過程,來解決膚色光照不均,不平滑,內容不協調的問題;

損失函式如下:





該方法已經達到了一定的效果:

1,人臉融合自然;

2,側臉效果要優於傳統方法的效果;

但是仍然具有以下弊端:

1,每個模版照片需要單獨訓練網路,造成模型資料龐大,訓練耗時,模型更改麻煩等諸多問題;

2,每個模型需要一個模板對應的多張不同姿態與光照條件的影象;

單單這一點就很不利於產品化,在大多數情況下,我們是無法提供多張不同姿態與光照下的模板影象的;

3,速度慢,本人的換臉演算法是可以達到實時處理的;

關於這個基於卷積神經網路換臉演算法的詳情,可參考

個人認為:基於深度學習的方法在多角度側臉的情況下,具有很強的優勢,在膚色融合方面與傳統演算法持平,在速度方面,未來將不是問題!

[傳統方法]

本人主要研究基於傳統影象演算法的換臉,本人猜測天天P圖基本上也是基於傳統演算法做的;

我們以天天P圖效果舉例來講:


白百合的照片與右邊的模板圖相比,在臉型和五官位置上都發生了變化,也就是變的好看了很多,總結變化如下:

1,膚色變成了模板圖的膚色;

2,臉型變成了模板圖的臉型;

3,五官大小形狀等發生了一定的變化;

據此推測,天天P圖做了如下操作:

1,將白百合的膚色做了轉換,換成了模板圖的膚色;

2,將白百合的臉型包括五官做了變形,變成了接近模板圖的形狀;

注意,這裡是接近模板圖的形狀,而並非是跟模板圖完全一樣的形狀,網上很多做換臉的都是直接將人臉對齊到了模板中的形狀,這是不行的,臉型差異過大時,會造成畸變,效果很差;

本人演算法步驟:

1,根據人臉特徵點(本人使用的是101個人臉特徵點),將模板和白百合的人臉同時變形到第三目標形狀,變形演算法使用MLS變形即可;

這一步驟可以分為如下兩步:

①直接將白百合人臉點位對齊到模板點位;

②將對齊後的白百合人臉五官與臉型進行美化或稱美型;

這一步可以參考論文《Data-Driven Face Cartoon Stylization》,當然這一步也可以使用深度學習來做,個人認為效果要比這篇論文效果更好,隨後本人會另寫部落格專門介紹基於CNN的人臉美型;

MLS變形程式碼連結點選開啟連結

當然本人也有更好的變形點選開啟連結

本人美型演算法效果圖如下:


2,基於LAB顏色空間對白百合和模板人臉膚色進行換色+融合;

3,新增風格濾鏡+美顏美妝;

對於美妝可以直接使用妝容遷移來做,效果很好,妝容遷移算連結:①點選開啟連結,②點選開啟連結

本人妝容遷移效果如下:


上面就是本人傳統換臉演算法的過程,本人儘量用最簡單的演算法去表現最好的效果,給出一個完整的演算法過程效果圖:


對於效果,大家可以使用白百合的測試圖到本人的DEMO和天天P圖中測試;

下面本人以5.4青年節最火的前世青年效果為例,給出本人演算法與天天P圖效果對比圖,這裡僅以一組圖為例:


這裡測試圖在本人所給的DEMO中,大家可以自行測試;

最後,指出天天P圖膚色融合的一些問題,對於某些照片,膚色融合之後會出現顏色偏綠問題,可能是某個顏色空間中顏色溢位導致,舉例如下(左圖為本人演算法,右圖為天天效果):


最後,本人給出本人瘋狂變臉效果的DEMO,以免大家耳聽為虛,DEMO執行平臺為WINDOWS 8以上,DEMO中給有TestPicture為測試圖,FS為天天P圖的模板,僅供測試,切勿商業用途,以免侵權,下載連結:點選開啟連結

在給一個換臉資源集合:點選開啟連結

本人QQ1358009172,DEMO中無人臉識別,因此僅限本人所給測試圖有效!共勉!