迈向元宇宙, AI 生成艺术之路 ( No.4 )
《训练自己的 CycleGAN 模型 - -使用PaddlePaddle》1. 說明:簡介CycleGAN模型
⚫CycleGAN 是一種有趣的 AI 模型,它可以用來產生不同風格或材質轉換的一個模型,通常應用於影像對影像的變換,例如將白天拍攝的 照片,轉換成為夜間照片;可以產生一些很酷的效果。
⚫再如照片增強、圖像著色、樣式轉換等。您所需要的只是 X(原圖像 集)和 T(目標圖像集)。除了一般照片的轉換之外,CycleGan 還可以 實現斑馬與馬,貓與狗,西瓜與橘子,夏天與冬天,男人與女人等圖 片之間的轉換。如下圖:
⚫CycleGAN 能夠學習到莫奈(或其他畫家)的全部作品藝術風格,從 而將實現照片的色彩轉換成莫奈的畫風。
⚫從上圖裡,可以看出來,這 CycleGAN 實際上就是兩個 GAN 的結 合。於是就能將 A(馬)轉成 B(斑馬)再轉回 A(馬),如上圖所示。
⚫同時,也能把 B(斑馬)轉成 A(馬)再轉回 B(斑馬),如下圖所示。
⚫其中共包含 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)
⚫數據集的(文件夾)路徑。
⚫其中的/trainA/裡有 8 張 Apple 的圖片。
⚫其中的/trainB/裡有 8 張 Grape 的圖片。
3. 讀取圖片:使用Paddle的Dataset
⚫程式(1):
⚫使用 Paddle的 Dataset、DataLoader 讀取數據集裡的圖片。
⚫執行時,繪出:
4. 觀察D和G的輸入與輸出格式
程式(2):
⚫定義判別器(D)和生成器(G)的 Input/Output Shape。
⚫程式碼:
⚫其中,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)。
⚫ 如下:
5. 展開訓練流程
程式(3):
⚫這是典型的 CycleGAN 模型。
⚫訓練完成時,會自動將模型儲存起來。以便分階段來訓練(待會詳述 之)。
⚫程式碼:
[第 一階段訓練]
⚫第一階段訓練時,請將這指令:
load_model = False
⚫將其設定為:False。表示不讀取既有的模型檔。(因為第一次訓練 時,還沒有模型檔)。
⚫並且,將這指令:
Base = 0
epochs = 5
⚫這是用來設定計數器從 0 算起,並將訓練 5 回合。
⚫可以在螢幕畫面上呈現出目前訓練到第幾回合。
⚫接下來,就可以執行這程式碼,展開訓練了。
⚫會輸出如下:
⚫這顯示了,訓練過程中,其 Loss 值會逐漸下降(縮小)。
⚫總共訓練 5 回合。訓練完畢,就繪出:
⚫而且,訓練完成時,會自動將模型儲存起來。以便分段訓練。
⚫可以看到了,模型檔就儲存在這裡:
⚫可以看到了,模型檔就儲存在這裡:
[第二階段訓練]
⚫此時,請將這指令:
load_model = True
⚫將其設定為:True。表示會基於上一階段所訓練的結果(即模型檔), 繼續訓練下去。所以會去讀取上一階段所儲存的模型檔。
⚫並且,將這指令更改為:
Base = 5
epochs = 10
⚫這是用來設定計數器從 5 算起,並將訓練 10 回合。
⚫可以在螢幕畫面上呈現出目前訓練到第幾回合。
⚫接下來,就可以再一次執行這程式碼,展開第二階段的訓練了。
⚫訓練時會輸出:
⚫這顯示了,訓練過程中,其 Loss 值會持續地下降(縮小)。
⚫訓練完成時,就繪出:
⚫而且,會自動更新模型檔,以便支持下一階段的訓練。
[第三階段訓練]
⚫第一階段訓練時,請將這指令:
load_model = True
⚫將其設定為:True。表示會基於上一階段所訓練的結果(即模型檔), 繼續訓練下去。所以會去讀取上一階段所儲存的模型檔。
⚫並且,將這指令,更改為:
Base = 15
epochs = 10
⚫這是用來設定計數器從 15 算起,並將訓練 10 回合。
⚫可以在螢幕畫面上呈現出目前訓練到第幾回合。
⚫接下來,就可以再一次執行這程式碼,展開第二階段的訓練了。
⚫訓練時會輸出:
⚫這顯示了,訓練過程中,其 Loss 值會持續地下降(縮小)。
⚫訓練完成時,就繪出:
⚫CycleGAN 的優秀之處是:雙方彩繪風格(包括顏色)互換。
⚫大功告成。
END◆◆◆
神鹰AI团队准备了10支《彩绘GAN模型》,更多paddlepaddle的讨论与知识也可关注公众号
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)