• 沒有找到結果。

第四章 影像轉換與影像分割模型之結果分析

附錄 2 程式碼介紹

國網中心(TWGC)的訓練環境(container)建立與使用 方式

首先登入持有的帳號後會進入下圖頁面:

接著點選左上角「+」用來新增 container,會得到如下頁面:

設定好圖中的各資訊,按「下一步|新建」即可。

接著介紹如何使用建好的container:

首先建立成功後回到「服務列表」,可以看到創建好的 container,並點選 Jupyter 欄的連線,如圖中紅框所示:

之後會切換至Jupyter notebook 的使用介面,如下圖所示,其中只有在紅色方框

「lustre」資料夾內的資料是只有自己看的到,而其他共同計劃使用者是看不到 的,因此建議所有資料、網路架構等都放在此資料夾。

最後,點選右方的綠色方框「New」即可選擇建立不同類型的檔案,有 Python 檔(以 Jupyter notebook 的使用介面呈現,為.ipynb 檔)、Text File (可創建後重新命 名為.py 檔,即為一般 Terminal 運行的 Python 程式檔)、Folder 與 Terminal (終端)。

通常寫程式時會以.py 檔進行編碼,接著再以 Terminal 運行程式,輔助 Jupyter notebook 的介面檢查程式碼;而在 Terminal 內,要切換成一般 Linux 系統的 Terminal 介面,必須先輸入「bash」才能運作,如下圖所示。

影像轉換模型

運行程式進行訓練的代碼為:

python train.py model cycle_gan input_nc 1 niter 300 niter_decay 0 --display_port 8888 --plot_freq 150 --save_freq 1 --save_epoch_freq 1 --display_freq 400 --dataroot ../datasets_raw/OctHE --nlambda_A 1.0 --nlambda_B 1.0 --unet_w_A 3.0 --unet_w_B 3.0 --vgg_w 0.5 --vgg_out relu2_2 --name OCT2HE

參數選項介紹:

--model 選擇模型運作模式(訓練時輸入 cycle_gan 表示使用 CycleGAN 模型架構 作訓練);--input_nc 輸入使用的訓練影像的 channel 數;--niter 訓練的總周期數;

--niter_decay 從第幾個周期開始線性的降低 learning rate 的值至 0;--display_port 使用visdom.server 的哪個連接埠在網站上顯示結果圖;--plot_freq 每多少次疊代 顯示一次損失值在visdom.server 上;--save_freq 每多少個周期存一次模型參數;

--display_freq 每多少次疊代顯示一次轉換結果圖在 visdom.server 上;--dataroot 訓練的影像資料所在位置;--nlambda_A 針對 OCT 轉 H&E 方向的循環一致性係 數;--nlambda_B 針對 H&E 轉 OCT 方向的循環一致性係數;--unet_w_A 針對 OCT 轉 H&E 方向限制邊界一致性的損失係數(α);--unet_w_B 針對 H&E 轉 OCT 方向限制邊界一致性的損失係數(α);--vgg_w 針對雙方向限制細胞核一致性的損 失係數(β);--vgg_out 選取哪個卷積層的特徵圖作限制;--name 訓練的模型名稱。

程式執行流程:

詳細程式運作流程:

運行程式進行驗證與測試的代碼:

python test.py --dataroot ../datasets_testing/OctHE/testA –name

GAN_vgg1.0relu3.1_unet3.0_nnoisecycle5and0 model test no_dropout --model_suffix _A --num_test 500 --input_nc 1 --epoch 100

參數選項介紹:

--dataroot 測試的影像資料所在位置;--name 選定用於測試的模型名稱;--model 選擇模型運作模式(測試或驗證時輸入 test);--no_dropout 測試時不需要隨機丟失 一些神經元;--model_suffix 選擇輸入模型作測試的資料集(OCT 影像(_A)與 H&E 影像(_B));--num_test 測試多少張影像;--input_nc 輸入使用的訓練影像的 channel 數;--epoch 使用哪一個周期的模型作驗證或測試。

程式執行流程:

硬體配置 (訓練與測試皆相同):

Intel® Xeon® Gold 6154 CPU @ 3.00GHz 與 NVDIA Tesla V100, 16GB 訓練時間

因為訓練時間與訓練集影像數量有關,因此以平均一張影像的訓練時間估算的話,

訓練一張影像需時0.4 秒。

而完整訓練一個周期即訓練2634 張影像,因此需耗時 17 分 34 秒。

在本研究中,影像轉換模型要訓練完全則是要訓練約200 個週期,需耗時 2 天 10 小時32 分。

測試時間:

以測試一張影像的時間估算,因此測試一張影像需時0.15 秒。

影像分割模型

運行程式進行訓練的代碼為:

python main.py --mode train --model_name OCTsegmentation –epochs 20 –lr 2e-4 參數選項介紹:

--mode 選擇模型運作模式(訓練時輸入 train,在訓練同時會自動進行驗證);--model_name 訓練的模型名稱;--epochs 訓練的總周期數;--lr 訓練的學習速度 程式執行流程:

詳細程式運作流程:

運行程式進行測試的代碼:

python main.py --mode test --model_name OCTsegmentation 參數選項介紹:

--mode 選擇模型運作模式(測試時輸入 test);--model_name 想要測試的模型名稱 程式執行流程:

硬體配置 (訓練與測試皆相同):

Intel® Xeon® Gold 6154 CPU @ 3.00GHz 與 NVDIA Tesla V100, 16GB 訓練時間:

兩種模型各自訓練一張影像需時0.053 秒。

而完整訓練一個周期的時間,針對OCT 的部分需耗時 2 分 19 秒;針對 H&E 影 像則是耗時46.43 秒。

訓練完全所需時間,針對 OCT 的部分需耗時 46 分 20 秒;針對 H&E 影像則是 耗時15 分 29 秒。

測試時間:

以測試一張影像的時間估算,因此測試一張影像需時0.945 秒。