CycleGAN解決了模型須要成對數據進行訓練的困難。網絡
前文說到的pix2pix,它和CycleGAN的區別在於,pix2pix模型必需要求 成對數據 (paired data),而CycleGAN利用 非成對數據 也能進行訓練(unpaired data)。函數
CycleGAN的原理能夠概述爲: 將一類圖片轉換成另外一類圖片 。也就是說,如今有兩個樣本空間,X和Y,咱們但願把X空間中的樣本轉換成Y空間中的樣本。(獲取一個數據集的特徵,並轉化成另外一個數據集的特徵)學習
所以,實際的目標就是學習從X到Y的映射。咱們設這個映射爲F。它就對應着GAN中的 生成器 ,F能夠將X中的圖片x轉換爲Y中的圖片F(x)。對於生成的圖片,咱們還須要GAN中的 判別器 來判別它是否爲真實圖片,由此構成對抗生成網絡。設這個判別器爲 。這樣的話,根據這裏的 生成器 和 判別器 ,咱們就能夠構造一個GAN損失,表達式爲:大數據
這個損失實際上和原始的GAN損失是如出一轍的。優化
從理論上講,對抗訓練能夠學習和產生與目標域Y相同分佈的輸出。但單純的使用這一個損失是沒法進行訓練的。緣由在於,在足夠大的樣本容量下,網絡能夠將相同的輸入圖像集合映射到目標域中圖像的任何隨機排列,其中任何學習的映射能夠概括出與目標分佈匹配的輸出分佈(即:映射F徹底能夠將全部x都映射爲Y空間中的同一張圖片,使損失無效化)。spa
所以,單獨的對抗損失Loss不能保證學習函數能夠將單個輸入Xi映射到指望的輸出Yi。3d
對此,做者又提出了所謂的「循環一致性損失」(cycle consistency loss)。blog
咱們再假設一個映射G,它能夠將Y空間中的圖片y轉換爲X中的圖片G(y)。CycleGAN同時學習F和G兩個映射,並要求 以及 也就是說,將X的圖片轉換到Y空間後,應該還能夠轉換回來。這樣就杜絕模型把全部X的圖片都轉換爲Y空間中的同一張圖片了。 圖片
根據 和 循環一致性損失就定義爲:get
同時,咱們爲G也引入一個判別器 由此能夠一樣定義一個GAN的損失 最終的損失就由三部分組成:
實現過程
生成網絡使用了這篇文章中的網絡結構。判別器網絡採用了70*70的PathGANs。
2. 訓練細節
<1> 兩個操做使得模型訓練更加穩定
(1)對於LGAN使用最小二乘損失替換對數loss
(2)在DX,DY中,使用先前生成的圖片而不是最近生成的。使用一個能容納50張圖像的圖像池。
<2> λ的值設置爲10.使用Adam優化求解,batch size爲1.前100個epoch學習率設置爲0.0002,後100個epoch學習率線性遞減直至0.
限制
對顏色、紋理等的轉換效果比較好,對多樣性高的、多變的轉換效果很差(如幾何轉換)。
加上弱或半監督效果會更好。
注:
恆等映射,保護顏色。
實驗