AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle

迈向元宇宙, AI 生成艺术之路 ( No.4 )

《训练自己的 CycleGAN 模型 - -使用PaddlePaddle》

1. 說明:簡介CycleGAN模型
 ⚫CycleGAN 是一種有趣的 AI 模型,它可以用來產生不同風格或材質轉換的一個模型,通常應用於影像對影像的變換,例如將白天拍攝的 照片,轉換成為夜間照片;可以產生一些很酷的效果。
⚫再如照片增強、圖像著色、樣式轉換等。您所需要的只是 X(原圖像 集)和 T(目標圖像集)。除了一般照片的轉換之外,CycleGan 還可以 實現斑馬與馬,貓與狗,西瓜與橘子,夏天與冬天,男人與女人等圖 片之間的轉換。如下圖:
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第1张图片
 ⚫CycleGAN 能夠學習到莫奈(或其他畫家)的全部作品藝術風格,從 而將實現照片的色彩轉換成莫奈的畫風。
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第2张图片
⚫從上圖裡,可以看出來,這 CycleGAN 實際上就是兩個 GAN 的結 合。於是就能將 A(馬)轉成 B(斑馬)再轉回 A(馬),如上圖所示。
⚫同時,也能把 B(斑馬)轉成 A(馬)再轉回 B(斑馬),如下圖所示。
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第3张图片
⚫其中共包含 4 個子模型:Discriminator A、Discriminator B、 Generator A2B、Generator B2A 。總共是兩個生成器,分別用來產 生假 A 與假 B;而兩個判別器,一個用來辨別 A 與假 A,另一個用 來辨別 B與假 B。
⚫在上圖裡,但實際上就只是兩個網路的結合,分別是把 A(馬)轉成 B(斑馬)再轉回 A(馬),把 B(斑馬)轉成 A(馬)再轉回 B(斑 馬)。
⚫附帶說明上面的示意圖看起來是上下兩個架構,但實際上這兩個是同 一個架構,注意 Discriminator A、B、Generator A2B、B2A 都是 同一個人,只是整個網路在不同時間點有不同的 input 跟 output,
⚫所以總共是兩個生成器(以 G 和 F 表示之)。
 首先步驟-1,把 A(馬圖像)輸入給 G,由 G 來生成假 B(假斑馬)。此 時,也把假 B輸入給 F,由 F 來生成假 A(假馬)。
 接著步驟-2,把 B(斑馬圖像)輸入給 F,由 F 來生成假 A(假馬)。此 時,也把假 A 輸入給 G,由 G 來生成假 B(假斑馬)。
 然後重複上述的兩個步驟,一直循環訓練下去。
⚫而且,這 CycleGAN 中有 2 个判别器,分别用来判断输入的馬和斑 馬图像是真或是假。
⚫本文使用 Pytorch 框架,來完成 Cycle GAN 訓練流程。
⚫CycleGAN 的優秀之處是:雙方彩繪風格(包括顏色)互換。

2. 準備訓練數據集(Dataset)
⚫數據集的(文件夾)路徑。
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第4张图片
⚫其中的/trainA/裡有 8 張 Apple 的圖片。
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第5张图片
⚫其中的/trainB/裡有 8 張 Grape 的圖片。
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第6张图片
3. 讀取圖片:使用Paddle的Dataset
⚫程式(1):
⚫使用 Paddle的 Dataset、DataLoader 讀取數據集裡的圖片。
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第7张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第8张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第9张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第10张图片
⚫執行時,繪出:
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第11张图片
4. 觀察D和G的輸入與輸出格式
程式(2):
⚫定義判別器(D)和生成器(G)的 Input/Output Shape。
⚫程式碼:
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第12张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第13张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第14张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第15张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第16张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第17张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第18张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第19张图片
⚫其中,real_A 是原圖。
⚫指令:z_da = D_A(real_A)
⚫是把 real_A 給判別器 D_A,然後由 D_A 輸出預測值:z_da。
⚫指令: fake_A = G_BA(real_B)
⚫以 real_B為條件,由 G_BA 生成 A 假品。
⚫於是,輸出了 real_A、z_da 和 fake_A 的格式(Shape)。
⚫ 如下:
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第20张图片
5. 展開訓練流程
程式(3):
⚫這是典型的 CycleGAN 模型。
⚫訓練完成時,會自動將模型儲存起來。以便分階段來訓練(待會詳述 之)。
⚫程式碼:
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第21张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第22张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第23张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第24张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第25张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第26张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第27张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第28张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第29张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第30张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第31张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第32张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第33张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第34张图片
[第 一階段訓練]
⚫第一階段訓練時,請將這指令:
load_model = False
⚫將其設定為:False。表示不讀取既有的模型檔。(因為第一次訓練 時,還沒有模型檔)。
⚫並且,將這指令:
Base = 0
epochs = 5
⚫這是用來設定計數器從 0 算起,並將訓練 5 回合。
⚫可以在螢幕畫面上呈現出目前訓練到第幾回合。
⚫接下來,就可以執行這程式碼,展開訓練了。
⚫會輸出如下:
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第35张图片
⚫這顯示了,訓練過程中,其 Loss 值會逐漸下降(縮小)。
⚫總共訓練 5 回合。訓練完畢,就繪出:
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第36张图片
⚫而且,訓練完成時,會自動將模型儲存起來。以便分段訓練。
⚫可以看到了,模型檔就儲存在這裡:
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第37张图片
⚫可以看到了,模型檔就儲存在這裡:

[第二階段訓練]
⚫此時,請將這指令:
load_model = True
⚫將其設定為:True。表示會基於上一階段所訓練的結果(即模型檔), 繼續訓練下去。所以會去讀取上一階段所儲存的模型檔。
⚫並且,將這指令更改為:
Base = 5
epochs = 10
⚫這是用來設定計數器從 5 算起,並將訓練 10 回合。
⚫可以在螢幕畫面上呈現出目前訓練到第幾回合。
⚫接下來,就可以再一次執行這程式碼,展開第二階段的訓練了。
⚫訓練時會輸出:
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第38张图片
⚫這顯示了,訓練過程中,其 Loss 值會持續地下降(縮小)。
⚫訓練完成時,就繪出:
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第39张图片
⚫而且,會自動更新模型檔,以便支持下一階段的訓練。

[第三階段訓練]
⚫第一階段訓練時,請將這指令:
load_model = True
⚫將其設定為:True。表示會基於上一階段所訓練的結果(即模型檔), 繼續訓練下去。所以會去讀取上一階段所儲存的模型檔。
⚫並且,將這指令,更改為:
Base = 15
epochs = 10
⚫這是用來設定計數器從 15 算起,並將訓練 10 回合。
⚫可以在螢幕畫面上呈現出目前訓練到第幾回合。
⚫接下來,就可以再一次執行這程式碼,展開第二階段的訓練了。
⚫訓練時會輸出:
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第40张图片
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第41张图片
⚫這顯示了,訓練過程中,其 Loss 值會持續地下降(縮小)。
⚫訓練完成時,就繪出:
AI生成藝術(No.4):訓練自己的CycleGAN模型 - -使用Paddle_第42张图片
⚫CycleGAN 的優秀之處是:雙方彩繪風格(包括顏色)互換。

⚫大功告成。

END

◆◆◆

神鹰AI团队准备了10支《彩绘GAN模型》,更多paddlepaddle的讨论与知识也可关注公众号,我们一起探索迈向元宇宙,AI生成艺术之路,欢迎留言、讨论与指教哦~~

你可能感兴趣的:(人工智能,Paddlepaddle,人工智能,paddlepaddle,生成对抗网络,图像处理)