閱讀804 返回首頁    go 阿裏雲 go 技術社區[雲棲]


60年後的你長什麼樣?人臉老化三大技術探秘

通過計算機視覺技術模擬出人老了的樣子,這樣的應用實際上並不新奇。這些年,類似的場景可謂層出不窮,有的App可以通過夫妻的樣貌預測出孩子的模樣,有的App可以通過用戶上傳的照片還原你小時候的樣子和老了之後的樣子,甚至還有一些App可以通過一兩張照片生成出一段短視頻,展示用戶一生的樣貌變化,讓使用的人頗有滄海桑田之感。

image

而我們這次的“當你老了”項目的著眼點略有不同,強調的是公益和技術的結合,因此我們需要將用戶上傳的麵部照片變成20年,40年和60年後,讓用戶看到自己滿臉皺紋,白發蒼蒼的樣子,進而產生關愛身邊老年人的感慨,人人每年公益3小時,共同為公益做出貢獻 。

經過將近4周左右的努力,我們初步完成了人臉老化項目的開發,趕在9月5日央視慈善之夜晚會前及時上線。央視公益晚會期間,用戶通過掃描電視屏幕上的二維碼,進入我們手淘的互動頁麵(詳見圖1),選擇自己喜歡的照片進行老化。一場晚會下來,許多的用戶體驗到了自己臉部變老之後的特效。

image
圖1. 手淘“當你老了”項目頁麵示意圖

整個項目中我們遇到了很多的挑戰,比如老化模版的選擇,臉型的變化趨勢問題,膚色的融合問題等等,下麵我會把整個人臉老化技術分成幾個關鍵的部分,進行簡短的剖析。

1、臉型的老化算法

我們借鑒了一篇2017年最新的利用深度學習進行人臉老化的文章[1],該文章提出了一種叫做conditional adversarial autoencoder (CAAE)的深度網絡結構,該結構能夠學習出麵部的manifold,從而預測出任何一張輸入麵部圖像的全年齡麵部圖像。該網絡的結構示意圖如圖2所示,該網絡學習之後的預測結果示意圖如圖3所示。


image


圖2. Structure of the proposed CAAE network for age progression/regression. The encoder E maps the input face to a vector z (personality). Concatenating the label l (age) to z, the new latent vector [z, l] is fed to the generator G. Both the encoder and the generator are updated based on the L2 loss between the input and output faces. The discriminator Dz imposes the uniform distribution on z, and the discriminator Dimg forces the output face to be photo-realistic and plausible for a given age label.


image


圖3. Comparison to prior works of face aging. The first column shows input faces, and second column are the best aged faces cited from prior works. The rest columns are our results from both age progression and regression. The red boxes indicate the comparable results to the prior works.

盡管該深度學習網絡能夠很好的獲得全年齡段的輸出,但是它存在兩個弊端,其一是它訓練預測出來的圖片和輸入人臉差異比較大,不像原始輸入;其二是處理速度上該網絡速度比較慢,很難適應項目的要求。針對這兩點缺點,我們決定隻保留該網絡的老化臉型的能力,而臉上的紋理,即皺紋部分我們通過傳統方法來貼。圖4顯示了我們通過該網絡獲得的臉型變老的能力示意圖。


image
圖4. 麵部臉型變老的示意圖,從左到右分別是原圖,20年後,40年後,60年後

2、臉部紋理的老化算法

在貼臉部皺紋或者說紋理的過程中,我們采用的是分而治之的辦法[2]。即把麵部分成許許多多的小三角形,然後將老人模版上對應的三角形貼到相應的輸入人臉的三角形上。這樣做的好處是每個三角形足夠小,利用OpenCV的WarpAffine進行形變貼圖時不會出現不自然的現象。當然這樣做的前提是,我們已經獲得了輸入人臉以及模版人臉的所有關鍵點,同時利用Delaunay Triangulation將所有關鍵點劃分成若幹三角形了。關鍵點和三角形Mesh示意圖如圖5所示。

image
圖5. 麵部關鍵點示意圖,麵部三角形化示意圖

3. 膚色的融合算法

在完成了人臉的老化臉型變化和貼皺紋的步驟後,我們還缺最後一步,即將老化後的臉完美無瑕地貼回到原始輸入圖像上去,否則會顯得老化很不自然。這裏我們采用了一個非常經典地融合算法,即Poisson Image Editing[3],它是通過保留剃度的方式使貼過來的圖像能夠無縫地融入背景圖像。這裏我們利用了OpenCV3.2裏麵提供的SeamlessClone這樣一個函數,可以比較方便地實現前後景融合。膚色和紋理的融合示意圖如圖6所示。


image
圖6. 從左到右依次為原始圖像,老人模版貼入相應三角形,SeamlessClone之後的融合結果

4. 項目小結

在臉型,皺紋,膚色的老化之外,我們還嚐試了頭發的變白等算法,篇幅有限,就不在此贅述了。最後貼幾張我們認為效果還是不錯的人臉老化結果作為結尾。


image
image
image
圖7. 效果示意圖

Reference

[1] Zhifei Zhang, Yang Song, and Hairong Qi. "Age Progression/Regression by Conditional Adversarial Autoencoder." IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2017.
[2] Face Morph Using OpenCV — C++ / Python, https://www.learnopencv.com/face-morph-using-opencv-cpp-python/
[3] Poisson Image Editing, https://www.ctralie.com/Teaching/PoissonImageEditing/.

來源:阿裏技術
原文鏈接

最後更新:2017-09-15 09:02:41

  上一篇:go  高紅冰:新四大發明彰顯互聯網普惠價值
  下一篇:go  【新特性】MySQL5.7新特性query_rewrite 插件