百變人臉,趣味容顏,ALAE 人臉玩出新高度!

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

點贊再看,支持一下!微信公衆號搜索【JackCui-AI】關注一個在互聯網摸爬滾打的潛行者

一、人臉

人臉乃人之門面,在這看「顏」的時代,「顏」即正義。

出門前,都會特意看看自己的臉打扮得是否滿意,而沒有人會特意看看自己的腳趾窩是否乾淨。

生活中,人臉是人們關注的重點。技術上,人臉同樣也是研究者關心的話題。

因爲人臉,包含了太多有價值的信息。

顏值高低,相貌美醜,喜怒哀樂,愛恨情仇,盡在其中。

人臉識別、人臉檢測、情緒分析、人臉搜索、人臉比對、顏值評分,這琳琅滿目的人臉技術,逐漸走進人們的生活。

百變的人臉,也是百變的人生。

儀表堂堂也好,樣貌平平也罷,每個人臉的背後,都有一段段歲月,一段段風光,還有那獨一無二的人生。

但,你有沒有想過,你看到的一張人臉,可能從未存在於這個世界。

「This person does not exist.」

二、ALAE

高清「人臉生成」算法,你知道多少?

曾經風靡一時的 StyleGAN,給人們帶來很多震撼,逼真的肖像,你根本分不清,哪張圖片是算法生成的。

看一下 StyleGAN v2 人臉生成的效果:

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

 

這些人臉,都是算法隨機生成的。

有人還特意用 StyleGAN v2 做了一個酷炫的網站,隨機生成百變的人臉。

你每刷新一次網頁,它都會給你一張隨機生成的人臉肖像。

URL:https://thispersondoesnotexist.com/

StyleGAN 很酷炫,但它並不是今天的主角。

最近,剛剛開源,並被 CVPR 2020 頂級會議收錄的 ALAE 纔是。

ALAE 是一種新型自編碼器,全名叫「Adversarial Latent Autoencoder」。

它與 StyleGAN 一樣,都是一種無監督方法。不同的是,ALAE 採用的是自編碼器(AE),StyleGAN 採用的是生成對抗網絡(GAN)。

ALAE 不僅可以隨機生成肖像,它甚至可以編輯生成肖像的人臉屬性。

你可以改變圖像中人臉的性別、年齡、笑容、髮質,也可以改變他們的性感程度、豐滿程度、嘴脣和鼻子的大小等等。

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

 

沒錯,這是 ALAE 生成的人臉,我們可以調整肖像的性別,看下她的“親兄弟”可能張什麼樣?

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

你甚至可以“控制”她的喜怒,秒變嚴肅臉或大笑臉。

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

更妙的是,秒變年齡,看看這美貌容顏。

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

 

當然,這屬性也不能調節的太“過”,容易出“事故”。

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

 

我“裂開”了!

想玩 ALAE 嗎?

算法原理、環境搭建、算法測試,一條龍服務,盡在下文!

三、算法原理

想要了解 ALAE,那必須先知道什麼是自編碼器

自編碼器是一種能夠通過無監督學習,學到輸入數據高效表示的人工神經網絡。

輸入數據的這一高效表示稱爲「編碼」,其維度一般遠小於輸入數據,使得自編碼器可用於降維。

更重要的是,自編碼器可作爲強大的「特徵檢測器」,應用於深度神經網絡的預訓練。

此外,自編碼器還可以隨機生成與訓練數據類似的數據,這被稱作「生成模型」。

編碼(就是輸入數據的高效表示)是自編碼器在一些限制條件下學習恆等函數的副產品。

舉個高效的數據表示的例子:

下面有兩組數字,哪組更容易記憶呢?

  • 40, 27, 25, 36, 81, 57, 10, 73, 19, 68
  • 50, 25, 76, 38, 19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20

乍一看可能覺得第一行數字更容易記憶,畢竟更短

但仔細觀察就會發現,第二組數字是有規律的:偶數後面是其二分之一,奇數後面是其三倍加一(這就是著名的hailstone sequence)。

如果識別出了這一模式,第二組數據只需要記住這兩個規則、第一個數字、以及序列長度。如果你的記憶能力超強,可以記住很長的隨機數字序列,那你可能就不會去關心一組數字是否存在規律了。

所以我們要對自編碼器增加約束來強制它去探索數據中的模式

記憶、感知、和模式匹配的關係在 1970s 早期就被 William Chase 和 Herbert Simon 研究過。

他們發現國際象棋大師觀察棋盤5秒,就能記住所有棋子的位置,而常人是無法辦到的。

但棋子的擺放必須是實戰中的棋局(也就是棋子存在規則,就像第二組數字),棋子隨機擺放可不行(就像第一組數字)。

象棋大師並不是記憶力優於我們,而是經驗豐富,很擅於識別象棋模式,從而高效地記憶棋局。

和棋手的記憶模式類似,一個自編碼器接收輸入,將其轉換成高效的內部表示,然後再輸出輸入數據的類似物。

自編碼器通常包括兩部分:encoder(也稱爲識別網絡)將輸入轉換成內部表示,decoder(也稱爲生成網絡)將內部表示轉換成輸出。

如下圖所示,左側爲象棋大師的記憶模式,右側爲一個簡單的自編碼器。

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

ALAE 就是基於這種原理的新型自編碼器。

ALAE 將生成器 G 和判別器 D 分別分解成兩個網絡:F、G 和 E、D。

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

同時,參考 StyleGAN,設計了 StyleALAE,也就是我們用於生成人物頭像的那塊網絡結構。

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

要想更詳細的瞭解 ALAE 的原理,那就得“啃”論文了。

論文地址:https://arxiv.org/pdf/2004.04467.pdf

這裏就不堆公式了,容易看困。

四、環境搭建

ALAE 完全開源,可以放心“食用”。

項目地址:https://github.com/podgorskiy/ALAE

可以直接下載 ALAE 項目的 ZIP 包。

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

或者使用 git clone 下載。

git clone https://github.com/podgorskiy/ALAE

源碼下載完成後,開始配置開發環境。

環境搭建,強烈建議使用 Anaconda,無論你是做爬蟲也好,還是做深度學習算法也罷,選它準沒錯!

Anaconda 是一個針對 Python 的開源的包、環境管理器,用了它,安裝各種第三方庫,一切都變得很簡單,再也不必爲 pip 安裝缺少依賴而頭疼。

人生苦短,我用 conda 。

Anaconda 的使用,這裏就不多介紹了,畢竟本文不是針對 conda 使用的教程,不懂的讀者,可以搜搜 Anaconda 的安裝和使用教程。

迴歸正題。

ALAE 對機器有一定的要求。

首先,你的機器必須有 GPU,並配置好 GUDA 和 cuDNN。

安裝 CUDA 需要去官網,找到 NVIDIA 官網,找匹配機器顯卡的 CUDA 安裝。

CUDA 下載地址:https://developer.nvidia.com/cuda-downloads

比如,我的系統是 Windows,顯卡是 RTX 2060 super。那麼,我就可以下載並安裝 CUDA10。

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

安裝好 CUDA 後,可以在 Anaconda 環境中,直接安裝 cuDNN。

conda install cudnn

很簡單是吧?

需要注意的是,ALAE 運行需要圖形界面,所以如果是 Linux 系統,需要是 Ubuntu 這類有操作界面的。

一個標準的開源項目,都有會 requirements.txt,這裏有你需要安裝的依賴說明。

ALAE 的依賴:

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

可以看到,這個項目是使用 pytorch 1.3.0 以上的版本,還用了很多 numpy、sklearn 這些常規庫。

這些都很好安裝,只需要使用 conda install 安裝即可,也可以用 pip install 安裝。

這裏面有一個“坑”,就是安裝 bimpy,bimpy 是 ALAE 運行的圖形界面,需要一些系統環境的依賴。

bimpy 項目地址:https://github.com/podgorskiy/bimpy

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

Windows 需要安裝 MSVC 14.0,我已放到我的百度雲(提取碼:vjw9 ):

鏈接:https://pan.baidu.com/s/1BbM5jeTc2b7OxYzsxQK3mw

安裝好 MSVC 14.0 後,就可以順利安裝 bimpy。

Linux 直接使用 apt-get 安裝即可:

sudo apt-get install mesa-common-dev libxi-dev libxinerama-dev libxrandr-dev libxcursor-dev

環境配置完成,就可以開始測試了!

五、算法測試

算法學習,從做好「調包俠」開始。

環境搭建、算法跑通,是「調包俠」的基本素養。

深度學習算法,怎麼能少得了 「pre-trained model」。

想要跑效果,還得下載開源的預訓練模型。

如果配置了 VPN,採用全局模式,可以直接從 Google Drive 或 備用源下載預訓練模型。

在項目工程目錄裏,直接運行如下命令:

python training_artifacts/download_all.py

可以看下這個下載代碼:

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

可以看到,一共需要下載 7 個 model。如果不能從 Google Drive 下載,會通過 亞馬遜 AWS 服務器下載。

但遺憾的是,國內從 AWS 下載可能僅 10 KB。

我把這些 model 上傳到了我的百度雲(提取碼:in5l):

鏈接:https://pan.baidu.com/s/19GFKLTWu00jB3Qp4lsyAYw

有百度雲會員的讀者,可以下載。

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

一共有 4 種預訓練模型,bedroom、celeba、celeba-hq256、ffhq,這是針對 4 種數據集的模型。

預訓練模型下載好,放到 training_artifacts 下對應的文件夾內即可。

至此,預訓練模型準備完畢。

在工程目錄,使用如下命令,即可運行項目:

python interactive_demo.py -c ffhq

-c 後接的參數就是選擇哪個模型,一共有 bedroom、celeba、celeba-hq256、ffhq 四種可選。

運行之後,你可能看到這樣的結果:

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

結果就是一小條,這是 bimpy 窗口大小的設置問題。

運行一次 interactive_demo.py 之後,工程目錄下會生成一個 imgui.ini 文件。

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

修改 Size 大小到 1500,1024 即可。

運行界面說明:

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

 

選擇的圖片是輸入圖片,可以理解爲「初始化模板」,ALAE 算法會根據「初始化模板」的特徵,隨機生成一個人物圖片。

現有的模板庫裏,都是外國人,咱們可以自己選一些中國名人的頭像,裁剪成 1024 * 1024 的圖片。

比如我將劉亦菲的頭像,放到了 dataset_samples/faces/realign1024x1024 目錄下。

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

這樣算法就可以用劉亦菲的頭像作爲「初始化模板」,隨機生成一個人物圖片。

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

點擊「Display Recontruction」生成人物頭像。

沒看出來哪裏像,竟然還有點怪怪的。

而巨石強森,就很神似!有木有!

百變人臉,趣味容顏,ALAE 人臉玩出新高度!

 

六、最後

  • 本文算是這個系列的第一篇文章,後續會持續更新更多的,好玩的 AI 項目。
  • 算法原理、環境搭建、算法測試,一條龍服務,快來關注吧!
  • ALAE 算法如果再結合「換臉技術」,想想都刺激!

點贊再看,支持一下!微信公衆號搜索【JackCui-AI】關注一個在互聯網摸爬滾打的潛行者

weinxin

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章