文章地址:http://openaccess.thecvf.com/content_ICCV_2017/papers/Zhu_Unpaired_Image-To-Image_Translation_ICCV_2017_paper.pdfgit
代碼地址:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pixgithub
原理:緩存
CycleGAN這篇文章的亮點是提出了無需使用成對樣本來訓練模型的新思路。像pix2pix這類方法則須要成對的數據來訓練。網絡
因爲在實際應用中,咱們很難獲取到成對的樣本集,這篇文章的思想就是將一類樣本轉換爲另外一類樣本。給定兩個樣本空間X,Y,咱們但願把X空間中的函數
樣本轉換爲Y空間中的樣本,即尋找從源域(X)到目標域(Y)的映射關係G:X->Y,而且要使得數據G(X)的分佈與Y的分佈不可區分。同時反向映射關係也須要知足,學習
即F:Y->X,經過引入一個循環一致性損失來使得F(G(X))≈X。優化
其中,G對應了GAN網絡的生成器部分,用於將X中的圖像轉換爲Y中的圖像,咱們可獲得生成的圖像爲G(X)。此時還須要判別器網絡來對生成的圖像和真實spa
的圖像進行判別。這個判別器用DY表示。對於這部分網絡,存在一個對抗損失。3d
其中生成器G試着生成接近目標分佈Y的圖像G(X),判別器旨在區分轉換樣本和真實樣本,由此構成了一個博弈過程。對於反向映射F:Y->X,一樣存在這樣的blog
GAN損失。
理論上說,對抗訓練能夠學習和產生與目標域Y類似分佈的輸出,但若是僅使用對抗損失來訓練沒法獲得比較好的結果。緣由在於,在足夠大的樣本容量下,
網絡能夠將相同的輸入圖像集合映射到目標域中圖像的任意排列組合。也就是說學習到的能夠只是輸出的一個子分佈,這樣就可能會致使輸入X經過映射函數得
到Y空間中的特定圖像的分佈。
意思就是單獨的對抗損失沒法保證學習函數能夠將單個輸入Xi映射到指望的輸出Yi。由此,做者便提出了「循環一致性損失(Cycle consistency loss)」
即前向循環一致性和反向循環一致性。
簡單來講,思想就是把一個東西通過變換後,經過一個反變換還能回到原來的樣子(忽然想到了傅里葉變換和反傅里葉變換)。
總的目標函數爲:
實現
生成器部分使用的是李飛飛團隊提出的感知損失用來作風格轉換的網絡結構。
判別器採用的70x70的Patch-GANs
運用了兩個技巧來穩定網絡模型的訓練過程
1. 使用最小二乘損失來代替對數損失
2. 更新判別其DX和DY,使用以前生成的圖像而不是最新生成的圖像。保存了50個的緩存數據。
λ的值設置爲10.使用Adam優化求解,batch size爲1.前100個epoch學習率設置爲0.0002,後100個epoch學習率線性遞減直至0.
實驗結果: