《StackGAN: Text to Photo-realistic Image Synthesis with Stacked GAN》閱讀筆記

轉載請註明出處:西土城的搬磚日常

原文鏈接:《StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks》

文章來源:2016年12月10日發表於 arXiv

一、文章簡介:

針對根據文本句子描述生成圖像的任務,借鑒別人提出兩個GAN疊加在一起的結構,改進了輸入條件的部分,使以前只能生成96*96的圖片,而現在可以用於生成256*256的圖片。

其中兩個GAN的作用是:第一個GAN用於根據文本描述生成一張相對粗糙的圖像,包括目標物體的大致形狀和顏色等,然後再通過第二個GAN去修正之前生成的圖並添加細節,比如鳥的嘴和眼睛等。

二、相關工作介紹

1. Generative Adversarial Networks 和 Conditional Adversarial Networks 的詳細介紹在《Conditional Generative Adversarial Nets》閱讀筆記

2. 提出基於cGAN的用於Image-to-Image Translation的通用框架在《Image-to-Image Translation with Conditional Adversarial Networks》閱讀筆記

三、本文主要工作

1. 第一個GAN —— 根據雜訊z和文本描述varphi _{t}生成相對粗糙的低解析度的圖像,但是這個圖像可能只描繪出物體的形狀和顏色以及大致畫出背景。

在以往的GAN中,都是直接把varphi _{t}放入生成器,但是這個特徵一般維度比較高而且是離散的,可能存在很多訓練生成器過程中不需要的信息,這可能就是之前模型效果不是很好的原因,根據這點,作者提出了以下的改進方法:

從獨立的高斯分布N(mu (varphi _{t}),Sigma (varphi _{t}))中隨機採樣得到隱含變數。其中mu (varphi _{t})Sigma (varphi _{t})是關於varphi _{t}的函數。

並且,作者對於訓練過程中在生成器的目標函數加入了下面的正則項

這種方法不僅在條件多樣化的時候能使模型更穩定,另一方面,在給定文本-圖像對時,也能產生更多的訓練樣本。

根據高斯條件變數c_{0}(從N(mu_{0}(varphi _{t}),Sigma _{0}(varphi(t))採樣得到,用於表示文本),訓練D_{0}G_{0},最大化L_{D_{0}}同時最小化L_{G_{0}}

模型結構:

生成器G_{0}varphi _{t}經過一個全連接層得到mu_{0}sigma_{0}(Sigma_{0}的對角元素)。N_{g}維的條件向量c_{0}是由下面的公式計算得到的

其中,odot 代表對應元素相乘。綜上,通過c_{0}和一個N_{z}維向量的雜訊,通過一系列上採樣塊最終生成一個W_{0}times H_{0}的圖像。

判別器D_{0}:首先varphi _{t}經過一個全連接層被壓縮到N _{d}維,然後經過空間複製將其擴成一個M _{d}times M _{d}times N _{d}的張量。同時,圖像會經過一系列的下採樣到M _{d}times M _{d}。然後,圖像過濾映射會連接圖像和文本張量的通道。隨後張量會經過一個1times 1的卷積層去連接跨文本和圖像學到的特徵。最後,會通過只有一個節點的全連接層去產生圖像真假的概率。

2. 第二個GAN —— 前一GAN生成的圖形可能會存在物體形狀的失真扭曲或者忽略了文本描述中的細節部分,所以再利用一個GAN去根據文本信息修正之前得到的圖像,生成更高解析度含有更多細節信息的圖像。

訓練過程中最大化L_{D}最小化L_{G}

其中s_{0}表示由上一個GAN生成的圖像。與傳統GAN不同的是,這裡沒有用到隨機雜訊,而是用s_{0}替代了雜訊,把s_{0}和高斯條件變數c一起送入生成器。這裡的c和上一個GAN中用到的c_{0}使用同樣的方法將文本描述轉化成varphi _{t}。但是它們利用不用的全連接層去獲取兩個階段不同的重點語義信息。在這個過程中,也會嘗試去捕捉被前一個階段所忽略的文本信息。

模型結構:

生成器G:與前一個階段相似,由varphi _{t}生成N_{g} 維的高斯條件變數c然後被擴成一個M _{d}times M _{d}times N _{d}的張量。同時,由前一個GAN生成的圖像會經過下採樣變成M _{g}times M _{g}。後面的過程同上。

判別器D:由於這個部分圖像的尺寸更大,所有這裡只有一系列下採樣塊。

三、實驗:

1. 與其它方法的對比

2. 本文方法兩個GAN生成圖像的對比

通過第5列,可以看出第二個GAN在添加細節信息的同時,也可以起到修正前一個GAN錯誤的作用。第一個GAN把小鳥的頭錯誤地生成了藍色,而通過第二個GAN後,小鳥的頭被修正為了紅色。再看最後一列可以推斷出,有的時候第一個GAN失敗了,但是第二個GAN在這時同樣可以利用第一個GAN生成的模糊背景進行微調,最終生成清晰更真實的圖像。

3. 作者認為這個方法比較好的原因也在於能夠很好地學到文本與圖像之間的潛在聯繫

4. 文本模型的進一步分析

四、簡評:

傳統的方法就是只有一個GAN,於是就有人提出用兩個GAN堆在一起。實際上,思想就是提出把傳統的任務拆成兩部分,分段完成。正常我們畫圖也是會先畫出輪廓再上色,把一個相對困難的任務拆分成兩個簡單的任務。但是任務分開後,如果對所有問題的做法都一樣可能效果也不會很好,因此要針對各個任務去找重點。

推薦閱讀:

關於Kaggle的一些數據分析
自動生成硬體優化內核:陳天奇等人發布深度學習編譯器TVM
機器學習之Logistic回歸(五)
Deep Reinforcement Learning for Dialogue Generation
盤點丨2016年機器學習十大文章整理

TAG:机器学习 | 生成对抗网络GAN |