《UnpairedImage-to-ImageTranslation usingCycle-ConsistentAdversarialNetworks》論文解析

鼎鼎大名的cycleGAN,今天我們來說一說這篇文章。

首先介紹下GAN,傳送門:https://blog.csdn.net/wenqiwenqi123/article/details/86178376

介紹下GAN的損失函數,傳送門:https://blog.csdn.net/wenqiwenqi123/article/details/105099445

在確保你瞭解了GAN的原理後,我們再接着看cycleGAN。

平常的GAN的原理就是一個生成器G,和一個判別器D,判別器D努力辨認生成的圖片是真是假,而生成器G努力矇混判別器,讓生成的圖片逼真。但是cycleGAN,有兩個G和兩個D,構成了一個環路,因此稱之爲cycle。

我們先來看cycleGAN解決了一個什麼問題:我們有兩個不同的域,A域和B域,兩個域中的圖片的分佈和風格是不同的,要讓A域的圖片經過處理後變成B域的風格和分佈,且保留原圖的大部分內容信息。舉例子:斑馬變成普通的馬。而cycleGAN跟之前的pixel2pixel算法最大的改進是,不再需要成對的數據了。

CycleGAN本質上是兩個鏡像對稱的GAN,構成了一個環形網絡。兩個GAN共享兩個生成器,並各自帶一個判別器,即共有兩個判別器和兩個生成器。一個單向GAN兩個loss,兩個即共四個loss。

首先聲明下版權,本文的圖部分來自量子位公衆號,見水印。

 

先看網絡結構。

生成器(G):

生成器由編碼器、轉換器和解碼器構成。

  • 編碼:第一步利用卷積神經網絡從輸入圖象中提取特徵。將圖像壓縮成256個64*64的特徵向量。
  • 轉換:通過組合圖像的不相近特徵,將圖像在DA域中的特徵向量轉換爲DB域中的特徵向量。作者使用了6層Reset模塊,每個Reset模塊是一個由兩個卷積層構成的神經網絡層,能夠達到在轉換時同時保留原始圖像特徵的目標。
  • 解碼:利用反捲積層(decovolution)完成從特徵向量中還原出低級特徵的工作,最後得到生成圖像。

判別器(D):

鑑別器將一張圖像作爲輸入,並嘗試預測其爲原始圖像或是生成器的輸出圖像。

鑑別器本身屬於卷積網絡,需要從圖像中提取特徵,再通過添加產生一維輸出的卷積層來確定提取的特徵是否屬於特定類別。

 

我們來看看它的loss:

1、Adversarial Loss :

loss1就是正常的GANloss,生成器和判別器分別做他們該做的事。論文中用x和y來指代兩個不同域的數據,x經過G生成G(x),G(x)要盡力模仿y,因此他倆一起經過D1來判別真假。反之y也要經過F生成F(y),F(y)要盡力模仿x,他倆一起經過D2來判別真假。 這部分與正常的GAN一樣,只不過是雙向的,不僅x->y,也y->x。

 

2、CycleConsistency Loss :

cycleGAN最精妙的地方來了,在這裏G(x)去模仿y後,又用F(G(x))-x算了一個l1 loss。這是什麼意思呢,就是加個約束,使得G把x轉爲y後,F又能把它轉回x。

圖解如下:

 

於是乎總的loss如下:

 

那麼可不可以不加第二個loss呢?作者也給出了消融實驗,如下圖:

最左邊是輸入,中間是沒有第二個loss的結果,最右是有第二個loss。可以看出,這個loss,作者稱之爲identity mapping loss,能幫助圖片保留顏色信息。

當然了作者做了許多實驗來證明cycleGAN效果非常好:

就不一一列出了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章