利用PyTorch實現GAN技術

--

臉書首席AI科學家,也是當今深度學習三巨頭之一的Yann LeCun曾如此評價GAN技術:『GAN是近年來機器學習領域中最有趣的點子!』

GAN的全名為Generative Adversarial Network,中文為 對抗式生成網路(下文簡稱為 GAN)。與大部分的網路模型不同,GAN是由2個網路所構成,分別是 生成網路(generative network)和 鑒別網路 (discriminative network)。

其中,生成網路的角色類似於創作贗品的畫家;而鑒別網路則是負責鑒別贗品的藝術家。這兩個網路會互相對抗,不斷重複『創作』和『鑒別』的工作。在訓練過程中,生成網路會學習如何生成鑒別網路找不到破綻的圖片,鑒別網路則會盡可能地找出圖片中的破綻。簡單來說,兩個網路都是基於另一個網路來進行訓練,從而優化網路中的參數,這也就是『對抗式生成網路』這個名稱的由來。

GAN技術的應用五花八門,你或許曾經見過相關例子。例如:輸入一張自拍照至軟體,軟體輸出一張你老年的樣子;又或是輸入自拍照後,得到屬於你自己的表情貼圖。由此可見,GAN技術是一項非常有趣的技術。以下圖片所示為將GAN應用在 風格轉換 的例子:

圖片來源:https://junyanz.github.io/CycleGAN/

接下來,讓我們實際利用PyTorch來建構GAN模型,並實現上圖中將『馬的圖片』轉換成『斑馬的圖片』這項功能。由於此處的重點在於展示GAN技術的強大之處,因此不會對模型的建構原理進行太多的解釋。若讀者有興趣知道利用PyTorch建構網路模型的細節,可參考旗標出版的 《核心開發者親授!PyTorch深度學習攻略》 一書。

在這個例子中,我們不需要鑒別網路來幫助生成網路調整其參數,因為我們會直接使用torch.load()來載入 訓練過的生成模型參數 。因此在以上程式中,我們只定義了名為ResNetGenerator的生成網路。請記得,載入已訓練過的模型參數讓我們不用在每次運行模型前,都要再重新訓練過一次模型,從而節省大量的時間和資源。

讀者可經由 該網址 來下載訓練過的模型參數,並將其上傳至Colab筆記本中。接著,我們將載入一張馬的圖片,並對它進行預處理(如:調整圖片大小、轉換成PyTorch張量格式等):

最後,我們將預處理過的輸入圖片餵給剛剛建立的netG,並運行模型。不出意外的話,剛剛輸入圖片中的馬將會轉換成斑馬!

GAN技術的潛能無窮,但要搞懂這尖端的技術可不容易。網路上許多似是而非的說法,加上漏洞百出的數學推導,讓初學者不得其門而入。若讀者想知道最可靠的原理教學與實戰指南,歡迎參考旗標出版的 《GAN 對抗式生成網路》 一書。本書的目標是針對想從基礎開始學習GAN的人,讀者只要具備基礎的Python及深度學習等相關知識,就能直接探索這項如魔法般的尖端科技。

由於本文的目標是為了向大家展現GAN的強大之處,因此並未仔細說明利用PyTorch建構模型的細節。PyTorch是目前主流的深度學習函式庫之一,在近年的國際頂尖學術論壇上的論文應用率都已超過Tensorflow。由此可見,掌握PyTorch,是是勢在必行的!

若讀者想進一步了解PyTorch的功能,請參考 《核心開發者親授!PyTorch深度學習攻略》 一書。本書為PyTorch官方唯一推薦教材,並且由PyTorch核心開發者所著,能以更全面的視角來進行教學。此外,本書會利用數個章節來實作肺癌偵測專案。在專案實作的過程中,讀者可以充分應用所學,並借助作者的寶貴經驗來快速培養實戰能力。

本文的程式皆已整理在 Colab筆記本 中,歡迎讀者自己動手跑跑看!

--

--

施威銘研究室
施威銘研究室

Written by 施威銘研究室

致力開發AI領域的圖書、創客、教具,希望培養更多的AI人才。整合各種人才,投入創客產品的開發,推廣「實作學習」,希望實踐學以致用的理想。

No responses yet