AI 換臉技術——DeepFakes 概述一
2017年12月,一個名為「DeepFakes」的用戶在Reddit上發布了一個「假視頻」,視頻中的藝人其實是後期加上的,但是看起來幾乎毫無破綻。他利用了深度學習和AI新技術,在成人電影中把演員的臉替換成某個藝人的臉,從而製作成了這個看上去以假亂真的視頻。
從視頻發布以後的好幾個星期,網路上不斷有人發表文章和報道,抨擊這一「換臉」技術,稱這種技術將會對社會產生很多負面的影響。比如說,這個「換臉」技術會給很多無辜清白的人(像那些無故出現在成人電影中的藝人)造成困擾;「假視頻」會加劇虛假新聞的散播,進而將大大損壞視頻作為證據的可信度。
確實,心懷不軌的人會利用這項技術做危害社會的事情。但是我們不能夠因此完全否定這項技術的價值,我們應該好好思考,如何把它用上正道,發揮它的積極作用。
所以,在這篇文章中,我將會介紹這項AI換臉技術的功能和原理,並且闡述其有發展前途的應用領域。
首先我們要先清楚什麼是DeepFakes?它能夠做什麼?
DeepFakes實際上是一種人臉交換技術,顧名思義,也就是在圖像或視頻中把一張臉替換成另一張臉。事實上,人臉交換技術在電影製作領域已經不是個新鮮詞了,但是之前電影視頻中的人臉交換非常複雜,專業的視頻剪輯師和CGI專家需要花費大量時間和精力才能完成視頻中的人臉交換。
DeepFakes的出現可以說是人臉交換技術的一個突破。利用DeepFakes技術,你只需要一個GPU和一些訓練數據,就能夠製作出以假亂真的換臉視頻。
這可以說是一個非常了不起的突破了,因為你只需要把上百張人物的樣圖輸入至一個演算法,就能完成人臉交換,製作出非常逼真的視頻效果。就算你是個對視頻剪輯一竅不通的外行,也能做到這樣。
DeepFakes的出現還意味著我們可以在視頻中進行大規模的「換臉」。我們大多數人都曾經把自己的照片上傳到網路上,因此,我們大多數人的臉都能夠輕易地被替換到一些視頻中,成為視頻的「主角」。不得不說,這是件非常可怕的事情,但這也並不那麼值得恐慌,畢竟我們大家早已接受了「照騙」。
「面部定製」已經不是什麼新鮮事了:在《星球大戰》中,CGI(計算機圖像生成)技術根據一名女演員的臉塑造了年輕時期的Carrie Fisher的形象。女演員臉上的點是用來進行精準的面部繪製的。,
DeepFakes能夠讓你在沒有任何技巧的情況下完成這樣的「面部定製」,但DeepFakes可不是「面部定製」。
在討論如何使用DeepFakes之前,我想先解決這樣的問題:DeepFakes究竟能夠做些什麼?它的技術原理是什麼?
為了了解其工作原理,我選了Jimmy Fallon和John Oliver主持的節目視頻作為分析案例。Jimmy Fallon和John Oliver是兩位非常受歡迎的晚間節目主持人,網路上有大量他們的節目視頻。這些視頻的亮度變化差不多,主持人在視頻中的動作和姿勢也很相似,這些相似性有利於降低分析的受干擾程度。但視頻同時又存在大量的變化(例如主持人嘴唇的變化),這樣又能夠保證分析的趣味性。
很幸運,我找到了一個包含了原始DeepFakes編碼和很多DeepFakes改進版編碼的GitHub。這個GitHub使用起來相當簡單,但是目前還處於訓練數據收集和準備的階段。
為了讓我們的分析實驗更簡單,我寫了一個能夠直接在YouTube視頻上運行的腳本,這樣一來,數據的收集和預處理工作就變得輕鬆多了,視頻轉換也只需一步就能完成。點擊此處查看我的GitHub報告,看看我是如何輕鬆地製作下面這個視頻的(我還分享了我的模型數據)。
簡單來說,這個腳本需要你給需要進行人臉交換的人各自準備一個YouTube視頻集,然後運行命令來對視頻進行預處理(從YouTube下載視頻、提取各個視頻的幀、找出視頻中的人臉)和訓練,並將其轉換為音頻和可調整大小的選項等。
到目前為止,DeepFakes還沒到完美的程度,但其呈現出的效果已經相當令人滿意了。關鍵是我事先並沒有對視頻做過任何改動,全是演算法的功勞——演算法通過觀察大量的圖片數據,學會製作出這樣以假亂真的換臉視頻。你一定也覺得非常神奇吧?那麼接下來,讓我們一起看看DeepFakes究竟是怎麼做到的。
DeepFakes的核心是一個「自動編碼器」,這個「自動編碼器」實際上是一個深度神經網路,它能夠接收數據輸入,並將其壓縮成一個小的編碼,然後從這個編碼中重新生成原始的輸入數據。
在這個標準的自動編碼器設置中,網路將嘗試學習創建一個編碼,從中網路能夠重新生成輸入的原始圖片。只要有足夠多的圖像數據,網路就能學會創建這種編碼。
DeepFakes讓一個編碼器把一個人臉壓縮成一個代碼和兩個解碼器,一個將其還原成人物A(Fallon),另一個還原成人物B(Oliver)。下面的圖能夠幫助你理解:
在這個案例中,使用的編碼器是一樣的,但是Fallon和Oliver的解碼器是不同的。在訓練的過程中,輸入的人臉會被扭曲,從而模擬一個「我們希望得到這樣的人臉」的概念。
下面我將介紹演算法訓練的三個步驟:
1. 首先,我們給編碼器輸入了一張Jimmy扭曲臉的圖片,並嘗試用解碼器A來重新還原他的臉,這就使得解碼器A必須要學會在紛繁複雜的圖片中識別並且還原出Jimmy的臉。
2. 然後,把Oliver扭曲臉的圖片輸入至同一個編碼器,並用解碼器B來還原Oliver的臉。
3. 我們不斷重複上面的操作,直到兩個解碼器能夠分別還原出兩個人的臉,同時編碼器也能夠學會通過抓取人臉關鍵信息,從而分辨出Jimmy和Oliver的臉。
等到以上的訓練步驟都完成以後,我們就能把一張Jimmy的照片輸入至編碼器,然後直接把代碼傳輸至解碼器B,將Jimmy的臉換成Oliver的臉。
這就是我們通過訓練模型完成換臉的全過程。解碼器獲取了Jimmy的臉部信息,然後把信息交給解碼器B,這時候解碼器B會作出這樣的反應:「這又是一條幹擾信息,這不是Oliver的臉,那麼我就把你換成Oliver吧。」
一條演算法僅通過觀察許多圖片就能夠再次生成、還原這些圖片,這聽起來挺不可思議的,但DeepFakes確確實實做到了,而且效果還相當不錯


※位形空間想解放物理空間的限制,沉浸式體驗
※2018年已近腰斬 比特幣價格跌破7千美元
TAG:科技無處不在 |