對抗生成網路GAN系列——CycleGAN簡介及圖片春冬變換案例
theme: fancy
本文為稀土掘金技術社群首發簽約文章,14天內禁止轉載,14天后未獲授權禁止轉載,侵權必究!
🍊作者簡介:禿頭小蘇,致力於用最通俗的語言描述問題
🍊往期回顧:對抗生成網路GAN系列——GAN原理及手寫數字生成小案例 對抗生成網路GAN系列——DCGAN簡介及人臉影象生成案例
🍊近期目標:寫好專欄的每一篇文章
🍊支援小蘇:點贊👍🏼、收藏⭐、留言📩
對抗生成網路GAN系列——CycleGAN簡介及圖片春冬變換案例
寫在前面
在前面我們已經介紹過了最原始的GAN網路和DCGAN,這篇文章我將來為大家介紹CycleGAN,並且基於CycleGAN實現一個小demo——將一張圖片進行季節轉換,即從冬天變換到夏天和從夏天變換到冬天。🍹🍹🍹
大家已經看到了CycleGAN,應該對GAN已經有了一定的瞭解,因此我不會對GAN的原理進行詳細的講解,只會敘述CycleGAN的獨到之處。如若你還對GAN的原理不夠清楚,下列兩篇文章或許能幫到您:
在正式講解之前,我給大家先展示一下CycleGAN可以做哪些事:
普通馬變斑馬
各種風格轉換
可以看到,使用CycleGAN可以實現各種各樣的風格轉換,是非常有意思的一個演算法。大家準備好了嘛,下面就正式發車了。🚖🚖🚖
CycleGAN核心思想
這一部分我會來介紹CycleGAN的核心思想,相信你瞭解後會和我有一樣的感覺,那就是這個設計太巧妙了!!!🌼🌼🌼
首先我們還是來介紹一下這篇論文的全稱—— Unpaired Image-to-Image Translationusing Cycle-Consistent Adversarial Networks
,即非成對影象轉換迴圈一致性對抗網路。我們一點點的來解釋,首先什麼是非對稱影象呢?其實啊,這裡的非對稱影象指的是我們的訓練樣本是不相關的。在之前的一些GAN轉換實驗中,往往都需要成對的圖片資料,例如pix2pix,而成對的圖片資料是很難獲取的,於是CycleGAN對資料的要求就大大降低,不需要成對影象,即非對稱影象,這樣就讓CycleGAN的應用場景就變得非常豐富。下圖展示了對稱資料和非對稱資料的區別:
接下來再來講講什麼是迴圈一致性對抗網路?這個就是本文的核心思想,聽懂這個那麼這篇論文你就搞懂了,這就為大家慢慢道來!!!🌼🌼🌼
我們先來明確一下這篇文章的目標,即有兩個域的影象,分別為域X和域Y,例如域X表示夏季圖片、域Y表示冬季圖片,現期望將這兩個域的圖片互相轉換,即輸入域X的夏季圖片生成器輸出域Y的冬季圖片或輸入域Y的冬季圖片生成器輸出域X的夏季圖片。我們來考慮考慮傳統的GAN網路能否完成這項任務,示意圖如下:
域X的圖片經生成器G不斷生成圖片G(x),而$D_Y$ 鑑別生成的圖片和域Y中的圖片,這樣就構成了一個GAN網路,這樣看似乎也可以完成任務,會將域X中的圖片不斷像域Y轉換,但是呢,大家能否看出這裡似乎還是存在著一些漏洞,如下圖所示:
上圖我們的確是將域X中圖片轉換成了域Y中冬季圖片風格,但是你會發現轉換後的圖片和原始圖片沒有任何關係,即GAN網路只學到了把一張夏季圖片傳化為冬季圖片,但至於轉換後的冬季圖片和原始夏季圖片有沒有關係沒有學習到,這樣的話這個網路肯定是不符合實際要求的。那麼CycleGAN就提出了迴圈一致性網路,如下圖所示:
現對上圖做相關解釋,首先我們先對相關字母做一定了解,如下表所示:
| $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$】,過程如下:
其實這樣就把CycleGAN的核心思想都介紹完了,這裡再貼上論文中關於這部分的一張完整的圖供大家參考:
CycleGAN損失函式
其實介紹完理論部分,那麼損失函式就很簡單了,一共有三部分組成,如下表所示:【嗚嗚嗚,這裡編輯的markdown表格在網頁中顯示總是亂碼,大家將就看一下圖片吧🎃】
而總的損失為上述三部分之和,公式如下:
$$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 🍁🍁🍁
這裡我就不帶大家一點點的解讀程式碼了,相信你閱讀了我之前的文章看這個程式碼應該能大致瞭解,我之前幾期做過一些程式碼的解讀,但是我自己覺得描述並不算很清晰,有的想要表達的點也沒有表述清楚,所以我覺得程式碼部分大家還是看視訊講解比較高效,但是不論怎樣,閱讀程式碼你一定要自己親自除錯除錯,這樣你會有很大的收穫!!!
這裡我就放一張我執行的結果圖片,從夏季轉換到冬季,如下:
可以看出,變換的效果還是不錯的。【注意:我只再Googleclab上訓練了15個epoch就得動了這樣的效果,大家可以增大epoch進行訓練。】
論文下載
CycleGAN論文下載 🍁🍁🍁
參考連線
生成式對抗網路 (Generative Adversarial Network, GAN) (四) – Cycle GAN
如若文章對你有所幫助,那就🛴🛴🛴
- 兔年到了,一起來寫個春聯吧
- CV攻城獅入門VIT(vision transformer)之旅——VIT程式碼實戰篇
- 對抗生成網路GAN系列——GANomaly原理及原始碼解析
- 對抗生成網路GAN系列——WGAN原理及實戰演練
- CV攻城獅入門VIT(vision transformer)之旅——近年超火的Transformer你再不瞭解就晚了!
- 對抗生成網路GAN系列——DCGAN簡介及人臉影象生成案例
- 對抗生成網路GAN系列——CycleGAN簡介及圖片春冬變換案例
- 對抗生成網路GAN系列——AnoGAN原理及缺陷檢測實戰
- 目標檢測系列——Faster R-CNN原理詳解
- 目標檢測系列——Fast R-CNN原理詳解
- 目標檢測系列——開山之作RCNN原理詳解
- 【古月21講】ROS入門系列(4)——引數使用與程式設計方法、座標管理系統、tf座標系廣播與監聽的程式設計實現、launch啟動檔案的使用方法
- 使用kitti資料集實現自動駕駛——繪製出所有物體的行駛軌跡
- 使用kitti資料集實現自動駕駛——釋出照片、點雲、IMU、GPS、顯示2D和3D偵測框
- 基於pytorch搭建ResNet神經網路用於花類識別
- 基於pytorch搭建GoogleNet神經網路用於花類識別
- 基於pytorch搭建VGGNet神經網路用於花類識別
- UWB原理分析
- 論文閱讀:RRPN:RADAR REGION PROPOSAL NETWORK FOR OBJECT DETECTION IN AUTONOMOUS
- 凸優化理論基礎2——凸集和錐