第1章 概述
1.1 代碼架構與總體思路
1.2 本章基本思路
(1)Pycharm進行調試,替代指令行或Jupter
(2)選擇所需要硬碟空間小的資料進行測試
(3)熟悉pytorch-CycleGAN-and-pix2pix項目的使用
(4)熟悉CycleGAN模型訓練
1.3 訓練方式
-
- 從頭開始訓練
- 從預預訓練模型開始訓練(官網提供的預訓練模型隻包括G網絡,不包括D網絡)
- 從上次訓練結果開始訓練
第2章 測試步驟
第1步:下載下傳或克隆pytorch-CycleGAN-and-pix2pix所有代碼
如果已經完成,可以跳過此步驟。
(1)Linux 指令行方式:!git clone https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
(2)Windows浏覽器下載下傳:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
備注:
- 可以把代碼下載下傳或拷貝到jupter的工作目錄中,以便後續可以通過jupter運作代碼。
第2步:切換目前目錄
(1)運作方式
-
- Windows 指令行方式:cd xxx
- jupter方式:
import os
os.chdir('pytorch-CycleGAN-and-pix2pix/')
- Pycharm: 把工程檔案copy到Pycharm工作目錄中即可
第3步:安裝依賴檔案(可視化工具)
如果已經完成,可以跳過此步驟。
- Windows 指令行方式
pip install -r requirements.txt
- Jupter方式
!pip install -r requirements.txt
torch>=0.4.1
torchvision>=0.2.1
dominate>=2.3.1
visdom>=0.1.8.3
第4步:下載下傳CycleGAN資料集
(1)下載下傳方式
- Linux 指令行方式
bash ./datasets/download_pix2pix_dataset.sh facades
- Jupter方式
!bash ./datasets/download_pix2pix_dataset.sh facades
- Windows浏覽器方式
根據./datasets/download_cyclegan_dataset.sh的内容,擷取資料集URL, 通過URL手工下載下傳:
https://people.eecs.berkeley.edu/~taesung_park/CycleGAN/datasets/
備注:
- 這裡選擇horse2zebra:馬到斑馬的轉換。
(2)資料集的存放路徑
- 存放路徑:pytorch-CycleGAN-and-pix2pix\datasets
備注:必須同名,不能改名
(3)支援的小型資料集
-
- summer2winter_yosemite:夏天轉換成冬天
- horse2zebra:馬到斑馬的轉換
- apple2orange:蘋果到橙子的轉換
- facades:建築物的轉換
- mini:min資料的馬到斑馬的轉換
第5步:下載下傳預訓練模型
(1)下載下傳方式
- Linux指令行方式
bash ./scripts/download_cyclegan_model horse2zebra
- jupter方式
!bash ./scripts/download_cyclegan_model horse2zebra
- Windows方式
根據download_cyclegan_model.sh腳步的内容,擷取連結:
http://efrosgans.eecs.berkeley.edu/cyclegan/pretrained_models/
(2)存放路徑
./checkpoints/{xxx}/latest_net_G.pth
xxx為模型名稱。
備注:
-
- 需要把模型的名稱,改為latest_net_G.pth,并存放在{xxx}目錄中,這與使用預訓練模型進行測試是不一樣的。
- 官方的預訓練模型,隻有G網絡的參數,沒有D網絡的參數,是以基本上需要重新訓練。
- cyclegan模型分為生成模型與還原模型,展現在不同的方向上。
第6步:啟動可視化工具visdom
(1)啟動visdom server
conda info -e
conda activate pytorch-gpu-os
python -m visdom.server
(2)啟動visdom Client
http://localhost:8097
第7步:模型訓練
(1)CPU方式(僅用于學習代碼)運作
--dataroot ./datasets/horse2zebra --name horse2zebra --model cycle_gan --gpu_ids -1 --niter_decay 1 --niter 1 --display_freq 1 --update_html_freq 1 --print_freq 10 --save_epoch_freq 5 --save_latest_freq 100
-
- --gpu_ids -1:表示使用CPU進行訓練。
- -print_freq 1:每疊代多少次,在終端上列印一次提示資訊, 預設100.
- -display_freq 1:每疊代多少次,在visdom用戶端可視化一次圖像,預設400
- --update_html_freq 1:每疊代多少次,更新一次html輸出檔案,預設1000.
- --save_epoch_freq 5: 每疊代多少次,存儲一次模型參數
- --save_latest_freq 100:每疊代多少次,存儲一次模型參數
- --niter 1:疊代的epoch次數, 預設100
- --niter_decay 1:疊代的epoch次數,對學習率進行一次衰減,預設100,總的epoc=niter + niter_decay + 1
備注:
-
- 該項目,采用GPU訓練時,需要>8G的GPU記憶體,如果GPU條件不滿足,在學習代碼流程時,可以使用CPU進行訓練
- 之是以修改這些預設參數,是因為CPU的訓練太慢,不利于學習的效率。
(2)GPU方式(适用于正式訓練模型)
--dataroot ./datasets/horse2zebra --name horse2zebra --model cycle_gan
備注:
在GPU的情況下,使用預設的參數。
(3)重頭訓練與基于先前的訓練結果繼續訓練
--continue_train :如果設定,則基于先前的訓練結果繼續訓練,如果不設定,則從頭開始訓練。
第8步:效果展示
(1)控制台列印顯示
initialize network with normal
initialize network with normal
initialize network with normal
model [CycleGANModel] was created
---------- Networks initialized -------------
[Network G_A] Total number of parameters : 11.378 M
[Network G_B] Total number of parameters : 11.378 M
[Network D_A] Total number of parameters : 2.765 M
[Network D_B] Total number of parameters : 2.765 M
-----------------------------------------------
Setting up a new session...
create web directory ./checkpoints\horse2zebra\web...
(epoch: 1, iters: 10, time: 7.274, data: 2.156) D_A: 0.963 G_A: 1.139 cycle_A: 5.456 idt_A: 1.779 D_B: 1.407 G_B: 1.843 cycle_B: 3.542 idt_B: 2.495
(epoch: 1, iters: 20, time: 7.448, data: 0.000) D_A: 1.839 G_A: 2.499 cycle_A: 6.618 idt_A: 1.988 D_B: 0.768 G_B: 0.592 cycle_B: 3.989 idt_B: 3.224
......
(2)visdom圖形化顯示
- loss
- 訓練結果
第9步:輸出檔案
(1)圖檔檔案:
目錄:
- pytorch-CycleGAN-and-pix2pix\checkpoints\horse2zebra\web\images
(2)模型檔案:
目錄:
- pytorch-CycleGAN-and-pix2pix\checkpoints\horse2zebra\
-
- latest_net_D_A.pth
- latest_net_D_B.pth
- latest_net_G_A.pth
- latest_net_G_B.pth