第1章 什麼是CycleGan網絡的圖像轉換
1.1 項目在github上的源代碼
GitHub - junyanz/pytorch-CycleGAN-and-pix2pix: Image-to-Image Translation in PyTorch
1.2 圖像轉換執行個體
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiATN381dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cGcq5yM0ATN2IGNmhTYxUGZmFzYxYzXzMjNxADMyIzLcJTMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.jpg)
(1)環境的輪廓不變,更換顔色,風格 (秋天 - 夏天)
(2)馬的輪廓不變,紋理替換。
(3)風景圖檔的輪廓不變,更換風格(冬天<--->夏天)
共性:保持一張圖檔的輪廓,更換其風格,得到另一張新的圖檔。
而風格來自于一組圖檔的共同特征,即為一組圖檔的風格。
1.3 圖像轉換的總體共性
(1)風格學習:網絡能夠學習風格圖檔的共同特征,即風格。
如所有冬天的圖檔的共同特征是“冬天”:
如果斑馬圖檔的共同特征是斑馬:
(2)待轉換圖檔
可以是一張,也可以是多張,但他們是互相獨立的,網絡不需要學習待轉換圖檔的公共特征。
隻需要提取待轉換圖檔的各自的特征:即每一張圖檔實際的輪廓。
實際上,不同的圖檔,其輪廓外形是不同的。
(3)輸出圖檔:
既包含待轉換圖檔的特征(輪廓),也包括風格圖檔組的公共特征(風格)
(4)輸入風格圖檔和待轉換圖檔的關系
嚴格意義上講CycleGan圖像轉換,不需要輸入圖檔與待轉換圖檔之間有什麼關聯,他們是互相獨立的。即不要求輸入圖檔與待轉換圖檔在形狀上、在背景上有什麼必須相似的地方。即不要求他們之間有某種相似性。
(5)輸入風格圖檔和輸出圖檔的關系
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網絡的基本架構
(1)相對于GAN網絡,CycleGan增加了一個還原網絡。
通過對還原圖檔與原始圖檔的比較,可以確定生成圖檔的準确性以及與輸入圖檔的關聯性。
(2)相對于GAN網絡,CycleGan增加了雙向轉換
為了確定生成網絡和還原網絡的準确性,CycleGan增加了雙向轉換,
即一方面:網絡源真實圖檔-》生成圖檔-》源真實圖檔的轉換,主要驗證創作的準确性。
另一方面:目标真實圖檔-》生成圖檔-》目标真實圖檔的轉換,主要驗證還原的準确性。
2.4 CycleGan網絡的基本工作過程
(1) CycleGan的做法
-
- 用真實圖檔B對輸出圖檔進行判決,判決生成圖檔是否符合真實圖檔的特征。
- 用輸入圖檔A自身對輸出圖檔的反向還原的圖檔進行判決(loss最小),確定生成圖檔與源圖檔具備相似性。
- 這種方法,可以通過還原的方式,保證輸出圖檔與真實圖檔B和真實圖檔A兩者的loss都非常小。
- 這種方式的結果是:輸出圖檔與真實圖檔B主要特征與核心特征上相似,隻有部分特征與真實圖檔A相似。與真實圖檔的全部相似性是通過還原實作的。這種方式的輸出圖檔是由傾向性的:主體特征與輸入圖檔B相似,部分特征來源于真實圖檔A.
- 這種方法的關鍵是反向還原。
(2) 使用兩個判決網絡?
-
- 用輸入圖檔A自身對輸出圖檔進行判決
- 用輸入圖檔B對輸出圖檔進行判決
- 這種方法使得輸出圖檔同時與輸入圖檔A和B相似。
2.5 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網絡的訓練 - 判決網絡的訓練
(1)判決網絡D-A2B和生成網絡D-B2A的結構是完全一緻的,不同的是一個輸入是源真實圖檔集,一個是目标真實圖檔集。
(2)D-A2B和G-B2A是獨立訓練的,他們有各自獨立的loss函數
-
- 判決網絡對生成圖檔的判決結果與“0” 之間的距離, 即判為“假”
- 判決網絡對真實圖檔的判決結果與“1” 之間的距離, 即判為“真”