前不久,社交媒體平臺上一款名為“螞蟻呀嘿”的特效火爆全網(wǎng),許多網(wǎng)友都將自己的照片導(dǎo)入換臉軟件Avatarify中,照片便可以被算法驅(qū)動,生成一段表情夸張扭曲且跟著節(jié)奏晃動的換臉短視頻。
魔幻的特效讓這類的視頻迅速侵襲社交平臺,網(wǎng)友驚呼:簡直就像捅了螞蟻窩。
例如:馬云、馬化騰、馬斯克等大佬們,正在集體演唱神曲《螞蟻呀嘿》。
例如,李開復(fù)老師便友情上演了一首《Only You》。
這項技術(shù)可以完成在給定一張源圖片和一個目標動作視頻,將目標視頻的表情和動作遷移到源圖片上,使得源圖片中的人物做出目標視頻相同的表情動作。
Faceswap
這種換臉的算法,其實有很多。 例如 Faceswap 、DeepFaceLab、Faceswap-GAN 等等。 本文以 star 量最多的 Faceswap 為例,進行說明。
算法原理
Faceswap 是一個名為 deepfakes 的 Github 用戶開源的項目。 Deepfake 就是“Deep Machine Learning”(深度學習)和“Fake Photo”(假照片)組合而成的。 早期技術(shù)可以追溯到 2018 年,當時在構(gòu)建模型的時候使用了 Encoder-Decoder 自編解碼架構(gòu)。 而 Faceswap 算法,在此之上又引入 GAN(生成對抗網(wǎng)絡(luò))技術(shù),顯著提升了換臉的效果。 總體上,「Faceswap」換臉主要分為以下三個過程:
人臉檢測
特征提取
人臉轉(zhuǎn)換
人臉檢測 想要替換人臉,那首先得找到人臉的位置,這就需要用到人臉檢測算法。
Faceswap 算法采用了 SSD 這類比較成熟的檢測框架,同于提取面部圖像。 與傳統(tǒng)人臉檢測略有不同的,F(xiàn)aceswap 算法需要裁剪的人臉邊界框(bouding box, bbox)是正方形的,同時還會適當?shù)南蛲鈹U充一些,以保證人臉都在 bbox 內(nèi)。 特征提取 檢測到人臉后,需要提取人臉的特征。 首先要做的就是,人臉關(guān)鍵點檢測,也就是 landmark。
這些關(guān)鍵點,抽取了人臉的表情特征,同時大致描述了人臉的器官分布。 我們可以直接通過 dlib 和 OpenCV 等主流的工具包直接提取人臉的關(guān)鍵點。 當然,為了取得更好的定位精度,也可以使用 CNN 訓練一個人臉關(guān)鍵點檢測模型,簡單好用。 人臉轉(zhuǎn)換
人臉轉(zhuǎn)換的思想,就是采用自編碼器的原理。 簡單來講,就是將人臉圖像壓縮到短向量,再由短向量恢復(fù)到人臉圖像。這些短向量包含了人臉的主要信息,例如該向量的元素可能表示人臉膚色、眉毛位置、眼睛大小等等。
所以如果我們用某個編碼器學習所有人,那么它就能學習到人臉的共性;如果再用某個解碼器學習特定的某個人,那么就能學習到這個人的特性。 簡單而言,當我們用通用編碼器編碼人臉 A,再使用特定解碼器 B 解碼短向量,那么就能生成出擁有 A 的人臉表情,但卻是 B 人臉的圖像。 就好比,你擺出一個表情,我根據(jù)你睜眼的大小,嘴巴咧開的大小等面部特征,模仿出你的表情。 我們表情一樣,但長相不一樣。 人臉轉(zhuǎn)換,除了自編碼器的方法,還有一種 GAN 方法。 GAN 會利用提取的人臉特征點,使用生成器直接生成對應(yīng)的目標人臉圖像,這跟 StyleGAN 人臉生成算法很類似,但不同的是需要生成指定表情的人臉。 在生成的圖片后,會接一個判別器,判斷圖片的逼真程度。
上述算法都是針對單張圖片而言的,對于視頻而言,就是多了一個視頻拆分成圖片,圖片拼接成視頻的過程。 DeepFakes 技術(shù)發(fā)展已久,2020 年有一篇發(fā)表的綜述論文,包含了各種 DeepFakes 算法的概述,想了解更多的讀者,可以去“啃”一下論文了。 論文地址: https://arxiv.org/pdf/2001.00179.pdf 預(yù)處理和后處理 大致思路就是這樣,里面還有很多細節(jié),我們稱之為 Tricks ,這就需要通過閱讀源碼去學習了。 比如,在進行提取人臉特征之前,需要進行圖像的預(yù)處理。 對數(shù)據(jù)進行規(guī)范化(Normalization),使訓練的圖像的分布信息盡可能相近:
訓練的數(shù)據(jù)集是分為 A 數(shù)據(jù)集和 B 數(shù)據(jù)集的,如上圖,A 數(shù)據(jù)集為川普,B 數(shù)據(jù)集為凱奇。 我們可以將 A 數(shù)據(jù)集(川普)加上兩者數(shù)據(jù)集的平均差值(RGB三通道差值)來使兩個輸入圖像圖像的分布盡可以相近,這樣我們的損失函數(shù)曲線下降會更快些。 用代碼表示就是:
images_A+=images_B.mean(axis=(0,1,2))-images_A.mean(axis=(0,1,2))再比如,換臉之后,需要進行圖像的后處理。 為了是生成的人臉效果更加,會進行諸如邊緣融合、色彩均衡等處理方法。 想要了解算法背后的實現(xiàn)方法,那就得耐著性子看源碼了。
最后我們再簡單解釋一下?lián)Q臉的基本原理:提取兩個例子,分為A&B,進行以下三步:1.人臉偵測和識別。2.確定變換矩陣。3.人臉替換。對于視頻中的每一幀信息重復(fù)以上操作直至結(jié)束即可!
-
軟件
+關(guān)注
關(guān)注
69文章
4988瀏覽量
87831 -
AI
+關(guān)注
關(guān)注
87文章
31316瀏覽量
269659 -
源碼
+關(guān)注
關(guān)注
8文章
649瀏覽量
29319
原文標題:帶你揭開AI換臉技術(shù)的原理
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論