天天看點

[Pytorch系列-65]:生成對抗網絡GAN - 圖像生成開源項目pytorch-CycleGAN-and-pix2pix - 無監督圖像生成CycleGan的基本原理

第1章 什麼是CycleGan網絡的圖像轉換

1.1 項目在github上的源代碼

GitHub - junyanz/pytorch-CycleGAN-and-pix2pix: Image-to-Image Translation in PyTorch

1.2 圖像轉換執行個體

[Pytorch系列-65]:生成對抗網絡GAN - 圖像生成開源項目pytorch-CycleGAN-and-pix2pix - 無監督圖像生成CycleGan的基本原理
[Pytorch系列-65]:生成對抗網絡GAN - 圖像生成開源項目pytorch-CycleGAN-and-pix2pix - 無監督圖像生成CycleGan的基本原理

(1)環境的輪廓不變,更換顔色,風格 (秋天 - 夏天)

(2)馬的輪廓不變,紋理替換。

(3)風景圖檔的輪廓不變,更換風格(冬天<--->夏天)

共性:保持一張圖檔的輪廓,更換其風格,得到另一張新的圖檔。

而風格來自于一組圖檔的共同特征,即為一組圖檔的風格。

1.3 圖像轉換的總體共性

[Pytorch系列-65]:生成對抗網絡GAN - 圖像生成開源項目pytorch-CycleGAN-and-pix2pix - 無監督圖像生成CycleGan的基本原理

(1)風格學習:網絡能夠學習風格圖檔的共同特征,即風格。

如所有冬天的圖檔的共同特征是“冬天”:

[Pytorch系列-65]:生成對抗網絡GAN - 圖像生成開源項目pytorch-CycleGAN-and-pix2pix - 無監督圖像生成CycleGan的基本原理

 如果斑馬圖檔的共同特征是斑馬:

[Pytorch系列-65]:生成對抗網絡GAN - 圖像生成開源項目pytorch-CycleGAN-and-pix2pix - 無監督圖像生成CycleGan的基本原理

(2)待轉換圖檔

可以是一張,也可以是多張,但他們是互相獨立的,網絡不需要學習待轉換圖檔的公共特征。

隻需要提取待轉換圖檔的各自的特征:即每一張圖檔實際的輪廓。

實際上,不同的圖檔,其輪廓外形是不同的。

(3)輸出圖檔:

​既包含待轉換圖檔的特征(輪廓),也包括風格圖檔組的公共特征(風格)​

(4)輸入風格圖檔和待轉換圖檔的關系

嚴格意義上講CycleGan圖像轉換,不需要輸入圖檔與待轉換圖檔之間有什麼關聯,他們是互相獨立的。即不要求輸入圖檔與待轉換圖檔在形狀上、在背景上有什麼必須相似的地方。即不要求他們之間有某種相似性。

(5)輸入風格圖檔和輸出圖檔的關系

[Pytorch系列-65]:生成對抗網絡GAN - 圖像生成開源項目pytorch-CycleGAN-and-pix2pix - 無監督圖像生成CycleGan的基本原理

CycleGan圖像轉換,不要求輸入風格圖檔與輸出圖檔在輪廓上有什麼相似性。

​輸出圖檔與風格轉換圖檔可以是完全不相同的兩類事物。即不要求上述配對關系。

即可以把風格圖檔的風格,疊加到任意的圖檔上!!!!,形成新的輸出圖檔。

[Pytorch系列-65]:生成對抗網絡GAN - 圖像生成開源項目pytorch-CycleGAN-and-pix2pix - 無監督圖像生成CycleGan的基本原理
[Pytorch系列-65]:生成對抗網絡GAN - 圖像生成開源項目pytorch-CycleGAN-and-pix2pix - 無監督圖像生成CycleGan的基本原理

(6)待轉換圖檔和輸出圖檔的關系

他們之間是有輪廓上相似性,因為輸出圖檔,是對待轉換圖檔的轉換。

如果輸出圖檔不包含待轉換圖檔的輪廓,那麼轉換後的圖檔,展現不出待轉換圖檔,這種轉換沒有太大的意義。

第2章 CycleGan圖像轉換的基本原理

2.1 CycleGan網絡的目标

普通的GAN確定輸出的圖像與真實圖像具備盡可能的相似度,這就導緻,網絡的訓練目的是輸出預真實圖檔B具備相識性,與真實圖檔A沒有關系。即輸出圖檔,與真實圖檔不具備相似性。

很顯然,這不符合我們的目标,任意的輸出,應用場景及其有限。

CycleGan網絡的目标是:

輸出圖檔受輸入圖檔所控,與輸入圖檔之間要有“形似”的關系,而不是天馬行空的輸出。

輸出圖檔,在某些特征上與輸入圖檔A相似,這個相似性稱為“形似”

輸出圖檔,在某些特征上與真實圖檔B相似,這個相似性稱為​“神似”​

2.2 CycleGAN名稱的由來

對輸出與輸入圖檔的相似性檢查,是確定輸出的圖檔與輸入圖檔有明确的對應關系的重要手段。

現在的問題來了:如何檢查輸出與輸入圖檔的相似性呢?

(1)pix2pix的做法

pix2pix是直接通過像素到像素進行檢查的完成的,是以pix2pix的輸出與輸入是顯性的、表象的、強關聯關系,屬于“形似”。

(2)CycleGAN的做法

CycleGAN通過增加還原網絡,首先把輸出圖檔重新還原成輸入圖檔,然後對輸入圖檔與還原後的圖檔進行像素到像素的檢查,確定輸出圖檔與輸入圖檔的相似性。這個還原的過程就是形成了一個閉環,這 就是“CycleGAN”的由來。

雖然,還遠後的圖檔與輸入圖檔,具備像素到像素的顯性的、表象的、強關聯關系,屬于“形似”。

但輸出圖檔與輸入圖檔以及還原後的圖檔并非這種“形似”,而是内在特征的關系。

是以,CycleGAN的輸出圖檔與輸入圖檔之間是隐性、内在的、語義關系。

CycleGAN同時具備如下特征:

  • 具備GAN網絡自由創作的優點
  • 具備pix2pix網絡,輸入對輸出進行控制的優點
  • 克服pix2pix網絡,輸出與輸入隻是“形似”的缺點與不足。
  • 具備了輸出與輸入具備内在特征的相似,得到了“神似”的效果。

2.3 CycleGan網絡的基本架構

[Pytorch系列-65]:生成對抗網絡GAN - 圖像生成開源項目pytorch-CycleGAN-and-pix2pix - 無監督圖像生成CycleGan的基本原理

(1)相對于GAN網絡,CycleGan增加了一個還原網絡。

通過對還原圖檔與原始圖檔的比較,可以確定生成圖檔的準确性以及與輸入圖檔的關聯性。

(2)相對于GAN網絡,CycleGan增加了雙向轉換

為了確定生成網絡和還原網絡的準确性,CycleGan增加了雙向轉換,

即一方面:網絡源真實圖檔-》生成圖檔-》源真實圖檔的轉換,主要驗證創作的準确性。

另一方面:目标真實圖檔-》生成圖檔-》目标真實圖檔的轉換,主要驗證還原的準确性。

2.4 CycleGan網絡的基本工作過程

[Pytorch系列-65]:生成對抗網絡GAN - 圖像生成開源項目pytorch-CycleGAN-and-pix2pix - 無監督圖像生成CycleGan的基本原理

(1) CycleGan的做法

  • 用真實圖檔B對輸出圖檔進行判決,判決生成圖檔是否符合真實圖檔的特征。
  • 用輸入圖檔A自身對輸出圖檔的反向還原的圖檔進行判決(loss最小),確定生成圖檔與源圖檔具備相似性。
  • 這種方法,可以通過還原的方式,保證輸出圖檔與真實圖檔B和真實圖檔A兩者的loss都非常小。
  • 這種方式的結果是:輸出圖檔與真實圖檔B主要特征與核心特征上相似,隻有部分特征與真實圖檔A相似。與真實圖檔的全部相似性是通過還原實作的。這種方式的輸出圖檔是由傾向性的:主體特征與輸入圖檔B相似,部分特征來源于真實圖檔A.
  • 這種方法的關鍵是反向還原。

(2) 使用兩個判決網絡? 

  • 用輸入圖檔A自身對輸出圖檔進行判決
  • 用輸入圖檔B對輸出圖檔進行判決
  • 這種方法使得輸出圖檔同時與輸入圖檔A和B相似。

2.5 CycleGan網絡的訓練 - 生成網絡的訓練

[Pytorch系列-65]:生成對抗網絡GAN - 圖像生成開源項目pytorch-CycleGAN-and-pix2pix - 無監督圖像生成CycleGan的基本原理

(1)生成網絡G-A2B和生成網絡G-B2A的結構是完全一緻的,不同的是一個輸入是源真實圖檔集,一個是目标真實圖檔集。

(2)G-A2B和G-B2A是一起訓練的,其loss函數是整合在一起的。

(3)在訓練G-A2B和G-B2A時,需要鎖定判決網絡D-A2B和D-B2A

(4)最終的loss函數包含4部分

  • G-A2B:判斷網絡對生成圖檔的判決結果(G網絡的目标是騙過判決網絡D-A2B)與1之間的MSE loss。
  • G-A2B:生成圖檔與還原圖檔之間的L1 loss(平均絕對誤差(MAE))
  • G-B2A:判斷網絡對生成圖檔的判決結果(G網絡的目标是騙過判決網絡D-B2A)與1之間MSE loss。
  • G-B2A:生成圖檔與還原圖檔之間的L1 loss(平均絕對誤差(MAE))

2.6 CycleGan網絡的訓練 - 判決網絡的訓練

[Pytorch系列-65]:生成對抗網絡GAN - 圖像生成開源項目pytorch-CycleGAN-and-pix2pix - 無監督圖像生成CycleGan的基本原理
[Pytorch系列-65]:生成對抗網絡GAN - 圖像生成開源項目pytorch-CycleGAN-and-pix2pix - 無監督圖像生成CycleGan的基本原理

(1)判決網絡D-A2B和生成網絡D-B2A的結構是完全一緻的,不同的是一個輸入是源真實圖檔集,一個是目标真實圖檔集。

(2)D-A2B和G-B2A是獨立訓練的,他們有各自獨立的loss函數

  • 判決網絡對生成圖檔的判決結果與“0” 之間的距離, 即判為“假”
  • 判決網絡對真實圖檔的判決結果與“1” 之間的距離, 即判為“真”

繼續閱讀