天天看點

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

完整筆記:http://www.gwylab.com/note-gans.html

———————————————————————

3. 如何解決BIG TRANSFORMATION

       我們前面提到的風格轉換都是比較小幅度的風格轉換,有的時候我們會需要做非常大的風格轉換,譬如把真人照片轉成動漫照片。大風格的轉換我們容易想到的一個思路是auto-encoder:

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

       也就是說,輸入一個真人的照片,通過一個encoder提取出它的人臉特征,再放入到一個decoder中輸出一張動漫人物的照片,這兩張照片的差異是可以非常大的。

       現在我們進一步希望,x domain和y domain的照片能夠互相轉換,于是我們再增添一個auto-encoder:

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

       這意味着,輸入x domain的圖檔就放入x encoder中,輸入y domain的圖檔就放入y encoder中,它們都能提取出對應的人臉特征,然後如果需要輸出x domain的圖檔就把特征放入x decoder中, 如果需要輸出y domain的圖檔就把特征放入y decoder中,這樣就能實作在兩個domain間的互相轉換。

       當然上述我們希望這個模型具有的功能是在x domain和y domain之間互換,也就是圖檔的訓練路徑是

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

->

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

->

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

->

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

->

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

->

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

->

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

       那如果僅僅是按照這樣的路徑訓練的話,

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

完全沒有關系,

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

也完全沒有關系,事實上它就等價于兩個單獨訓練的auto-encoder。為了改善這一模型,我們可以增添兩條訓練路徑,如下圖所示:

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

       在這兩種路徑下,一張圖檔會進入同一個domain的encoder和decoder,我們希望最終輸出的圖檔能和原始圖檔越相似越好。但是僅僅隻有minimize reconstruction是不夠的,我們還希望輸出的圖檔盡可能清晰,于是分别加入一個discriminator。

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

       這樣在這種訓練路徑下,模型産生的圖檔就既和原圖比較相似也有着盡可能高的清晰度。但是現在還需要考慮一個新的問題,就是模型目前隻能保證一張圖檔

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

這條路,或者一張圖檔

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

這條路,能夠産生和原圖高度相似(這兒的相似是要求像素無差)的圖檔,但是模型不能保證,一張圖檔

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

這條路産生的圖檔和原圖

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

是相似的(這兒的相似是要求看着像同一個人,通常輸出會很清楚但明顯不是同一個人)。這是因為,domain x和domain y的差異很大,

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

學到的特征提取方法也會不一樣,譬如

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

用第1,2維提取頭發和眼睛資訊,但是

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

用3,4維提取頭發和眼鏡資訊,這樣

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

在解

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

提取的特征資訊時就會提取出錯誤的特征資訊。那在文獻上為了解決這個問題,出現了各式各樣的解法,下面會一一介紹。

3.1 CoGAN

       CoGAN(又稱CoupledGAN)采用了一個最直接的解決思路,既然錯誤的出現是

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

的差異導緻的,那我何不讓

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

盡可能地相似?具體來說,就是讓

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

的輸出盡可能地相似。那為了讓二者輸出盡可能相似,CoupleGAN便讓

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

的最後幾層的參數是共享的,也就是

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

的最後幾層hidden layer是完全一樣的,這樣它們提取出的臉部特征(下稱face attribution)在結構上就非常相似。同理,既然face attribution差不多了,

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

的前面幾層參數也是共享的。

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

       CoGAN有一種極端的情況,就是

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

的所有參數都共享,隻是額外的增加一個輸入變量0或1,1表示輸入來自x domain,0表示輸入來自y domain。在這種情況下,

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

可以合并為一個encoder。

3.2 Guillaume Lample

       我們的目的,實質上是希望

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

産生的face attribution盡可能一緻,那Guillaume Lample方法就是給face attribution增添一個discriminator,去判斷這個face attribution是來自于x domain還是y domain,那

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

為了騙過這個discriminator,就會産生盡可能一緻的face attribution,這樣discriminator就無法判斷出

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

輸出結果的差異。

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

3.3 ComboGAN

       實際上,從

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

産生的圖檔或者從

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

産生的圖檔無法和原圖相似的本質原因,是特征資訊的丢失。那我們現在把兩條路拼在一起,形成一個

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

->

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

->

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

->

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

->

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

->

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

->

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

’的大回路,如果我們增添一個reconstruction loss,要求

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

’和

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

盡可能地相似,這樣就會逼迫着

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

->

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

->

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

這兩段路盡可能的不丢失原圖的特征資訊,最終就能解決圖檔不相似的問題。這個方法就是利用了Cycle consistency的ComboGAN。

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

3.4 XGAN

       不同于ComboGAN利用的是Cycle consistency,XGAN利用的是Semantic consistency(語義保持),也就是說不同于ComboGAN希望圖像到圖像能保持一緻,XGAN希望的是特征到特征能保持一緻。這樣在計算相似性的時候不再是用pixel-wise的計算,而是latent相似性的計算。

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

  如上圖所示,在

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

->

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

之後會得到一個

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

,然後繼續走半個循環得到

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

,即

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

->

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

->

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

->

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

->

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

,XGAN便是希望

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

【GANs學習筆記】(二十)CoGAN、ComboGAN、XGAN

能夠越接近越好。