不好意思了,一篇文章帶了三個熱點:朱茵、楊冪以及波多野結衣。
我就說吃瓜羣衆平常要多關注科技新聞,一個在科技界已經誕生了一年多的「老技術」Deepfake 居然因爲「明星換臉」的視頻火出了圈。
起因是這樣的:一個熱心網友運用 Deepfake 把《射鵰英雄傳》裏黃蓉的臉由朱茵變成了楊冪,然後這個小視頻就在網上火了,一些酸溜溜的評論就出來了:
呵,我們楊女士早就拿過國際影后了好嗎。
言歸正傳,視頻裏換臉後人臉的輪廓、表情都一樣,動起來的效果也很真實,幾乎看不出破綻。高階的換臉技術也引來了一些恐慌:「怎麼實現的換臉?如果這一技術被用在其他地方,會怎麼樣?我會不會被別人假冒了都不知道?」
不用恐慌,因爲早就發生了。
AI 換臉術誕生後,造出了無數假視頻,並且還被用到了製作「不可描述」視頻,各種「不可描述」視頻被換上了好萊塢女星的臉,比如《神奇女俠》的女主角蓋爾·加朵( Cal Gadot )的臉就被嫁接到一個成人電影女星的身上。
所以,在視頻裏化身波多野結衣也不是不可能?這種「想看誰演AV就看誰演AV」的技術好像還真有點危險,不過雷鋒網作爲一個優秀的科技媒體,已經報道了太多關於 Deepfake 的新聞,讓我們回顧一下:
一、換臉術在技術上如何實現?
博客平臺「medium」有位作者就描述了把尼古拉斯凱奇的臉,放在川普的頭上的過程,最後效果如下↓↓↓
雷鋒網(公衆號:雷鋒網)發現,實現這個效果分三步:
1.收集凱奇的照片並選擇要修改的視頻區域。
由於只需換臉,所以第一步就是要識別圖片上的臉部,找到要替換的位置,確定方向和大小。如下圖,就像照片的像素一樣,現在的人臉被分解爲很多個像素,你要找出替換的像素區域。
2.使用方向梯度直方圖(簡稱HOG)得到凱奇的臉部特徵。
把梯度方向平均劃分爲多個區間,在每個單元裏面對所有像素的梯度方向,在各個方向區間進行直方圖統計,得到一個多維的特徵向量,每相鄰的單元構成一個區間,把一個區間內的特徵向量聯起來得到多維的特徵向量,用區間對樣本圖像進行掃描,掃描步長爲一個單元。最後將所有塊的特徵串聯起來,就得到了人臉的特徵。
3.使用特徵數據,訓練一個自動編碼器。
自動編碼器是一種神經網絡學習工具(深度學習背後的計算系統)。
通過在目標圖片上訓練模型,以保證即使輸入的是一個不同的面孔,模型也會把它轉換成原來的面孔。現在可以在目標視頻中識別人臉(視頻只是一堆圖片),然後通過訓練模型將川普轉換爲凱奇。
最後,合併圖像,大功告成。
原文:除了一鍵生成明星色情片,「AI 換臉術」的應用場景還有很多
二、詳解技術細節
Deepfake 的整個流程包括三步,一是提取數據,二是訓練,三是轉換。其中第一和第三步都需要用到數據預處理,另外第三步還用到了圖片融合技術。所以我在技術上主要分三個方面來剖析:圖像預處理、網絡模型、圖像融合。
1. 圖像預處理
從大圖(或視頻)中識別,並摳出人臉圖像,原版用的是 dlib 中的人臉識別庫(這個識別模塊可替換),這個庫不僅能定位人臉,而且還可以給出人臉的 36 個關鍵點座標,根據這些座標能計算人臉的角度,最終摳出來的人臉是擺正後的人臉。
2. 網絡模型
Encoder: 64x64x3->8x8x512
x = input_
x = conv(128)(x)
x = conv(256)(x)
x = conv(512)(x)
x = conv(1024)(x)
x = Dense(ENCODER_DIM)(Flatten()(x))
x = Dense(4 * 4 * 1024)(x)
x = Reshape((4, 4, 1024))(x)
x = upscale(512)(x)
Decoder:8x8x512->64x64x3
x = input_
x = upscale(256)(x)
x = upscale(128)(x)
x = upscale(64)(x)
x = Conv2D(3, kernel_size=5, padding='same', activation='sigmoid')(x)
整個網絡並不複雜,無非就是卷積加全連接,編碼->解碼,但是仔細研究後發現作者其實是匠心獨運的,爲什麼我不急着說,我們先看看 con 和 upscale 的內部實現:
def conv(filters):
def block(x):
x = Conv2D(filters, kernel_size=5, strides=2, padding='same')(x)
x = LeakyReLU(0.1)(x)
return x
return blockdef upscale(filters):
def block(x):
x = Conv2D(filters * 4, kernel_size=3, padding='same')(x)
x = LeakyReLU(0.1)(x)
x = PixelShuffler()(x)
return x
return block
conv 是中規中矩的卷積加 relu 激活函數,upscale 中有個函數叫 PixelShuffler,這個函數很有意思,其功能是將 filter 的大小變爲原來的 1/4,讓後讓高 h、寬 w 各變爲原來的兩倍,這也就是爲什麼前面的卷積層的 filter 要乘以 4 的原因。
經過測試對比,比如拿掉 upscale 換成步長爲 2 的反捲積,或者簡單 resize 爲原來的兩倍,實驗的效果都大打折扣,結果是網絡只能自編碼,而得不到需要的人臉。雖然作者沒有說這樣設計是引用那篇論文的思想,筆者也未讀到過直接討論這個問題的論文,但是有一篇論文可以佐證:Deep Image Prior,包括 Encoder 中的全連接層都是人爲打亂圖像的空間依賴性,增加學習的難度,從而使網絡能夠更加充分地理解圖像。所以 Encoder 中的全連接層和 PixelShuffler 都是必不可少的。經筆者測試,在不加 Gan 的情況下,去掉這兩個要素,網絡必定失敗。
3. 圖像融合
圖像融合放在技術難點分析中討論。
三、「AI 換臉術」還能怎麼用
除了被用於色情內容,這項技術其實也許還應該有更寬泛的應用場景。
比如在電影《速度與激情7》中,主演保羅·沃克在 2013 年 11 月因車禍逝世,當時電影還沒有拍完,
當時外界猜測可能會有三種彌補方案,一,原劇本拍攝,找替身,使用 CGI 特效,讓沃克把戲「演」完。 二,重新修改劇本,把保羅所飾演的角色寫死,或者讓他消失。三,重新找男一號,重頭拍攝。
在當時,後兩種成本都很高,修改劇本,把保羅所飾演的角色寫死,缺少對死者和影迷的尊重。而如果重新拍攝,損失太慘重。
最終,製片公司找到了保羅的弟弟,讓他飾演保羅的角色,然後用 CGI 動作捕捉技術,加上保羅之前拍過但沒使用的素材,把弟弟的臉變成保羅的臉,觀衆在看電影時基本看不出來。
如果這部電影放在今天,也許可以嘗試文章開頭所用的技術。
其實,關於類似人工智能技術在視頻製作領域的應用,以製作圖形處理器而聞名的英偉達已經在嘗試了,去年12月,它就發佈了一款圖像算法,可以改變視頻中的天氣或時間。
汽車明明行駛在陽光明媚的道路上,而經過 AI 的改變,視頻居然呈現出了夜晚的景象。不僅汽車的尾燈清晰明亮,就連原本沒有路燈的道路兩旁,都出現了真實的燈光效果。
時間再往前推,在2016年,還有一項更牛氣的技術,一位來自德國紐倫堡大學的教授 Justus Thies 帶領團隊,做了一個能實時進行面部轉換的模型,叫Face2Face。
使用者選擇一個目標角色,比如川普,Face2Face會將他和川普的面部特徵重構並追蹤,當他做出一個面部表情時,比如大張嘴,模型會重新渲染川普的臉的形狀和光影,並對背景進行修改。
他們還拿普京做目標,效果看來也不錯。
原文:除了一鍵生成明星色情片,「AI 換臉術」的應用場景還有很多
四、DeepFake 現在怎麼樣了
誰被和諧都能接受,你偏偏跟我說這次是GitHub?不對不對,這也對不上號呀!爲啥這麼說?我們先來看看GitHub是個啥吧:
雷鋒網得知,GitHub是一個面向開源及私有軟件項目的託管平臺,因爲只支持git作爲唯一的版本庫格式進行託管,故名GitHub。而DeepFake則是GitHub的一個開源項目代碼倉庫,按照正常狀態來說,即使在尚未登錄的情況下該庫也是對外開放的。然而,就是這樣一個不黃、不賭也無毒的東東在一篇來自Hacker News的帖子裏被曝出——當在隱身模式下以未登錄的方式訪問DeepFake的GitHub 倉庫時,頁面的顯示結果卻如下圖示:
沒錯,待審覈。正如上面說的,DeepFake是一個開源的項目代碼倉庫,如今卻被提示處在審覈狀態,那不就是被「和諧」了嗎?好端端的DeepFake爲啥會遭到這般「待遇」呢?對此,該貼吧中開發者們展開了激烈的討論,這塊編輯會在文章的後面詳細講到。那麼,能肯定的是這個DeepFake開源項目還真不一般,那它究竟是幹啥的呢?實際上,這裏面的程序代碼的確能夠讓人們實現「換臉」的操作。
五、被黑灰產應用?
這一技術的應用會引發何種問題?
阿里安全圖靈實驗室高級算法專家覺奧表示,除了換臉引發的道德和倫理問題,黑灰產利用 AI 換臉,是目前常見的一種攻擊手段,「在人臉識別系統中,識別換臉的技術叫活體檢測技術,這是一個攻防對抗技術,即用 AI 的手段來解決 AI 的攻擊。」
舉個例子,2017 年 11 月下旬,阿里安全圖靈實驗室就發現,有犯罪團伙通過 3D 軟件控制人臉照片進行攻擊操作,共發起過幾百次攻擊,導致近百名受害人駕照分被盜刷。通過 3D 合成「假臉」認證賬號註冊或登陸後,黑灰產人員可在受害人毫不知情的情況下,用於黑卡虛假註冊、刷單、薅羊毛、詐騙等不法行爲。
基於安全 AI 的方法來很好地解決這一攻擊問題。「通過深度學習技術,訓練模型,來通過兩者的紋理、膚色、反光等特性的不同而識別出來。」覺奧表示,可實現在毫秒級時間內揪出假人臉,目前識別準確率達到 99.9 %。