對抗生成網路GAN系列——CycleGAN簡介及圖片春冬變換案例

語言: CN / TW / HK

theme: fancy

本文為稀土掘金技術社群首發簽約文章,14天內禁止轉載,14天后未獲授權禁止轉載,侵權必究!

🍊作者簡介:禿頭小蘇,致力於用最通俗的語言描述問題

🍊往期回顧:對抗生成網路GAN系列——GAN原理及手寫數字生成小案例    對抗生成網路GAN系列——DCGAN簡介及人臉影象生成案例

🍊近期目標:寫好專欄的每一篇文章

🍊支援小蘇:點贊👍🏼、收藏⭐、留言📩

 

對抗生成網路GAN系列——CycleGAN簡介及圖片春冬變換案例

寫在前面

​   在前面我們已經介紹過了最原始的GAN網路和DCGAN,這篇文章我將來為大家介紹CycleGAN,並且基於CycleGAN實現一個小demo——將一張圖片進行季節轉換,即從冬天變換到夏天和從夏天變換到冬天。🍹🍹🍹

​   大家已經看到了CycleGAN,應該對GAN已經有了一定的瞭解,因此我不會對GAN的原理進行詳細的講解,只會敘述CycleGAN的獨到之處。如若你還對GAN的原理不夠清楚,下列兩篇文章或許能幫到您:

​   在正式講解之前,我給大家先展示一下CycleGAN可以做哪些事:

horse2zebra

           普通馬變斑馬

2222

                   各種風格轉換

可以看到,使用CycleGAN可以實現各種各樣的風格轉換,是非常有意思的一個演算法。大家準備好了嘛,下面就正式發車了。🚖🚖🚖

 

CycleGAN核心思想

​   這一部分我會來介紹CycleGAN的核心思想,相信你瞭解後會和我有一樣的感覺,那就是這個設計太巧妙了!!!🌼🌼🌼

首先我們還是來介紹一下這篇論文的全稱—— Unpaired Image-to-Image Translationusing Cycle-Consistent Adversarial Networks,即非成對影象轉換迴圈一致性對抗網路。我們一點點的來解釋,首先什麼是非對稱影象呢?其實啊,這裡的非對稱影象指的是我們的訓練樣本是不相關的。在之前的一些GAN轉換實驗中,往往都需要成對的圖片資料,例如pix2pix,而成對的圖片資料是很難獲取的,於是CycleGAN對資料的要求就大大降低,不需要成對影象,即非對稱影象,這樣就讓CycleGAN的應用場景就變得非常豐富。下圖展示了對稱資料和非對稱資料的區別:

image-20220724214429247

​   接下來再來講講什麼是迴圈一致性對抗網路?這個就是本文的核心思想,聽懂這個那麼這篇論文你就搞懂了,這就為大家慢慢道來!!!🌼🌼🌼

​   我們先來明確一下這篇文章的目標,即有兩個域的影象,分別為域X和域Y,例如域X表示夏季圖片、域Y表示冬季圖片,現期望將這兩個域的圖片互相轉換,即輸入域X的夏季圖片生成器輸出域Y的冬季圖片或輸入域Y的冬季圖片生成器輸出域X的夏季圖片。我們來考慮考慮傳統的GAN網路能否完成這項任務,示意圖如下:

​   域X的圖片經生成器G不斷生成圖片G(x),而$D_Y$ 鑑別生成的圖片和域Y中的圖片,這樣就構成了一個GAN網路,這樣看似乎也可以完成任務,會將域X中的圖片不斷像域Y轉換,但是呢,大家能否看出這裡似乎還是存在著一些漏洞,如下圖所示:

image-20220725114813626

​   上圖我們的確是將域X中圖片轉換成了域Y中冬季圖片風格,但是你會發現轉換後的圖片和原始圖片沒有任何關係,即GAN網路只學到了把一張夏季圖片傳化為冬季圖片,但至於轉換後的冬季圖片和原始夏季圖片有沒有關係沒有學習到,這樣的話這個網路肯定是不符合實際要求的。那麼CycleGAN就提出了迴圈一致性網路,如下圖所示:

image-20220725131900754

​   現對上圖做相關解釋,首先我們先對相關字母做一定了解,如下表所示:

| $x$ | 域X中的影象資料 | | :-------------: | :---------------------------------------------: | | ${\rm{\hat Y}}$ | $x$經生成器$G$生成的圖片域 | | ${\rm{\hat x}}$ | ${\rm{\hat Y}}$ 中圖片經生成器$F$生成的資料 | | $G$ | 生成器,用於將圖片從域$X$到域$Y$生成 | | $F$ | 生成器,用於將圖片從域$Y$到域$X$生成 | | $D_Y$ | 判別器,用於判別圖片是來自域$Y$還是$G(x)$ |

​   說明了這些字母后,我們來看上圖:首先域$X$中的資料$x$經過生成器$G$會變成 ${\rm{\hat Y}}$ 中的圖片${\rm{\hat y}}$ ,即現在夏季的圖片已經轉換成冬季的圖片,不過此時夏冬兩季圖片的相關性我們是不知的,可能很差,而我們期望夏冬兩季的圖片相關性強,即區別只會體現在季節的差異上。於是我們會將${\rm{\hat Y}}$ 中的圖片${\rm{\hat y}}$ 再經過生成器$F$變換回來,即將冬季圖片再轉換成夏季圖片,結果記為${\rm{\hat x}}$ 。然後我們就設定損失讓$x$和${\rm{\hat x}}$ 儘可能一樣,這樣就能控制生成器G生成的冬季圖片和原始夏季圖片相關性很強了。上述迴圈一致性大致過程為:$x \to G(x) \to F(G(x)) \approx \hat x$ ,即讓$x$和${\rm{\hat x}}$儘可能相似。

​   上文介紹完了從域$X$轉域$Y$的過程,那從域$X$轉域$Y$是一樣的,即儘可能讓 $y$ 和 ${\rm{\hat y}}$ 相似【$y \to F(y) \to G(F(y)) \approx \hat y$】,過程如下:

image-20220725141506141

​   其實這樣就把CycleGAN的核心思想都介紹完了,這裡再貼上論文中關於這部分的一張完整的圖供大家參考:

image-20220725141827484

 

CycleGAN損失函式

其實介紹完理論部分,那麼損失函式就很簡單了,一共有三部分組成,如下表所示:【嗚嗚嗚,這裡編輯的markdown表格在網頁中顯示總是亂碼,大家將就看一下圖片吧🎃】

image.png

  而總的損失為上述三部分之和,公式如下:

$$L(G,F,{D_X},{D_Y}) = {L_{GAN}}(G,{D_Y},X,Y) + {L_{GAN}}(G,{D_X},Y,X) + \lambda {L_{cyc}}(G,F)$$

  其中$\lambda$ 表示迴圈一致損失所佔比重,論文中設定$\lambda$ = 10。

 

CycleGAN影象夏冬轉換案例

​   實驗論文中也給除了Github地址,連線如下:CycleGAN 🍁🍁🍁

​   這裡我就不帶大家一點點的解讀程式碼了,相信你閱讀了我之前的文章看這個程式碼應該能大致瞭解,我之前幾期做過一些程式碼的解讀,但是我自己覺得描述並不算很清晰,有的想要表達的點也沒有表述清楚,所以我覺得程式碼部分大家還是看視訊講解比較高效,但是不論怎樣,閱讀程式碼你一定要自己親自除錯除錯,這樣你會有很大的收穫!!!

​   這裡我就放一張我執行的結果圖片,從夏季轉換到冬季,如下:

Snipaste_2022-07-24_23-28-59

​   可以看出,變換的效果還是不錯的。【注意:我只再Googleclab上訓練了15個epoch就得動了這樣的效果,大家可以增大epoch進行訓練。】

 

論文下載

CycleGAN論文下載 🍁🍁🍁

 

參考連線

精讀CycleGAN論文

生成式對抗網路 (Generative Adversarial Network, GAN) (四) – Cycle GAN

   

如若文章對你有所幫助,那就🛴🛴🛴

         一鍵三連 (1).gif