作者:Guim Perarnau
編譯:Katherine Hou、朝夕、Katrine Ren、Shan LIU、笪潔瓊、錢天培
生成對抗網路(GAN)一經提出就風光無限,更是被Yann Lecun譽為“十年來機器學習領域最有趣的想法”。
GAN“左右互搏”的理念幾乎眾所周知,但正如卷積神經網路(CNN)一樣,GAN發展至今已經衍生出了諸多變化形態。
今天,文摘菌就來為大家盤點一下GAN大家庭中各具特色的成員們。
他們的名單如下:
1.DCGANs
2.Improved DCGANs
3.Conditional GANs
4.InfoGANs
5.Wasserstein GANs
6.Improved WGANs
7.BEGANs
8.ProGANs
9.CycleGANs
注意,這篇文章不會包含以下內容
• 複雜的技術分析
• 程式碼(但有程式碼連結)
• 詳細的研究清單
(你可以點選以下連結https://github.com/zhangqianhui/AdversarialNetsPapers)
想要了解更多GANs相關內容的也可以留言告訴文摘菌哦~
GANs概論
如果你對GANs很熟悉的話,你可以跳過這部分的內容。
請點選此處輸入圖片描述
GANs最早由Ian Goodfellow提出,由兩個網路構成,一個生成器和一個鑑別器。他們在同一時間訓練並且在極小化極大演算法(minimax)中進行競爭。生成器被訓練來欺騙鑑別器以產生逼真的影像,鑑別器則在訓練中學會不被生成器愚弄。
請點選此處輸入圖片描述
首先,生成器通過從一個簡單分佈(例如正態分佈)中抽取一個噪音向量Z,並且上行取樣(upsample)這個向量來生成影像。在最初的迴圈中,這些影像看起來非常嘈雜。然後,鑑別器得到真偽影像並學習去識別它們。隨後生成器通過反向傳播演算法(backpropagation)收到鑑別器的反饋,漸漸在生成影像時做得更好。我們最終希望偽影像的分佈儘可能地接近真影像。或者,簡單來說,我們想要偽影像儘可能看起來像真的一樣。
值得一提的是,因為GANs是用極小化極大演算法做優化的,所以訓練過程可能會很不穩定。不過你可以使用一些“小技巧”來獲得更穩健的訓練過程。
在下面這個視訊中,你可以看到GANs所生成圖片的訓練演變過程。
程式碼
如果對GANs的基本實現感興趣,可以參見程式碼的連結:
Tensorflow(https://github.com/ericjang/genadv_tutorial/blob/master/genadv1.ipynb)
Torch 和 Python (PyTorch)(https://github.com/devnag/pytorch-generative-adversarial-networks;https://medium.com/@devnag/generative-adversarial-networks-gans-in-50-lines-of-code-pytorch-e81b79659e3f)
Torch 和 Lua(https://github.com/lopezpaz/metal)
雖然這些不是最前沿的內容,但它們對於掌握理念很有幫助。
接下來我將按照粗略的時間順序描述最近這些年來出現的GANs相關的一些進展和型別。
深度卷積生成式對抗網路(Deep Convolutional GANs, DCGANs)
DCGANs是GAN結構的最早的重要發展。就訓練和生成更高質量的樣本來說,DCGANs更加穩定。
論文連結:https://arxiv.org/abs/1511.06434
DCGAN的作者們專注於提升初代GAN的框架結構。他們發現:
批次(Batch)的正態化在兩個網路中都是必須要做的。
完全隱藏的連線層不是一個好的想法。
避免池化,只需卷積
修正線性單元(ReLU)啟用函式非常有用。
DCGANs截至目前任然被時常提起,因為它們成為了實踐和使用GANs的主要基準之一。
在這篇論文釋出後不久,就在Theano, Torch, Tensorflow 和 Chainer 中出現了不同的可使用的實現方法,這些方法可以在你感興趣的任何資料集上測試。所以,如果你遇到了生成後奇怪的資料集,你完全可以歸咎於這些傢伙。
DCGANs的使用場景如下:
你想要比基礎GANs表現更好(這是必須的)。基礎GANs適用於簡單的資料集,然而DCGANs比這要強得多。
你在尋找一種穩固的基準方法來比較你的新GAN演算法。
從現在開始,除非特別說明,我接下來將要描述的所有GANs的型別都被假定為有DCGAN的結構。
提升深度卷積生成式對抗網路(Improved DCGANs)
一系列提升先前的DCGAN的技術。例如,這一提升後的基準方法能夠生成更好的高解析度影像。
論文連結:https://arxiv.org/abs/1606.03498
GANs的主要問題之一是收斂性。收斂性不是一定的,而且儘管DCGAN做了結構細化,訓練過程仍可能非常不穩定。
在這篇論文裡,作者們針對GAN訓練過程提出了不同的增強方法。以下是其中一部分:
特徵匹配:他們提出了一種新的目標函式,而不是讓生成器儘可能地去矇騙鑑別器。這個目標函式需要生成器生成的資料能夠跟真實資料的統計量相匹配。在這種情況下,鑑別器只被用來指定哪些才是值得去匹配的統計量。
歷史平均:在更新引數值時,把它們過去的值也納入考慮。
單側標籤平滑:這一項非常簡單:只要把你的鑑別器的目標輸出值從[0=假影像,1=真影像]改成[0=假影像,0.9=真影像]。不錯,這樣就提升了訓練效果。
虛擬批次正態化:通過使用從其他批次計算的統計量來避免依賴於同一批次的資料。這樣的計算成本很高,所以它僅僅被用在生成器當中。
所有這些技術都使得模型在生成高解析度影像時能表現得更好,而這正是GANs的弱項之一。
作為對比,請看在128x128影像上原始DCGAN和提升後的DCGAN的表現差異:
請點選此處輸入圖片描述
這些本來都是狗的圖片。正如你看到的,DCGAN表現很糟糕,而用improved DCGAN你至少可以看到一些包含狗的特徵的內容。這也說明了GANs的另一侷限——生成結構性的內容。
Improved DCGANs的使用場景如下
生成更高解析度的影像
條件生成式對抗網路(Conditional GANs, cGANs)
條件式生成式對抗網路使用額外的標籤資訊用於生成更高質量圖片,並且使圖片的呈現可控制。
論文連結:https://arxiv.org/abs/1411.1784
CGANs是GAN框架的擴充套件。我們用條件資訊Y來描述資料的某些特徵。假設我們要處理面部影像,Y則可以用來描述頭髮顏色或者性別。然後這些屬性被插入生成器和鑑別器。
請點選此處輸入圖片描述
使用臉部特徵資訊的條件生成網路如上圖所示
條件式生成對抗網路有兩個很有意思的地方:
1、隨著你不斷給模型提供更多資訊,GAN學習探索這些資訊,然後產生更好的樣本。
2、我們用兩種方法來控制圖片的呈現,在沒有CGAN的時候所有圖片資訊使用Z編碼。在CGAN下,我們加入了條件資訊Y,於是Z和Y對不同資訊進行編碼。
例如,我們假設Y對手寫數字0-9進行編碼。Z對其他變數編碼,這些變數可以是數字的風格比如(大小,粗細,旋轉角度等。)
請點選此處輸入圖片描述
MNIST(Mixed National Institute of Standards and Technology database,簡單機器視覺資料集)樣本中Z和Y的區別如上圖。Z是行,Y是列;Z對數字的風格編碼,Y對數字本身編碼。
在這個領域有很多有趣的文章,我介紹2個:
1、使用生成對抗網路學習在指定位置畫畫
(論文:https://arxiv.org/abs/1610.02454;程式碼:https://github.com/reedscot/nips2016):這篇論文裡作者設計了一個本文描述的方法來告訴GAN畫什麼,同時使用方框和標記告訴GAN繪畫主體的位置。如下圖示:
請點選此處輸入圖片描述
堆疊式GAN
(原文:https://arxiv.org/abs/1612.03242;程式碼:https://github.com/hanzhanggit/StackGAN)
這篇文章和上一篇比較類似,這裡作者同時使用2個GAN網路(階段1和階段2)用於提升圖片的質量。第1階段用來獲得包含圖片“基本”概念的低解析度圖片。第2階段用更多的細節和更高的解析度提煉第1階段的圖片。
這篇文章據我所知是生成高質量圖片最好的模型之一,不信請看下圖。
請點選此處輸入圖片描述
條件式生成網路的使用場景如下:
1、你有一個帶標籤的訓練集,想提高生成圖片的質量
2、你想對圖片的某些特徵進行精細的控制,比如在某個設定的位置生成特定大小的一隻紅色小鳥。
最大資訊化生成對抗網路(InfoGANs)
GANs可以在無監督模式下對噪聲向量Z的一部分有意義的影像特徵進行編碼。比如對某一數字的旋轉編碼。
論文連結:https://arxiv.org/abs/1606.03657
你是否曾想過GAN裡輸入噪聲Z對哪些資訊進行編碼?一般來說它對圖片的不同型別的特徵使用一種非常“嘈雜”的方式編碼。例如,取Z向量的一個位置 並且插入一個-1到1之間的值。這是下圖所示的MNIST資料集的訓練模型。
請點選此處輸入圖片描述
上圖中,生成的圖片看似是從4慢慢變成“Y”(很像是4和9的混合體)。
這就是我之前所說的使用一種“嘈雜”的方式進行編碼:Z的一個位置是影像多個特徵的一個引數。
這種情況下,這個位置改變了數字自己(某種程度,從4變成9)和他的風格(從粗體變成斜體)。
然而,你無法定義Z的位置的確切含義。
如果使用Z的一些位置來代表唯一且受限的資訊,正如CGAN裡的條件資訊Y呢?
例如,第一個位置是0-9之間的數值來控制數字,第二個位置來控制數字的旋轉,這就是文中作者想要表達的。
有意思的是,與CGANS不同,他們使用無監督的方法實現並不需要標籤資訊。
他們是這麼做的,把Z向量拆分成兩部分:C和Z
C對資料分佈的語義特徵進行編碼
Z對分佈的所有非結構化噪聲進行編碼
如何用C對這些特徵編碼呢?
通過改變損失函式避免C被GAN簡單地忽略掉。所以他們使用一種資訊理論正則化確保C與生成器分佈之間的互資訊[z1] (mutual information)。
也就是說,如果C變化,生成的影像也會變化。這導致你不能明確的控制什麼型別的資訊將被引入C中。但是C的每一個位置都有獨特的含義。
如下圖所示:
請點選此處輸入圖片描述
C的第一位置編碼數字的類別,第二位置編碼旋轉方向。
然而,不使用標籤資訊的代價是,這些編碼僅對非常簡單的資料集有效比如MNIST庫裡的數字。
並且,你還需要手工設定C的每個位置。例如文章中作者需要定義C的第一位置是介於0-9的整數以對應資料集的十類數字。你會認為這樣不是百分百的無監督,因為需要手動給模型提供一些細節。
你可能需要用到infoGANs的場景如下:
1、資料集不太複雜
2、你想訓練一個CGAN模型但是缺少標籤資訊
3、你想知道資料集主要有意義的影像特徵並且對他們進行控制
生成式對抗網路(Wasserstein GANs)
修改損失函式以引入Wasserstein距離,這樣以來WassGANs 的損失函式同圖片質量建立聯絡。同時訓練的穩定性有所提升而並非依賴於架構。
論文連結:https://arxiv.org/abs/1701.07875
GANs 經常存在收斂問題,所以你並不知道什麼時候該停止訓練。換句話說損失函式同影像質量無關,這可是個大難題。
因為:
你需要不斷的檢視樣本來確認模型訓練是否正確
因為不收斂,你不知道何時該停止訓練
也沒有數值指示你調參的效果如何
舉個例子,看下面DCGAN的兩個無資訊損失函式完美的生成MNIST樣本的迭代圖[z2]
請點選此處輸入圖片描述
僅看上圖你知道什麼時候該停止訓練嗎?
這種可解釋性的問題也是Wasserstein GANs要解決的。
怎樣解決呢?
如果真實和偽造樣本的分佈不重疊(一般都是這樣)GANs可以用來最小化JS散度(Jensen-Shannon divergence)直到0。
所以與其最小化JS散度,作者使用Wasserstein距離來描述不同分佈中點之間的距離。
思路大概如此,如果你想了解更多,我強烈建議你看這篇文章(https://paper.dropbox.com/doc/Wasserstein-GAN-GvU0p2V9ThzdwY3BbhoP7)或者更深入分析或者閱讀本論文。
WassGAN有和影像質量關聯的損失函式並且能夠收斂。同時他更加穩定而不依賴GAN的結構。比如,就算你去掉批標準化或者使用怪異的結構,它仍能很好的工作。
請點選此處輸入圖片描述
這就是他的損失函式圖,損失越低,影像質量越好。完美!
Wasserstein GANs的應用場景如下:
你需要尋找最先進的且有最高訓練穩定性的GAN
你想要一個有資訊量且可以解讀的損失函式。
加強版WGANs (Improved WGANs , WGAN-GP)
這個模型使用的是Wasserstein GANs,並應用了梯度懲罰(gradient penalty)來代替權重剪輯(weight clipping)及其帶來的一些不需要的行為。這個方法可以帶來更高的聚合度、更高質量的樣本和更穩定的訓練。
論文:https://arxiv.org/abs/1704.00028
程式碼:https://github.com/igul222/improved_wgan_training
針對問題:WGANs有時候會生成一些質量不佳的樣本,或者是無法在某些集合中生成聚集。這種現象主要是由於為了滿足Lipschitz限制而在WGANs中應用權重剪輯(即把所有權重限制在一個由最小值和最大值組成的範圍內)所造成的。如果你對這個限制不太瞭解,那麼你只需要記住它是WGANs正常執行的一個必要條件。那麼為什麼權重剪輯會造成如上問題呢?這是因為它會使WGANs偏向於使用那些過於簡單的函式,這意味著當WGANs想要模擬複雜的資料時,簡單地估算近似值令其無法得到準確的結果(如下圖所示)。另外,權重剪輯也使得梯度爆炸與消失更容易發生。
請點選此處輸入圖片描述
左圖是使用了簡單的函式導致無法正確模擬高斯為8的WGANs執行後的結果,而右圖則是經過使用了更復雜的函式的WGAN-GP矯正後的影像。
梯度懲罰(Gradient penalty):所以我們該如何擺脫權重剪輯帶來的不良效果呢?
WGAN-GP的作者(GP表示梯度懲罰)提出了使用另一種叫梯度懲罰的辦法來加強Lipschitz限制的建議。原則上,梯度懲罰的原理是對某些梯度實行了均值為1的限制。對於那些均值偏離於1的梯度將會實施懲罰(減少權重),這也是為什麼它被稱為梯度懲罰的原因。
優點:由於在訓練中使用了梯度懲罰而不是權重剪輯,WGANs獲得了更快的聚合。另外,因為不再必須對超引數進行調整,而且網路架構的使用也不再像之前那麼重要,訓練在某種程度上變得更加穩定。雖然很難說清楚到底有多少,但這些WGAN-GP確實產生了更高質量的樣本。在已驗證並測試的結構上,這些樣本的質量和作為基線的WGANs產出的結果非常相似。
請點選此處輸入圖片描述
基於同一個網路架構,WGANs-GP明顯在生成高質量樣本上更有優勢,而GANs則不然。
比如,據作者所知,這是首次GANs能夠在殘差網路的結構上執行:
請點選此處輸入圖片描述
為了不超出本篇博文的範疇,還有許多其他有趣的細節我這裡就不一一闡述了。如果你對這個訓練方式有興趣想要了解更多(例如,為什麼梯度懲罰只應用於“某些”特定梯度,又或者怎樣才能把這個模型用於文字資料樣本),我會建議你自行閱讀一下該論文。
強化版的WGAN的優點如下:
l 更快的聚合
l 可以在各種各樣的網路架構和資料集中使用
l 不像其他的GANs一樣需要太多的超引數調整
邊界均衡GANs(Boundary Equilibrium GANs,BEGANs)
GANs使用一個自動編碼器作為均衡判別器。它們可在一個簡單的架構上被訓練出來,且合成一個動態的可以使得均衡器和生成器在訓練中兩者平衡的階段。
論文:https://arxiv.org/abs/1703.10717
一個有趣的事實:BEGANs 和WGAN-GP幾乎是同一天在論文上發表。
理念:讓BEGAN區別於其他GANs的原因有兩個,一是它們使用了一個自動編碼器作為均衡判別器(這一點和EBGANs類似),二是為了適用於這個情境的一個特別的損失函式。這種選擇背後的理由是什麼呢?強迫我們使用畫素重建損失函式來製造模糊生成樣本的自動編碼器是否也不是傳說中那麼“邪惡”呢?
要回答這些問題,我們需要考慮以下兩點:
1. 為什麼要重建畫素損失?作者解釋說這麼做的原因是,對於那些符合對畫素損失的重建分佈模式的假設,我們可以依賴它們去匹配樣本的分佈模式。
2. 而這又引出了下一個問題:如何才可以達到這一目的呢?一個重要的觀點是,從自動編碼器/均衡判別器形成的畫素重建損失(換言之,就是基於某個影像輸入,輸出最優化的畫素重建)並不是經BEGANs最小化後生成的最終損失。可以說,這個重建損失不過是為了計算最終損失的其中一個步驟。而最終損失的計算這是通過衡量基於真實資料的重建損失和基於生成資料的重建損失之間的Wasserstein距離(是的,現在它無處不在)。
這麼一看似乎這其中的資訊量非常大,但我可以保證,一旦我們看清損失函式是如何作用於生成器和判別器,這一切將會變得再明白不過了。
生成器專注於生成那些能夠讓判別器良好重建的影像
而判別器則致力於儘可能良好地重建真實影像,同時重建那些誤差最大化的生成影像。
差異因數:另一個有趣的成分是所謂的差異因數。通過這個因子你能控制判別器不同程度的表現,決定它能只專注於形成對真實影像的完美重建(注重質量),又或是更側重在區分真實影像和生成影像(注重多樣性)。然後,它們就能更進一步地利用這個差異因數去保持生成器和判別器在訓練中的平衡。如同WGANs,這一模型同樣應用均衡狀態作為調整和影像質量相關的聚合度的方法。然而,和WGANs (與 WGANs-GP)不盡相同的是,它們利用了Wasserstein 距離,而非Lipschitz限制,去測量均衡水平。
結論:BEGANs並不需要任何花裡胡哨的網路架構就可以訓練得當。如同在論文中所述的,“不批量標準化,不丟棄神經網路元,無反摺積,也沒有卷積濾鏡的指數化增長”,這些生成樣本(128x128)的質量已經相當好了。
請點選此處輸入圖片描述
然而,在這篇論文中有一個重要的細節值得我們注意:論文中使用的未發表資料集的樣本量是目前廣為使用的 CelebA資料集的兩倍之大。因此,為了得到更具有現實意義的定性比較,我邀請大家去檢視那些使用了CelebA的公開模型(https://github.com/carpedm20/BEGAN-tensorflow),並看看那些由此生成的樣本。
最後,如果你對BEGANs感興趣想要了解更多,我建議你閱讀一下這篇博文(https://blog.heuritech.com/2017/04/11/began-state-of-the-art-generation-of-faces-with-generative-adversarial-networks/),裡面對BEGANs有更多詳細的介紹。
你需要BEGANs的原因一般會和需要使用WGANs-GP的情況差不多。這兩個模型的結果往往非常相似(穩定的訓練、簡單的架構、和影像質量相關的損失函式),而兩者的不同主要在於過程中使用的手段。由於評估生成式模型本身就不是一件容易的事,我們很難去說清楚孰優孰劣。但就像Theisetal在他們的論文(https://arxiv.org/abs/1511.01844)中所說的,選擇一個評估的方法,不然就依據實際情況來做判定。在這種情況下,WGANs-GP具有更高的初始分數(Inception score)而BEGANs則能生成非常優質的影像,兩者都是未來最值得研究和最具有革新意義的模型。
漸進式發展生成對抗網路(Progressive growing of GANs,ProGANs)
在訓練過程中,逐步嵌入新的高解析度的層次,來生成相當逼真的影像。更多的進步以及新興的考核機制也相繼湧現。新生成的圖片質量高得驚人。
論文:https://arxiv.org/abs/1710.10196
程式碼:https://github.com/tkarras/progressive_growing_of_gans
生成高解析度的影像是個大挑戰。圖片越大,對生成對抗網路來說越可能失敗。因為它要求模型學習辨別更細微、複雜的細節。為了使大家更好理解,在這篇文章發表之前,GANs產出影像的合理尺寸大概是256x256。漸進式生成對抗網路(ProGANs)將它提升到了一個全新水準-生成尺寸為1024x1024的圖片。我們來看看它是如何實現的:
理念: ProGANs-建立於WFGANs-GP-引入了一種靈活地將新層次逐漸嵌入到訓練時間的方式。每一層都利用上取樣增強了生成器和判別器裡的影像解析度。
步驟分解如下:
1 首先,利用低畫素圖片訓練生成器和判別器。
2 在一定時間點(開始聚合的時候),提高解析度。這是通過“遷移階段”/“平滑技術”非常完美地實現的。
請點選此處輸入圖片描述
新的層次是藉助α控制的一系列細微的線性步驟新增,而不是簡單粗暴地加上一層。
我們看看生成器裡都發生了什麼。最初,當α = 0,無變化。產出主要來自於前一低解析度層(16x16)的貢獻。
當提升α的值,新一層(32x32)開始通過反向傳播調整它的權重。最後,當α趨近於1,我們幾乎可以跳過32x32這一層的操作。同理適用於判別器,當然是以完全相反的方式:不是使圖片更大,而是更小。
3 一旦轉化完成,繼續訓練生成器與判別器。假如得到的圖片質量解析度不達標,請回到步驟2。
不過,等等……對新的高解析度影像的上取樣與串聯不是已經在StackGANs(還有新StackGANs++)裡實現了麼?沒錯,也不全對。首先,StackGANs是將文字翻譯為影像的條件GANs,它引入文字描述作為額外輸入值。而ProGANs沒有使用任何假定式的資訊。更加有趣的是,儘管StackGANs和ProGANs都對更高解析度的圖片串聯,StackGANs需要儘量多的根據上取樣獨立配對的GANs-需單獨訓練,你想進行上取樣3次麼?那你要訓練3個GANs。另一方面,在ProGANs模型中只有一個單一的GAN被訓練。在這一訓練中,更多的上取樣層被逐步疊加至上取樣的圖片,上取樣3次的嘗試只是增加更多的層在訓練時間上,而不是抓3個新的GANs逐次訓練。總而言之,ProGANs採用一種與StackGANs相似的理念,它完美地完成,而且在沒有額外資訊的情況下產出更好的結果。
結果。作為漸進訓練的結果,ProGANs生成的圖片有更高的質量,而針對1024x1024影像的訓練時間也縮減了5.4倍。背後的理由是,ProGAN不需要一次性學習所有大、小規模的典型圖片。在ProGAN模型裡,小規模的影像最先被學習(低解析度層次聚合),然後模型可以自行聚焦在完善大尺寸圖片的結構上(新的高解析度層次聚合)。
其他的提升。
另外,該論文提出了新的設計決策來更進一步提升模型的效能。概述如下:
小批量標準差:將標準差運用於這些小批量的所有特徵屬性,允許每個小批量有相似的統計資料。然後,總結為一個新的層的單一值,嵌入至網路尾端。
均衡的學習速率:通過在訓練過程中持續地將每個權重除以一個常量,確保所有權重的學習速度一致。
畫素標準化:在生成器上,每一個向量的特徵是根據其卷基層標準化的(論文裡的精確公式)。這是為了防止生成器和判別器的梯度量級的逐步上漲。
CelebA-HQ(CelebA高階版)。 值得一提的是,作者為了實現高解析度訓練,改進了原始的CelebA,從而得到了CelebA-HQ,簡單來說,它們移除原像,應用高斯濾波器來生成一種景深效果,然後探測到人臉影像,得到一個1024x1024尺寸的裁剪圖片,在這一流程之後,他們從202k張圖片裡保留了最優質的30k張圖片。
最後,我們介紹一種新的評估方式:
背後的理念是:生成影像的本地圖形結構應該與訓練影像的結構匹配。
那麼如何測量本地結構?
使用Laplacian pyramid演算法,你可以得到不同的空間頻段,來作為描述符。
最後,我們從生成影像和原始影像中提取描述符,將其規範化,然後使用著名的Wasserstein距離檢測它們有多接近。距離越近越好。
你可能會想在以下場景使用ProGANs的使用場景如下:
假如你希望獲得最完美的結果。但是考慮到…
你需要花大量時間搭建模型:我們需要在一個單一的NVIDIA Tesla P100 GPU上花20天訓練網路
如果你開始懷疑世界的真實性。GANs的下一輪迭代可能會給你一些比現實生活還真實的樣本參考。
迴圈生成對抗網路(Cycle GANs)
論文:https://arxiv.org/pdf/1703.10593.pdf
程式碼:https://github.com/junyanz/CycleGAN
迴圈GANs是目前最先進的用於圖片互譯的生成對抗網路。
請點選此處輸入圖片描述
這些GANs並不需要配對的資料集來學習不同領域之間的轉譯,這點很棒,因為配對資料集很難獲取。然而CycleGANs仍然需要通過兩個不同領域的資料X和Y(例如X是普通的馬匹,Y是斑馬)來訓練。為了將轉換限制於從一個領域到另一領域的範疇,他們使用所謂的“迴圈一致性損失”。大意是,如果可以將馬匹A轉化成斑馬A,那麼當你將斑馬A逆轉化,應該能得到馬匹A才對。
這種從一個領域到另一領域的變換與另一熱門概念“神經風格轉換”是有區別的。後者結合了一副影像的“內容”與另一影像的“樣式”。迴圈GANs則是在一個領域轉換至另一領域的過程中學習總結非常高層次的特徵。因此,迴圈GANs更籠統,並且適用於多種對映關係,例如將一個速寫轉化為真實物品。
總結一下,生成對抗網路在近期取得了兩大顯著進步:
WGANS-GP和BEGANs
儘管理論研究方向不同,但它們提供了相似的優點。其次,我們有ProGANs(基於WGANS-GP),它開啟了一條通往生成高清影像的清晰路徑。同時,迴圈GANs讓我們看到了GANs從資料集提取有用資訊的潛力以及這些資訊如何轉入至另一非關聯的資料分佈。