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