旗下產(chǎn)業(yè): A產(chǎn)業(yè)/?A實習(xí)/?A計劃
全國統(tǒng)一咨詢熱線:010-5367 2995
首頁 > 熱門文章 > 大數(shù)據(jù)分析 > 通過深度學(xué)習(xí)+TensorFlow.js對蒙娜麗莎進行動畫處理

通過深度學(xué)習(xí)+TensorFlow.js對蒙娜麗莎進行動畫處理

時間:2020-11-27來源:5wd995.cn點擊量:作者:Sissi
時間:2020-11-27點擊量:作者:Sissi



  看蒙娜麗莎(Mona Lisa)畫像時,你會發(fā)現(xiàn)她的眼睛將四處移動跟隨你。這就是所謂的“蒙娜麗莎效應(yīng)”。為了娛樂,我們把蒙拉麗莎畫像制成交互式數(shù)字肖像,通過你的瀏覽器和網(wǎng)絡(luò)攝像頭將這種現(xiàn)象變?yōu)楝F(xiàn)實。


 

  該項目的核心是利用TensorFlow.js,深度學(xué)習(xí)和一些圖像處理技術(shù)??傮w思路如下:首先,我們必須生成蒙娜麗莎(Mona Lisa)頭的圖像序列,眼睛從左到右凝視。從該項目中,我們將根據(jù)觀看者的位置連續(xù)不斷地實時選擇并顯示單個幀。
 

  在通過深度學(xué)習(xí)+TensorFlow.js對蒙娜麗莎進行動畫處理中,我將詳細介紹該項目的技術(shù)設(shè)計和實施。
 

  通過深度學(xué)習(xí)對蒙娜麗莎進行動畫處理
 

  圖像動畫是一種允許通過駕駛視頻偽造靜態(tài)圖像的技術(shù)。使用基于深度學(xué)習(xí)的方法,能夠產(chǎn)生令人信服的蒙娜麗莎注視動畫。
 

  具體來說,使用了Aliaksandr Siarohin等人發(fā)布的一階運動模型(FOMM)。在2019年,此方法在較高級別上由兩個模塊組成:一個模塊用于運動提取,另一個模塊用于圖像生成。運動模塊從行駛視頻中檢測關(guān)鍵點和局部仿射變換。然后,將連續(xù)幀之間的這些值的差異用作預(yù)測密集運動場的網(wǎng)絡(luò)的輸入,以及指定需要修改或根據(jù)上下文推斷的圖像區(qū)域的遮擋遮罩。然后,圖像生成網(wǎng)絡(luò)檢測面部標志,并產(chǎn)生最終輸出-根據(jù)運動模塊的結(jié)果扭曲和修復(fù)的源圖像。
 

  之所以選擇FOMM,是因為它易于使用。在該領(lǐng)域中,先前的模型是“特定于對象的”,這意味著它們需要對要進行動畫處理的對象的詳細數(shù)據(jù),而FOMM對此卻不可知。更重要的是,作者發(fā)布了一種開源,開箱即用的實現(xiàn),帶有針對面部動畫的預(yù)先訓(xùn)練的權(quán)重。因此,將模型應(yīng)用于Mona Lisa變得出乎意料的直接:我將回購克隆到了Colab筆記本中,制作了一段簡短的駕駛視頻,眼睛四處移動,并通過模型和截圖將其反饋給模型。 Gioconda的頭部。最終的電影很出色。由此,我最終僅采樣了33張圖像來構(gòu)成最終的動畫。

通過深度學(xué)習(xí)+TensorFlow.js對蒙娜麗莎進行動畫處理
 

  FOMM生成的駕駛視頻和圖像動畫預(yù)測的示例。

通過深度學(xué)習(xí)+TensorFlow.js對蒙娜麗莎進行動畫處理

  使用一階運動模型生成的最終動畫幀的子樣本。
 

  圖像融合
 

  盡管可以出于項目目的重新訓(xùn)練模型,但還是決定在Siarohin權(quán)重的約束范圍內(nèi)進行工作,以避免原本需要的時間和計算資源。但是,這意味著將生成的幀固定在比所需的更低的分辨率上,并且僅由對象的頭部組成。但是,由于希望最終的視覺效果包含蒙娜麗莎的全部內(nèi)容(包括手,軀干和背景),因此我們的計劃是將輸出的頭部框架簡單地疊加到繪畫的圖像上。

通過深度學(xué)習(xí)+TensorFlow.js對蒙娜麗莎進行動畫處理
 

  頭部框架覆蓋在基礎(chǔ)圖像之上的示例。為了更好地說明問題,此處顯示的版本來自項目的早期迭代,其中頭部框架中的分辨率進一步降低。
 

  但是,這帶來了自己的挑戰(zhàn)。如果你看上面的示例,你會注意到,由于FOMM的變形過程,模型的較低分辨率輸出(加上一些細微的附帶背景變化)使頭部框架從視覺上突出了。換句話說,這顯然只是一張圖片在另一張圖片之上。為了解決這個問題,在Python中進行了一些圖像處理,以將頭部圖像“融合”到底層圖像中。
 

  首先,將頭架調(diào)整為原始分辨率。從那里開始,使用這些模糊像素和基礎(chǔ)圖像中相應(yīng)像素的加權(quán)平均值創(chuàng)建了一個新幀,其中,頭部幀中像素的權(quán)重(或alpha)隨著其遠離中點而減小。
 

  用于確定alpha的函數(shù)是從2D乙狀結(jié)腸開始改編的,表示為:

通過深度學(xué)習(xí)+TensorFlow.js對蒙娜麗莎進行動畫處理
 

  其中j決定邏輯函數(shù)的斜率,k是拐點,m是輸入值的中點。繪制出來的函數(shù)看起來像:

通過深度學(xué)習(xí)+TensorFlow.js對蒙娜麗莎進行動畫處理
 

  在將上述過程應(yīng)用于動畫集中的所有33幀之后,對于不產(chǎn)生懷疑的眼睛,每個疊加所產(chǎn)生的疊加似乎是一張圖像:

通過深度學(xué)習(xí)+TensorFlow.js對蒙娜麗莎進行動畫處理
 

  通過BlazeFace跟蹤查看者的頭部
 

  此時剩下的就是確定如何通過網(wǎng)絡(luò)攝像頭跟蹤用戶并顯示相應(yīng)的框架。
 

  自然地,轉(zhuǎn)向TensorFlow.js來完成這項工作。該庫提供了一組相當強大的模型來檢測給定視覺輸入下人類的存在,但是經(jīng)過一番研究和思考,選擇了BlazeFace。
 

  BlazeFace是基于深度學(xué)習(xí)的對象識別模型,可檢測人臉和面部標志。經(jīng)過專門培訓(xùn),可以使用移動相機輸入。這對于我的用例來說效果很好,因為我希望大多數(shù)觀看者無論是通過移動設(shè)備還是在他們的移動攝像頭上,都以類似的方式使用他們的網(wǎng)絡(luò)攝像頭-頭部對準框架,正面并且距離攝像頭非常近筆記本電腦。
 

  但是,在選擇此模型時,我最重要的考慮是其非凡的檢測速度。為了使該項目具有說服力,我需要能夠?qū)崟r運行整個動畫,包括面部識別步驟。BlazeFace適應(yīng)了單發(fā)檢測(SSD)模型,這是一種基于深度學(xué)習(xí)的對象檢測算法,可同時提出邊界框并僅在網(wǎng)絡(luò)的前向通道中檢測對象。BlazeFace的輕巧檢測器能夠以每秒200幀的速度識別面部標志。

通過深度學(xué)習(xí)+TensorFlow.js對蒙娜麗莎進行動畫處理
 

  給定輸入圖像,BlazeFace可以捕獲的內(nèi)容的演示:人頭的邊界框以及面部標志。
 

  確定了模型之后,編寫了代碼,以將用戶的網(wǎng)絡(luò)攝像頭數(shù)據(jù)不斷地傳輸?shù)紹lazeFace中。在每次運行中,模型都會輸出一組面部地標及其相應(yīng)的2D坐標位置。使用此方法,通過計算眼睛之間的中點來近似臉部中心的X坐標。
 

  最后,將此結(jié)果映射到0到32之間的整數(shù)。你可能還記得,這些值分別代表動畫序列中的一幀–其中0代表左眼是蒙娜麗莎,而32代表左眼。正確的。從那里開始,只需要在屏幕上顯示框架即可。


 

預(yù)約申請免費試聽課

填寫下面表單即可預(yù)約申請免費試聽!怕錢不夠?可先就業(yè)掙錢后再付學(xué)費! 怕學(xué)不會?助教全程陪讀,隨時解惑!擔心就業(yè)?一地學(xué)習(xí),可推薦就業(yè)!

?2007-2021/北京漫動者教育科技有限公司版權(quán)所有
備案號:京ICP備12034770號

?2007-2022/ 5wd995.cn 北京漫動者數(shù)字科技有限公司 備案號: 京ICP備12034770號 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc

京公網(wǎng)安備 11010802035704號

網(wǎng)站地圖