CycleGAN算法筆記

論文:Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
論文鏈接:https://arxiv.org/abs/1703.10593
代碼鏈接:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix

CycleGAN是發表在ICCV2017關於將GAN應用在無監督的圖像到圖像翻譯(image-to-image translation)的著名算法,和應用於有監督圖像翻譯的pix2pix幾乎是同一批作者。CycleGAN最大的特點是無監督,也就是不要求訓練數據是成對的,只需要提供不同域(domain)的圖像就能成功訓練不同域之間圖像的映射(或者叫翻譯),這大大降低了圖像翻譯的門檻,畢竟某些類型的成對數據並不容易獲取,比如同一個場景的夏天照片和冬天照片、同樣造型的斑馬和馬等,因此CycleGAN是非常棒的一個作品
關於成對和非成對數據的對比可以看Figure2,左邊是成對的數據,也就是pix2pix算法所使用的訓練數據;右邊是非成對的數據,X和Y是不同域的數據,不同域的例子比如夏天和冬天、斑馬和馬、蘋果和橘子等。
在這裏插入圖片描述
CycleGAN算法的整體示意圖如Figure3所示,整體上包含2個GAN網絡
假設現在有X和Y兩個域,可以簡單理解爲X爲斑馬,Y爲馬。在CycleGAN中有2個生成器,分別用G和F表示,如Figure3(a)所示,生成器G用來基於X域的圖像生成Y域的圖像(斑馬->馬);生成器F用來基於Y域的圖像生成X域的圖像(馬->斑馬),這2個生成器的定位是相反的過程,通過(b)和©中的cycle-consistency loss進行約束。同時CycleGAN中有2個判別器,分別用DX和DY表示,用來判斷輸入的X域或Y域圖像是真還是假。因此CycleGAN可以看做是2個GAN的融合,一個GAN由生成器G和判別器DY構成,實現從X域到Y域的圖像生成和判別;另一個GAN由生成器F和判別器DX構成,實現從Y域到X域的圖像生成和判別,兩個網絡構成循環(cycle)的過程
在這裏插入圖片描述
CycleGAN的整個過程可以用如下示意圖表示,截取自:https://hardikbansal.github.io/CycleGANBlog/。這個圖對CycleGAN的描述非常清晰,該圖總共分爲上下2部分,分別表示從X域到Y域的圖像生成和從Y域到X域的圖像生成。
在這裏插入圖片描述
CycleGAN的整體優化目標如公式3所示,一共包含3個部分,第一部分LGAN(G,DY,X,Y)表示生成器G和判別器DY的優化目標;第二部分LGAN(F,DX,Y,X)表示生成器F和判別器DX的優化目標,這2部分是GAN算法本身的優化目標。第三部分Lcyc(G,F)表示cycle consistency loss,用於約束從變換域再變換到原域時圖像的一致。
在這裏插入圖片描述
LGAN(G,DY,X,Y)如公式1所示,是常規GAN的優化目標,判別器DY要最大化這個優化目標,生成器G要最小化公式1中的後半部分。LGAN(F,DX,Y,X)也是同理。
在這裏插入圖片描述
另外作者在論文中提到,爲了訓練過程更加穩定,實際訓練中採用的是基於最小二乘損失,以LGAN(G,D,X,Y)爲例,判別器D的優化目標變成最小化Expdata(y)[(D(y)1)2]+Expdata(x)[D(G(x))2]Ex \rightarrow pdata(y)[(D(y)-1)^2]+Ex \rightarrow pdata(x)[D(G(x))^2],這個優化目標的第一部分是希望D(y)儘可能接近1,也就是說在輸入真實圖像y時,判別器D認爲輸入是真實的概率儘可能高,第二部分是希望D(G(x))儘可能接近0,也就是說在輸入生成的假圖像G(x)時,判別器D認爲輸入是真實的概率儘可能低。生成器G的優化目標變成最小化Epdata(x)[(D(G(x))1)2]E \rightarrow pdata(x)[(D(G(x))-1)^2],這個優化目標是希望D(G(x))儘可能接近1,而D(G(x))越接近1表示判別器D越相信生成器G生成的圖像G(x)是真實圖像。
Lcyc(G,F)如公式2所示,其中G(x)表示從X域到Y域的變化,F(G(X))表示再從Y域變換到X域,模型訓練的目標當然是希望F(G(X))儘可能和X接近,因此用L1距離來約束,也就是x->G(x)->F(G(x))≈x,作者將這個稱之爲forward cycle consistency;同理對於y->F(y)->G(F(y))≈y稱之爲backward cycle consistency。在Figure3(b)和©中也給出了這個損失的示意圖。
在這裏插入圖片描述
實驗結果:
在CycleGAN中對於損失函數的設定是模型訓練成功的關鍵,因此在這篇論文中也對損失函數做了對比實驗,如Table4和Table5所示,分別表示從標籤到圖像(Table4)和從圖像到標籤(Table5)的轉換任務。
在這裏插入圖片描述
Figure7是Table4和Table5實驗的效果圖,可以看到Cycle alone和GAN+backward基本上都無法得到指定域的圖像;GAN alone和GAN+forward在從圖像生成標籤任務中對於不同的輸入圖像,得到的標籤基本上都是一樣的,這是訓練過程中遇到模式崩塌(mode collapse)的原因;CycleGAN在2種轉換任務中都能得到理想的生成效果。
在這裏插入圖片描述
Figure13是CycleGAN的生成圖樣例。
在這裏插入圖片描述
Figure15是CycleGAN和其他圖像風格遷移算法的對比。
在這裏插入圖片描述

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