論文鏈接:https://arxiv.org/abs/1703.10593
1. 介紹
圖像翻譯是指將圖片內容從一個域轉換到另一個域。這類任務一般都需要兩個域中具有相同內容的成對圖片作為訓練數據。比如在pix2pix中,要將白天的圖片轉換成夜晚的圖片(圖 1),那么就需要將同一個地方的白天和夜晚的圖片作為一對訓練數據對模型進行訓練。但是這種成對的訓練數據很難獲得。

圖1 一般的圖像翻譯問題都需要輸入成對的圖片數據進行訓練
CycleGAN的創(chuàng)新點就在于其能夠在沒有成對訓練數據的情況下,將圖片內容從源域遷移到目標域。CycleGAN在訓練時,只需要將源域的圖片和目標域的圖片作為輸入即可,這里并不要求源域跟目標域的圖像內容是匹配的。

圖2 成對訓練數據與不成對的訓練數據對比
2. 方法

CycleGAN原理
CycleGAN的核心理念是,如果有一個圖像風格轉換器 G 可以將 X 域的圖片轉換為 Y 域的風格,而 F 可以將 Y 域的圖片轉換為 X 域的風格,那么 G 和 F 應該是互逆的。也就是說, X 域的圖片經過 G 轉換為 \hat{Y} 之后,\hat{Y}應該可以通過 F 轉換為 X 。同樣地, Y 域的圖片經過 F 轉換為 \hat{X} 之后,\hat{X}應該可以通過 G 轉換為 Y 。即:F(G(x))=x ; G(F(y))=y 。為了實現這一個Cycle Consistency,論文使用了一個Cycle Consistency Loss :
L_{cyc}(G,F) = E_{x\sim p_{data}(x)}[\left \| F(G(x)) - x \right \|_{1}] + E_{y\sim p_{data}(y)}[\left \| G(F(y)) - y \right \|_{1}]
CycleGAN的模型同時訓練兩個原始GAN:生成器G、F 和判別器 D_Y、D_X 。G 用于將 X 域的圖片轉換成 Y 域風格的圖片,D_Y則分辨 \hat{Y} 的真假, F 將 Y 域的圖片轉換成 X 域的風格,D_X則判別 \hat{X} 的真假。這里用了兩個原始GAN的loss:
L_{GAN}(G,D_{Y},X,Y) = E_{y\sim p_{data}(y)}[log D_Y (y)] + E_{x\sim p_{data}(x)}[log (1-D_Y (G(x))]
L_{GAN}(F,D_{X},Y,X) = E_{x\sim p_{data}(x)}[log D_X (x)] + E_{y\sim p_{data}(y)}[log (1-D_X (F(y))]
所以CylceGAN總的目標函數是如下,\lambda 作為超參數控制Cycle Consistency 的重要性。

full objective of CycleGAN

使用Cycle Consistence Loss 之后,將 x 通過 G(x) 轉換之后,再通過 F(G(x)) 重建的效果如下:

3. 效果
論文先將CycleGAN 跟當時的一些圖像風格轉換的方法在具有成對圖像的數據集上進行比較。在這里,用完全監(jiān)督的方法pix2pix作為上界??梢钥吹?,CycleGAN 生成的圖片對于除pix2pix以外的方法來說效果好很多。而相對于pix2pix,CycleGAN 生成的圖片雖然不夠清晰,但基本接近。

接著,論文又研究了CycleGAN 的目標函數中每一部分所起的作用,效果如下(總的來說,每一部分都很重要)

4.總結
CycleGAN 解決了pix2pix 必須使用成對數據進行訓練的問題,原理比較簡單,但非常有效。只需要不同域的一系列圖片即可進行訓練。類似的工作還有DualGAN,DiscoGAN。三者的想法和模型基本一樣,發(fā)在了不同的地方。。