翻譯:張一豪
校對:吳金笛
本文約2100字,建議閱讀10分鐘。
本文詳細介紹了生成對抗網路(GAN)的知識,並用其變換人臉,並探尋如何利用StyleGAN生成不同屬性(如年齡、微笑等)的人臉。
概述
直到最近,我才開始探索深度學習的全部內容,並在計算機視覺中遇到了這些有趣的想法和專案。
即使我的知識和經驗有限,我也希望這可以幫助其他一些初學者對該領域產生興趣並嘗試一些令人興奮的新事物。
我找到一個非常棒的YouTube頻道,叫做Arxiv Insights(或者簡稱AI,這是個巧合嗎?我看不是)。在這個頻道,我發現其中一個視訊是相當有趣的:如何使用生成對抗網路對人臉變形!本文是對我從上述視訊中學到的知識的總結,我希望到結束時您對這個想法有一個很好的了解,並且可能想自己嘗試一下。
上圖中的人在現實生活中並不存在,他們是計算機生成的。朋友們,那就是GAN的力量。果這引起了您的注意,請繼續閱讀以了解更多資訊。
第一部分:GAN是什麼
GAN有一個非常簡單的任務要做,就是從頭開始生成資料,而這種資料甚至可以欺騙人類。
該模型由Ian Goodfellow及其同事於2014年發明,由兩個神經網路組成(生成器和判別器),它們相互競爭,從而產生了一些真實的內容。
使用兩個網路的目的可以概括為儘可能多地學習輸入資料的基礎結構,並利用該知識來建立相似的內容,該內容擬合了所有引數以適應同一類別。
如上所示,輸入的是人臉,GAN準確地學習到怎樣生成人臉或人。利用這種理解,它會生成隨機的人臉,這些人臉也可能是真實的。
讓我們詳細了解一下:
GAN的基本結構
這張圖是簡化後的GAN模型結構,但它捕獲了該概念的完整本質。
這是在GAN的一次迭代中發生的情況:
1. 生成器
生成器將隨機噪聲向量作為輸入;生成器將執行多次轉置卷積,以對噪聲進行上取樣,最終生成影象。2. 判別器
它從現實世界樣本(真實樣本)或生成的影象樣本(假樣本)中獲取隨機輸入;顧名思義,判別器只幹一件事:判別輸入的“真是樣本”還是“假樣本”。作為使用者,我們知道它是來自真實樣本還是偽造樣本,並利用此知識使用反向傳播(BP)訓練損失,以使判別器更好地完成其工作。
但是眾所周知,生成器也是神經網路,因此我們可以一直傳播到隨機樣本噪聲,從而幫助生成器生成更好的影象。這樣,判別器和生成器都可以使用相同的損失函式。
訣竅在於在訓練過程中平衡這兩個網路。如果做得正確,判別器將學會區分即使是很小的異常,同時發生器將學會產生最真實的輸出。
對GAN工作原理的技術理解:
生成器和判別器處於最小-最大博弈中。
生成器試圖最小化真實影象和偽影象之間的差距,以欺騙判別器;判別器試圖最大化對真實影象的理解,以便區分假樣本。在上面的影象中,D(x)只是影象為“真實樣本”的概率。
這裡有另一個函式G(z)是生成器的輸出,z是隨機隱變數輸入。生成“真實樣本”的概率由判別器D(G(z))計算得。
對於判別器,我們希望:
正確識別實樣本影象,因此D(x)必須接近1;同時,同樣正確識別假影象,因此D(G(Z))必須接近1。對於生成器:
生成器與D(x)的準確度無關,只有D(G(z))必須被標識為真實樣本,因此其必須儘可能接近1。GAN的目標函式
只有當兩個網路之間取得很好的平衡,這種損失函式才是GAN體系結構的基礎,我們才能獲得高效能的生成器和判別器。
對於那些對詳細了解GAN感興趣的人:
這是Ian Goodfellow的原始論文連結。https://papers.nips.cc/paper/5423-generative-adversarial-nets.pdf
這是“GAN-GAN系列(從開始到結束)”—— 由Jonathan Hui撰寫可以深入了解GAN及其應用的最佳資料之一。https://medium.com/@jonathan_hui/gan-gan-series-2d279f906e7b
第二部分:有趣部分
該模型背後的原理:
訓練完生成器後,其隱變數已充分了解了資料集的底層結構。在我們的示例中,我們將使用的模型已經了解了人臉的結構。該模型是由NVIDIA研究人員開發的StyleGAN。https://en.wikipedia.org/wiki/StyleGAN
我們的目標是利用這種結構並操縱它生成有趣的東西。您應該知道,在畫素域中處理影象非常繁瑣且困難,因此,我們將在隱向量中處理影象。
然後,我們的第一個障礙來到了,怎麼做?對於任何給定的影象,我們能否始終找到該影象對應的潛向量?正如下圖所示:
流程:
對於我們的第一個障礙,以下解決方案最有效:
通過生成器生成隨機面孔;使用這些影象作為資料集,訓練ResNet從源影象到其潛在的向量程式碼(初步估計值);我們將使用經過預訓練的ResNet,可以找到查詢影象的潛程式碼(粗略估算);然後,以該影象為起點,計算與“原始影象”的L2損失,並相應地更新隱向量程式碼(同時固定發生器本身的權重)。這是第二部分的視訊——更新估計的隱程式碼
在視訊的後半部分,由於隱程式碼估計收斂到查詢的真實影象的程式碼,因此更新很難觀察到。
第三部分. 時間變形
好吧,也許不是這個。
計劃:
我們需要另一個數據集,然後再次生成隨機面孔資料庫。我們應用預訓練的屬性分類器來獲取諸如“性別”,“年齡”,“微笑”等屬性。這樣做是為了讓我們可以將潛在程式碼對映到影象屬性以找到相應的模式。我們需要了解,StyleGAN的潛在空間是一個高度複雜的512維空間。StyleGAN的隱空間
在這裡,每個點都代表一張圖片,我們需要在該空間中找到一個圖案。例如,在該空間中沿某個方向移動將如何更改生成的影象?
可以觀察到,在隱空間中,這些屬性可以很容易地通過“線性超平面”來分離。沿該平面取法線將為我們提供改變該屬性的方向。最後,我想展示另一個示例,我更改了Emma Watson影象的“ age”屬性。
這是我嘗試過的GitHub儲存庫的連結,視訊是其實際輸出。
https://github.com/rudraina/Face-Morph
再次感謝Arxiv Insight涵蓋了如此有趣的話題。
https://github.com/rudraina/Face-Morph
加油,大家可以自己嘗試一下。
原文標題:
Face-Morphing using Generative Adversarial Network(GAN)
原文連結:
https://medium.com/swlh/face-morphing-using-generative-adversarial-network-gan-c751bba45095
校對:林亦霖
譯者簡介
張一豪,同濟大學研一在讀,研究方向為交通資料探勘與人工智慧。大資料時代,資料與演算法之美很難用隻言片語表達,但資料分析要言之有物,行之有效,重於創新,成於推理。一個交通規劃專業的小白,正在資料探勘與分析的基礎上探索交通規劃的全新領域。
— 完 —