引自:https://zhuanlan.zhihu.com/p/26332365
任務
這里的任務是圖像到圖像的翻譯。如果大家看過去年一篇cvpr的論文,叫pix2pix的話,對這個任務就比較熟悉。就算你們不知道pix2pix,之前有一個很火的,可以把線條畫變成貓的網頁應用,就是用的pix2pix的算法。然而pix2pix的模型是在成對的數據上訓練的,也就是說,對於線條到貓的應用,我們訓練的時候就需要提供一對一對的數據:一個線條畫,和對應的真實的貓圖片。
然而在很多情況下,我們並沒有這樣完美的成對的訓練數據。比如說如果你想把馬變成斑馬,並沒有這樣對應的一個馬對應一個斑馬。然而,馬的圖片和斑馬的圖片卻很多。所以這篇論文就是希望,能夠通過不成對的訓練數據,來學到變換。
但是去年有一篇論文叫dual learning,做的是機器翻譯。如果你考慮在語言之間的翻譯的話,這個任務可能比圖片翻譯到圖片更有意義。在機器翻譯中,成對的翻譯數據非常有限,但是單一語言的預料非常的多。這篇paper就是討論如何用獨自的語料來幫助翻譯。事實上,dualgan這篇paper的出發點就來源於此,並且這三篇文章的中心創新點(cycle consistentcy)就是dual learning中的想法。(雖然cyclegan似乎不知道這篇論文,並沒有引用dual learning)
CycleGAN的出發點更抽象。他們introduction第一段就開始討論莫奈;他們的意思是,給一副莫奈的畫,人能夠想象出莫奈畫的景色原來應該是什么樣子,所以一個牛逼的AI應該也能做這件事。
模型(三篇文章一毛一樣):
一個普通的GAN只有一個生成器和一個判別起。而在這篇文章里,分別有兩個生成器和判別器。一個生成器將X域的圖片轉換成Y域的圖片(用G表示),而另一個生成器做相反的事情,用F表示。而兩個判別器和
試圖分辨兩個域中真假圖片。(這里假圖片指的是從真照片transform來的)
Cycle consistency (這個名字是來自cyclegan,另外兩篇都有不同的叫法,但是本質上是一個東西) 是為了使得這個transform能成功。講道理,如果你能從X轉換到Y,然后再從Y轉換到X,最后的結果應該和輸入相似。這里他們用最后輸出和輸入的L1距離來作為另外的懲罰項。
數學形式就是和
需要足夠小。
這個懲罰項防止了mode collapse的問題。如果沒有這個cycle consistency項,網絡會輸出更真實的圖片,但是無論什么輸入,都會是一樣的輸出。而如果加了cycle consistency,一樣的輸出會導致cycle consistency的直接失敗。所以這規定了在經過了變換之后的圖片不僅需要真實,且包含原本圖片的信息。
下圖為圖示。
網絡細節:
CycleGAN:
這里的generator跟 Perceptual losses for real-time style transfer and super-resolution是一樣的。他們使用了Instance Normalization。判別器使用的和pix2pix一樣(PatchGAN on 70x70 patches). 為了穩定GAN的訓練,他們使用了最小二乘gan(least square gan)和 Replay buffer。不像pix2pix,他們的模型沒有任何的隨機性。(沒有隨機輸入z,沒有dropout)這里的生成器更像是一個deteministic的style transfer模型,而不是一個條件GAN。他們使用了L1距離作為cycle consistency.
DualGAN:
他們的生成器和判別器都和pix2pix一樣 (沒有隨機輸入z,但是有dropout的隨機)。 他們用了wgan來訓練。cycle consistency同樣選用了l1。
DiscoGAN:
他們用了conv,deconv和leaky relu組成了生成器,然后一個conv+leaky relu作為判別器。他們用l2作為cycle consistency。
實驗
CycleGAN:
一個主要的實驗是,在cityscapes數據集中,從圖片和其語義分割的雙向翻譯。他們的用的評估方法和pix2pix中完全相同。CycleGAN和CoGAN, BiGAN, pix2pix(算作上界)進行了比較。其中,CoGAN這個模型在設計之初也是為了同樣的任務:idea是通過兩個共享weight的生成器來從相同的z生成兩個域的圖片,這個兩個圖片都需要通過各自域的判別器的檢測。 BiGAN原本是為了能夠找到G的逆函數E的(輸入圖片輸出z)。這里如果你把z當作一個image,那bigan就可以用來做這個任務。
結果證明CycleGAN比所有baseline都要優秀。當然跟pix2pix還是有所差距,但是畢竟pix2pix是完全監督的方法。
他們又研究了cyclegan每個成分起到的作用:只有adversarial loss沒有cycle consistency;只有cycle consistency沒有adversairial loss;只有一個方向的cycle consistency。結果如下圖(一句話,每個部分都很重要)。
后面他們還試了很有趣的一些應用,那些應用沒有進行評估,因為沒有ground truth來進行評估。這些應用包括邊緣<->鞋,馬<->斑馬,橙子<->蘋果,冬景<->夏景,藝術畫<->照片。結果都很酷炫。
DualGAN:
他們做了PHOTO-SKETCH, DAY-NIGHT, LABEL-FACADES和AERIAL-MAPS的實驗。在某些實驗中,他們甚至得到了比pix2pix更高的realness 分數(采集自amt)。在我看來,這說明realness是一個很差的評價方式,因為本質上只要你輸出足夠真實的圖片就可以,而不需要跟輸入的圖片有關。
DiscoGAN:
我很喜歡這篇文章中的toy experiment。他們人工生成了兩個域的GMM數據點,然后根據這個人造數據學習了一個DiscoGAN。另外兩個baseline,一個是最簡單的GAN,另一個是GAN with forward consistency(也就是一邊的consistency)。這兩個baseline都會有mode collapse的問題。
他們也有一個car到car的toy experiment。每個domain都有不同角度的3d車的圖片,每15度有一些。然后你可以在這兩個domain上學習discogan,可以得到角度的對應。 跟baseline相比,discogan能獲得更correlated的角度關系。
他們也試了FACE to FACE,FACE CONVERSION(性別,發色等r etc.), CHAIR TO CAR, CAR TO FACE, EDGES TO PHOTOS, HANDBAG TO SHOES, SHOES TO HANDBAG。這些實驗都是qualitative的實驗,而且也並不怎么酷。
討論
有趣的現象:wrong mapping。因為這是完全unsupervised,所以有時候模型會找到錯誤的mapping。比如說在cyclegan里,photos to labels的,building經常會被標注成樹。在discoGAN圖5(最后一列)里也可以看到,學到的變化是flipping(而不是exactly相同角度對應)。
此外,像狗變貓,貓變狗這樣的任務也很難,因為這涉及到幾何變換。我其實很懷疑這個任務是否有意義:因為這個任務很難有一個標准,就算讓人將狗變成貓,這都是一件很困難的事。就算你能保留原來的pose,但是比如說品種之間如何變換,很難定義。
另外一件沒有在本文中討論的是,我覺得挺有意思的是:現在的cycle是一圈,如果我們考慮兩圈,或者一圈半之類的,會有什么結果呢。