When seeing is no longer believing
Inside the Pentagon’s race against deepfake videosAdvances in artificial intelligence could soon make creating convincing fake audio and video – known as 「deepfakes」 – relatively easy. Making a person appear to say or do something they did not has the potential to take the war of disinformation to a whole new level. Scroll down for more on deepfakes and what the US government is doing to combat them.
什麼是DeepFakes?
DeepFakes實際上是一種人臉交換技術,就是在圖像或視頻中把一張臉替換成另一張臉。該技術在電影製作領域應用已經非常廣泛,但是以前電影視頻中的人臉交換實現起來難度很大也很非常複雜,即使是使用專業的視頻剪輯師和專家需要花費大量時間和精力才能完成視頻中的人臉交換。
深度造假DeepFakes技術的出現可以說是人臉交換技術的一個突破,該技術讓普通人利用一個GPU和一些訓練數據,就能夠製作出以假亂真的換臉視頻。
深度造假技術究竟能幹啥?
簡單來說,需要給需要進行人臉交換的人各自準備一個視頻集,然後運行命令來對視頻進行預處理和訓練,並將其轉換為音頻和可調整大小的選項等,訓練完成後就能實現非常逼真的偽造視頻了。
深度造假技術的基本原理
該技術的核心是一個「自動編碼器」,該「自動編碼器」實際上是一個深度神經網絡,它能夠接收數據輸入並將其壓縮成一個小的編碼,然後從這個編碼中重新生成原始的輸入數據。在這個標準的自動編碼器設置中,網絡將嘗試學習創建一個編碼,從中網絡能夠重新生成輸入的原始圖片。只要有足夠多的圖像數據,網絡就能學會創建這種編碼。深度造假技術DeepFakes讓一個編碼器把一個人臉壓縮成一個代碼和兩個解碼器,一個將其還原成人物A,另一個還原成人物B。
深度造假技術算法訓練的三個步驟如下:
1. 給編碼器輸入了一張A扭曲臉的圖片,並嘗試用解碼器A來重新還原他的臉,這就使得解碼器A必須要學會在複雜的圖片中識別並且還原出A的臉。
2. B扭曲臉的圖片輸入至同一個編碼器,並用解碼器B來還原B的臉。
3. 不斷重複上面的操作,直到兩個解碼器能夠分別還原出兩個人的臉,同時編碼器也能夠學會通過抓取人臉關鍵信息,從而分辨出A和B的臉。
以上訓練步驟都完成以後,就能把一張A的照片輸入至編碼器,然後直接把代碼傳輸至解碼器B,將A的臉換成B的臉。這就是通過訓練模型完成換臉的全過程。解碼器獲取了A的臉部信息,然後把信息交給解碼器B,這時候解碼器B會作出這樣的反應:「這又是一條幹擾信息,這不是B的臉,那麼就把你換成B吧。」
深度造假技術基本框架
Deepfake原理可以概括為:用監督學習訓練一個神經網絡將A的扭曲處理過的臉還原成原始臉,並且期望這個網絡具備將任意人臉還原成A的臉的能力。其數學表達公式如下:
XW是經過扭曲處理過的圖片,必須要有兩個人的人臉數據。之所以要同時用兩個人的數據並不是說算法只能將A與B互換,而是為提高穩定性,因為Encoder網絡是共享的,Deocder網絡是分開的,數學表達式如下:
以下圖對具體過程進行描述:
上圖是對神經網絡訓練、測試過程的細化圖解。深度造假技術生成的假臉為什麼會如此自然逼真?這是因為在訓練期間,目標人物A的臉會被摳出來並且定位好五官位置,然後訓練一個無論如何扭曲A的臉,最後都能生成正常A臉的網絡。一旦網絡訓練好,可以往其中輸入B的臉。這時在神經網絡看來,B的臉其實就是經扭曲的A的臉,所以它會直接「糾正」。而表情和口型等細節,這在訓練過程中就已經學會,學的的數據越多,效果越好就會越好!
深度造假技術細節
Deepfake的整個流程包括三步,第一步提取數據;第二步是訓練網絡;第三步是轉換。其中第一和第三步都需要用到數據預處理,另外第三步還用到了圖片融合技術。在技術上主要分:圖像預處理、網絡模型、圖像融合。
1. 圖像預處理
從大圖(或視頻)中識別,並摳出人臉圖像,最終摳出來的人臉是擺正後的人臉。
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是的卷積加lrelu激活函數,upscale中有個函數叫PixelShuffler,這個函數是將filter的大小變為原來的1/4,讓後讓高h、寬w各變為原來的兩倍,這也就是為什麼前面的卷積層的filtere要乘以4的原因。經歷了四個卷積層、展開層、全連接層,開始 upscale 整個模型。在 upscale 一半的時候,將 encoder 和 decoder 進行了切割,從而保證了共性和個性的分離。
自換臉工具Deepfake出現後,人們開始意識到除了詐騙簡訊、詐騙電話,現在連視頻都能「詐騙」了,看到聽到也不一定是真的了!為了應對這種由新技術帶來的犯罪風險,研究人員一直在努力發掘虛假視頻和真實視頻的區別,以甄別真假視頻。
參考網站:
https://edition.cnn.com/interactive/2019/01/business/pentagons-race-against-deepfakes/
http://baijiahao.baidu.com/s?id=1596785142340985604&wfr=spider&for=pc
https://blog.csdn.net/za8KFnpo2/article/details/79389121