GAN,DCGAN,cGAN,pix2pix,CycleGAN,原理簡單理解

                                                            GAN


GAN,Generative Adversarial Networks,  意爲對抗生成網絡,原始的GAN是一種無監督學習方法,通過使用‘對抗’的思想來學習生成式模型,一旦訓練完成後可以全新的數據樣本。

GAN原理

我們可以把GAN理解爲一個生成數據的工具,實際GAN可以應用到任何類型的數據。

GAN包括連個網絡,生成網絡G(Generrater) 和 判別網絡 D(Discriminator)。

G負責生成圖片,它接收一個隨機的噪聲z,通過該噪聲生成圖片,將生成圖片標記爲G(z)

D負責判別一張圖片是不是‘真實的’。它的輸入是x,x代表一張圖片,輸出D(x)表示x爲真實圖片的概率,如果爲1,代表是真實圖片的概率爲100%,而輸出爲0,則代表圖片不可能是真實的圖片。

GAN基本思想:‘博弈’

生成網絡G的目標是儘可能生成真實的圖片去欺騙判別網絡D。而D的目標是儘量把G生成的圖片和真實的圖片區分開來。這就構成了‘博弈’的思想。

當我們訓練過後,在最理想的狀態下,生成網絡G可以生成非常逼真的圖片,以假亂真的程度。而判別網絡很難判別G生成的圖片是不是真實的。即D(G(z))=0.5。此時我們就得到了一個生成式的模型G,它可以用來生成圖片。

用數學化的語言來描述‘博弈’的過程

真實的圖片有着自己的數據分佈。我們網絡G學習的過程,可以理解爲學習真實圖片的數據的分佈的過程。

我們輸入一個隨機的噪聲z,通過網絡G,生成一個圖片G(z)。當這個圖片的數據分佈越接近真實的圖片的分佈的時候,

這個生成的圖片G(z)就越像真實的圖片。

損失函數

我們可以看到圖片中的損失函數V(D,G)有兩個部分,第一部分爲判別網絡D的部分,我們可以理解爲從訓練數據中我們取出一張真實的圖片x,把x 輸入到網絡種。D(x)越大就代表D的判別能力越好。由此看出我們判別網絡D期望我們的損失函數V(D,G)的值變大。

第二部分爲生成網絡的部分,我們在生成網絡中輸入一個隨機的噪聲z,網絡生成一張圖片G(z),D(G(z))爲判別網絡對生成圖片的判別結果,當D(G(z))的值越大的時候,就表示我們G生成的圖片越逼真,此時 ln(1-D(G(z)))越小,損失函數V(D,G)越小。這是我們生成網絡期望的。

使用梯度下降法優化損失函數

 

1在優化的過程中我們可以,每對D更新一次參數,便接着再更新一次G。

有時也可以多次優化D的參數,再優化一次G的參數。 哪種方式要根據實際情況考慮。

2我們判別網絡D期望損失函數更大所以在更新參數的時候是加上梯度的方式,生成網絡G則與之相反。

3當我們訓練完成後,生成網絡G是一個生成式網絡,可以輸入噪聲z來生成圖片。


                                                    DCGAN


DCGAN意爲深度卷積對抗網絡。在GAN基礎上增加深度卷積網絡結構,專門生成圖像樣本。在GAN中並沒有對D,C的具體結構做出任何限制,在DCGAN中對D和G採用了較爲 特殊的結構,以便對圖片進行有效的建模。

判別網絡D和生成網絡的結構都是卷積神經網絡。

判別網絡D,輸入的是一張圖片,輸出的是這張圖片是真實圖片的概率。

生成網絡G ,輸入的是一個100維的噪聲向量,輸出的是一張圖片。

DCGAN在有一些優化的細節

1不採用任何池化層,在D中用帶有步長的卷積來代替池化層,避免了池化帶來的數據上信息的丟失。

2使用Batch Normalization 加速收斂。

3生成網絡G除了最後一層,每一層都使用了Relu激活函數。最後一層使用的激活函數是tanh函數。由於網絡G最後一層輸出的是圖片。

圖片的像素值是0~255,如果使用Relu激活函數,輸出的數值會較大。而tanh函數的範圍是(-1,1) 數值較小。

而且經過簡單的變換就可以得到像素值。即加一後乘127.5。

4網絡D都是用Leaky Relu作爲激活函數。

可以看下面這個博客瞭解Leaky Relu

https://blog.csdn.net/qq_23304241/article/details/80300149

DCGAN的一些應用

1生成圖片

LSUN是關於臥室場景的圖片,DCGAN訓練完成後就可以生成圖片了。

2利用DCGAN做圖像表示的‘插值’ 

也可以利用DAGAN做圖像表示的運算


                                                    cGAN


GAN的限制,GAN可以生成新的樣本丹斯我們無法控制樣本的類型,比如生成數字但是不能指定生成的是什麼數字。這是由於我們輸入的只有一個隨機的噪聲z。

cGAN就可以做到這點:可以指定生成新樣本的類型。

cGAN即條件對抗生成網絡,它爲生成器,判別器,都額外加入了一個條件y,即我們希望生成的標籤。

生成器G,輸入一個噪聲z,一個條件y,輸出符合這個條件的圖像G(z|y)

判別器D,輸入一張圖像x,一個條件y,輸出該圖像在該條件下的真實概率D(x|y)

cGAN網絡結構

cGAN損失函數


                                                  pix2pix


圖像翻譯

我們都知道機器翻譯是把一段中文翻譯成英文。在圖像領域也有類似的圖像翻譯。比如把街景,建築,文星圖像的標示圖轉換成真實的圖片。或者白天黑天的轉換。輪廓轉換爲實物等。

pix2pix模型結構

 

1我們向生成器G輸入一個鞋子輪廓圖x,生成了一個鞋子圖片G(x)。我們將生成的圖片G(x)和輸入的輪廓圖x即標籤。輸入到判別器D中.判別器輸出是真的鞋子圖片的概率。

2我們輸入一張真實的鞋子的圖片y 和一個標籤x D判別是不是真的鞋子圖片。

3在這個機構中我們的網絡G不會考慮噪聲的存在,即使輸入噪聲也會被忽略,所以這裏沒有輸入噪聲。

4損失函數的改變

在實驗中發現我們除了使用cGAN的損失函數,我們還可以生成圖像與真實圖像之間的損失,假設(x,y)是一個真實的圖片對。這裏假設x是真實的圖片,而y是輪廓圖。那麼生成圖片與真實圖片之間的L1損失爲

L1=||x-G(y)||

5PatchGAN

PatchGAN的思想是在判別一個圖片是否是真實的圖片時,不直接輸入整張圖片,而是把圖片劃分爲N*N個小格子輸入到判別網絡中,我們平均這幾次的輸出結果作爲判別的結果。

這樣可以加快計算以及加快收斂。

6pix2pix的本質還是cGAN只是在圖片翻譯問題上面對D和G做了一些細節上面的調整。


                                             CycleGAN


 在cGAN中我們可以通過把輸入的條件的值設置爲數字1來生成一個數字1的圖片。

在pix2pix中我們輸入鞋子的輪廓圖 生成鞋子的圖片,或者輸入 一個房子的標註圖 生成一個房子的圖片。

但是再cGAN和pix2pix 的樣本都是要求 嚴格成對的 比如 一個真實的鞋子圖片 和 一個 鞋子的輪廓圖。

pix2pix要求訓練數據必須在X空間和Y空間嚴格成對。

然而現實中這樣成對的樣本往往是比較困難獲得的。

CycleGAN不必使用成對的樣本也可以進行圖像翻譯。

圖像翻譯可以理解爲學習一個映射,這個映射可以將源空間X中的圖片轉換成目標空間Y空間中的圖片。

CycleGAN原理

算法的目標是學習從空間X到空間Y的映射,設這個映射爲F。它對應着GAN中的生成器。F可以將X空間的圖片x 轉化爲Y空間中的圖片F(x)。此外還需要使用GAN開判別生成圖是否是真實圖片。

到此一步,根據生成器和判別器構成是損失是與GAN損失是基本相同的。

添加循環損失一致性 

但是隻使用上面這個損失是無法訓練的。原因在於沒有成對的數據,映射F可以將所有x都映射爲Y空間的同一張圖片,是損失無效化。

對此,提出循環損失一致性。

我們假設一個映射G,可以把Y空間的圖片y轉換爲X中的圖片G(y)。Cycle同時學習F和G兩個映射,並且要求

F(G(y))≈ y ,以及 G(F(x))≈ x。

這表示我們有空間X轉換到空間Y的圖片,還可以轉換回來。

由此定義循環一致性損失爲:

同時我們也使用GAN損失來判別生成的圖片是否爲真實。

則損失函數變爲:

 


 來源與《21個項目玩轉深度學習》中GAN相關的知識,是知識的摘要和自己的理解,希望多多交流。

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