點贊再看,支持一下!微信公衆號搜索【JackCui-AI】關注一個在互聯網摸爬滾打的潛行者
一、人臉
人臉乃人之門面,在這看「顏」的時代,「顏」即正義。
出門前,都會特意看看自己的臉打扮得是否滿意,而沒有人會特意看看自己的腳趾窩是否乾淨。
生活中,人臉是人們關注的重點。技術上,人臉同樣也是研究者關心的話題。
因爲人臉,包含了太多有價值的信息。
顏值高低,相貌美醜,喜怒哀樂,愛恨情仇,盡在其中。
人臉識別、人臉檢測、情緒分析、人臉搜索、人臉比對、顏值評分,這琳琅滿目的人臉技術,逐漸走進人們的生活。
百變的人臉,也是百變的人生。
儀表堂堂也好,樣貌平平也罷,每個人臉的背後,都有一段段歲月,一段段風光,還有那獨一無二的人生。
但,你有沒有想過,你看到的一張人臉,可能從未存在於這個世界。
「This person does not exist.」
二、ALAE
高清「人臉生成」算法,你知道多少?
曾經風靡一時的 StyleGAN,給人們帶來很多震撼,逼真的肖像,你根本分不清,哪張圖片是算法生成的。
看一下 StyleGAN v2 人臉生成的效果:
這些人臉,都是算法隨機生成的。
有人還特意用 StyleGAN v2 做了一個酷炫的網站,隨機生成百變的人臉。
你每刷新一次網頁,它都會給你一張隨機生成的人臉肖像。
URL:https://thispersondoesnotexist.com/
StyleGAN 很酷炫,但它並不是今天的主角。
最近,剛剛開源,並被 CVPR 2020 頂級會議收錄的 ALAE 纔是。
ALAE 是一種新型自編碼器,全名叫「Adversarial Latent Autoencoder」。
它與 StyleGAN 一樣,都是一種無監督方法。不同的是,ALAE 採用的是自編碼器(AE),StyleGAN 採用的是生成對抗網絡(GAN)。
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 將生成器 G 和判別器 D 分別分解成兩個網絡:F、G 和 E、D。
同時,參考 StyleGAN,設計了 StyleALAE,也就是我們用於生成人物頭像的那塊網絡結構。
要想更詳細的瞭解 ALAE 的原理,那就得“啃”論文了。
論文地址:https://arxiv.org/pdf/2004.04467.pdf
這裏就不堆公式了,容易看困。
四、環境搭建
ALAE 完全開源,可以放心“食用”。
項目地址:https://github.com/podgorskiy/ALAE
可以直接下載 ALAE 項目的 ZIP 包。
或者使用 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。
安裝好 CUDA 後,可以在 Anaconda 環境中,直接安裝 cuDNN。
conda install cudnn
很簡單是吧?
需要注意的是,ALAE 運行需要圖形界面,所以如果是 Linux 系統,需要是 Ubuntu 這類有操作界面的。
一個標準的開源項目,都有會 requirements.txt,這裏有你需要安裝的依賴說明。
ALAE 的依賴:
可以看到,這個項目是使用 pytorch 1.3.0 以上的版本,還用了很多 numpy、sklearn 這些常規庫。
這些都很好安裝,只需要使用 conda install 安裝即可,也可以用 pip install 安裝。
這裏面有一個“坑”,就是安裝 bimpy,bimpy 是 ALAE 運行的圖形界面,需要一些系統環境的依賴。
bimpy 項目地址:https://github.com/podgorskiy/bimpy
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
可以看下這個下載代碼:
可以看到,一共需要下載 7 個 model。如果不能從 Google Drive 下載,會通過 亞馬遜 AWS 服務器下載。
但遺憾的是,國內從 AWS 下載可能僅 10 KB。
我把這些 model 上傳到了我的百度雲(提取碼:in5l):
鏈接:https://pan.baidu.com/s/19GFKLTWu00jB3Qp4lsyAYw
有百度雲會員的讀者,可以下載。
一共有 4 種預訓練模型,bedroom、celeba、celeba-hq256、ffhq,這是針對 4 種數據集的模型。
預訓練模型下載好,放到 training_artifacts 下對應的文件夾內即可。
至此,預訓練模型準備完畢。
在工程目錄,使用如下命令,即可運行項目:
python interactive_demo.py -c ffhq
-c 後接的參數就是選擇哪個模型,一共有 bedroom、celeba、celeba-hq256、ffhq 四種可選。
運行之後,你可能看到這樣的結果:
結果就是一小條,這是 bimpy 窗口大小的設置問題。
運行一次 interactive_demo.py 之後,工程目錄下會生成一個 imgui.ini 文件。
修改 Size 大小到 1500,1024 即可。
運行界面說明:
選擇的圖片是輸入圖片,可以理解爲「初始化模板」,ALAE 算法會根據「初始化模板」的特徵,隨機生成一個人物圖片。
現有的模板庫裏,都是外國人,咱們可以自己選一些中國名人的頭像,裁剪成 1024 * 1024 的圖片。
比如我將劉亦菲的頭像,放到了 dataset_samples/faces/realign1024x1024 目錄下。
這樣算法就可以用劉亦菲的頭像作爲「初始化模板」,隨機生成一個人物圖片。
點擊「Display Recontruction」生成人物頭像。
沒看出來哪裏像,竟然還有點怪怪的。
而巨石強森,就很神似!有木有!
六、最後
- 本文算是這個系列的第一篇文章,後續會持續更新更多的,好玩的 AI 項目。
- 算法原理、環境搭建、算法測試,一條龍服務,快來關注吧!
- ALAE 算法如果再結合「換臉技術」,想想都刺激!
點贊再看,支持一下!微信公衆號搜索【JackCui-AI】關注一個在互聯網摸爬滾打的潛行者