NiftyNet開源平台的使用
NiftyNet基礎架構是使研究人員能夠快速開發和分發用於分割、回歸、圖像生成和表示學習應用程序,或將平台擴展到新的應用程序的深度學習解決方案。
詳細介紹請見: (
https://www.cnblogs.com/zhhfan/p/9800473.html)
官網 ( https://niftynet.readthedocs.io/en/latest/config_spec.html)
官網 ( https://niftynet.readthedocs.io/en/latest/config_spec.html)
NiftyNet工作流可以由NiftyNet應用程序和配置文件完全指定。
運行工作流的命令是:
使用train指令表明想要使用提供的數據更新已存在的網絡模型,使用inference將加載已存在的網絡模型根據提供的數據生成響應。-c 后跟配置文件路徑,-a 跟將要import的應用種類。
運行工作流的命令是:
python net_run.py [train|inference|evaluation] -c <path_to/config.ini> -a <application>
使用train指令表明想要使用提供的數據更新已存在的網絡模型,使用inference將加載已存在的網絡模型根據提供的數據生成響應。-c 后跟配置文件路徑,-a 跟將要import的應用種類。
application參數
圖像分割
圖像回歸
自動編碼
生成對抗網絡(GANs)
net_run命令也支持命令行參數,以`--<name> <value>`或`--<name>=<value>`的形式表示。輸入的參數將取代系統默認的和配置文件中的參數。
圖像分割
net_segment -c ...
圖像回歸
net_regress -c ...
自動編碼
net_autoencoder -c ...
生成對抗網絡(GANs)
net_gan -c ...
net_run命令也支持命令行參數,以`--<name> <value>`或`--<name>=<value>`的形式表示。輸入的參數將取代系統默認的和配置文件中的參數。
配置文件
每個網絡想要運行必須包含一個config.ini配置文件,用來設置訓練/測試所用的全部參數,詳細如下:
每個配置文件中必須包含三個sections:
* [SYSTEM]
* [NETWORK]
* [APPLICATION]
每個配置文件中必須包含三個sections:
* [SYSTEM]
* [NETWORK]
* [APPLICATION]
如果train行為被需要,則`[TRAINING]`section需要被定義,同樣,如果inference行為被需要,則需要定義`[INFERENCE]`。
[APPLICATION]由自己定制,可以使用的有:
* `[GAN]` -- 生成對抗網絡
* `[SEGMENTATION]` -- 分割網絡
* `[REGRESSION]` -- 回歸網絡
* `[AUTOENCODER]` -- 自動編碼網絡
[APPLICATION]由自己定制,可以使用的有:
* `[GAN]` -- 生成對抗網絡
* `[SEGMENTATION]` -- 分割網絡
* `[REGRESSION]` -- 回歸網絡
* `[AUTOENCODER]` -- 自動編碼網絡
每個section的參數
[Input data source]
* csv_file: 輸入圖像路徑
* path_to_search: 搜索圖像的單個或多個文件,如果有多個用逗號分開
* filename_contains: 匹配文件名的關鍵詞
* filename_not_contains: 排除文件名的關鍵詞
* filename_removefromid: 從文件命中抽取主題id的正則表達式,被匹配的模式將從文件名中移除並生成主題id。
* interp_order: 插值法,當設定采樣方法為resize時,需要該參數對圖片進行上采樣或下采樣,0表示最近插值,1表示雙線性插值,3表示三次樣條插值,默認為3
* pixdim: 如果被指定,輸入volum在被喂給網絡之前將被重采樣成voxel尺寸
* axcodes: 如果被指定,輸入volum在被喂給網絡之前將被調整為坐標碼(axes code)
* spatial_window_size: 輸入到網絡中的圖片尺寸,需指明三個維度,第一個和第二個分別表示圖片的長和寬,第三個如果為1表示使用2d卷積,否則使用3d卷積
* loader: 圖片讀取器,默認值None將嘗試所有可得到的讀取器
讀取器支持的類型有:
nibabel 支持.nii醫學文件格式
simpleitk 支持.dcm和.mhd格式的醫療圖像
opencv 支持.jpg等常見圖像,讀取后通道順序為BGR
skimage 支持.jpg等常見圖像
pillow 支持.jpg等常見圖像,讀取后通道順序為RGB
* csv_file: 輸入圖像路徑
* path_to_search: 搜索圖像的單個或多個文件,如果有多個用逗號分開
* filename_contains: 匹配文件名的關鍵詞
* filename_not_contains: 排除文件名的關鍵詞
* filename_removefromid: 從文件命中抽取主題id的正則表達式,被匹配的模式將從文件名中移除並生成主題id。
* interp_order: 插值法,當設定采樣方法為resize時,需要該參數對圖片進行上采樣或下采樣,0表示最近插值,1表示雙線性插值,3表示三次樣條插值,默認為3
* pixdim: 如果被指定,輸入volum在被喂給網絡之前將被重采樣成voxel尺寸
* axcodes: 如果被指定,輸入volum在被喂給網絡之前將被調整為坐標碼(axes code)
* spatial_window_size: 輸入到網絡中的圖片尺寸,需指明三個維度,第一個和第二個分別表示圖片的長和寬,第三個如果為1表示使用2d卷積,否則使用3d卷積
* loader: 圖片讀取器,默認值None將嘗試所有可得到的讀取器
讀取器支持的類型有:
nibabel 支持.nii醫學文件格式
simpleitk 支持.dcm和.mhd格式的醫療圖像
opencv 支持.jpg等常見圖像,讀取后通道順序為BGR
skimage 支持.jpg等常見圖像
pillow 支持.jpg等常見圖像,讀取后通道順序為RGB
[System]
* cuda_devices: 設置tensorflow的CUDA_VISIBLE_DEVICES變量
* num_threads: 設置訓練的預處理線程數
* num_gpus: 設置訓練的GPU的數量
* model_dir: 訓練模型的保存和加載路徑
* dataset_split_file: 文件分配科目到子集
* event_handler: 事件處理器
* cuda_devices: 設置tensorflow的CUDA_VISIBLE_DEVICES變量
* num_threads: 設置訓練的預處理線程數
* num_gpus: 設置訓練的GPU的數量
* model_dir: 訓練模型的保存和加載路徑
* dataset_split_file: 文件分配科目到子集
* event_handler: 事件處理器
[NETWORK]
* name: niftynet/network中的網絡類或用戶自定義的模塊
* activation_function: 網絡的激活函數集合
* batch_size: 設置每次迭代圖像窗口的數量
* smaller_final_batch_mode: 當batch_size的窗口采樣器總數是不可見的時支持最后的batch使用不同的模式
可選類型有:
drop: 終止剩余的batch
pad: 用-1填補最后更小的batch
dynamic: 直接輸出剩余的batch
* name: niftynet/network中的網絡類或用戶自定義的模塊
* activation_function: 網絡的激活函數集合
* batch_size: 設置每次迭代圖像窗口的數量
* smaller_final_batch_mode: 當batch_size的窗口采樣器總數是不可見的時支持最后的batch使用不同的模式
可選類型有:
drop: 終止剩余的batch
pad: 用-1填補最后更小的batch
dynamic: 直接輸出剩余的batch
*
reg_type: 可訓練的正規化參數的類型
* decay: 正規化的強度,用於預防過擬合
* volume_padding_size: 圖片的填補值
* window_sampling: 進入網絡的圖片的采樣方法
uniform: 輸出的圖片保持原本大小
weighted: 對成比例的voxel的采樣到累積直方圖的似然
balanced: 每個標簽都被采樣的可能性同樣
resize: 將進入網絡的圖片首先resize到spatial_window_size
* decay: 正規化的強度,用於預防過擬合
* volume_padding_size: 圖片的填補值
* window_sampling: 進入網絡的圖片的采樣方法
uniform: 輸出的圖片保持原本大小
weighted: 對成比例的voxel的采樣到累積直方圖的似然
balanced: 每個標簽都被采樣的可能性同樣
resize: 將進入網絡的圖片首先resize到spatial_window_size
*
queue_length: NiftyNet會設置兩個隊列,一個負責從數據集中讀取數據並擾亂,另一個從前一個隊列中讀取batch_size張圖片輸入網絡,這個參數是指第一個隊列的長度,最小值為batch_size \* 2.5
* keep_prob: 如果失活被網絡支持的話,每個元素存活的可能性
* keep_prob: 如果失活被網絡支持的話,每個元素存活的可能性
[Volume-normalisation]
* normalisation: 指示直方圖標准化是否應該被應用於數據
* whitening: 只是被加載的圖片是否應該被增白,如果是,輸入I,返回(I - mean(I)) / std(I)
* histogram_ref_file: 標准化參數的文件
* norm_file: 基於直方圖的標准化的直方圖landmark類型
* cutoff: 下級和上級的基於直方圖的標准化的截斷
* normalise_foreground_only: 指示一個mask是否需要被基於前景或多樣前景進行計算,如設置True,所有的標准化步驟都將被應用於生成前景區
* foreground_type: 生成一個前景mask,並且它只用於前景
* mutimod_foreground_type: 結合前景mask和多模態的策略
可選類型:
or: 可得到的masks的合集
and: 可得到的mask的交集
all: mask從每個模態獨立計算
* normalisation: 指示直方圖標准化是否應該被應用於數據
* whitening: 只是被加載的圖片是否應該被增白,如果是,輸入I,返回(I - mean(I)) / std(I)
* histogram_ref_file: 標准化參數的文件
* norm_file: 基於直方圖的標准化的直方圖landmark類型
* cutoff: 下級和上級的基於直方圖的標准化的截斷
* normalise_foreground_only: 指示一個mask是否需要被基於前景或多樣前景進行計算,如設置True,所有的標准化步驟都將被應用於生成前景區
* foreground_type: 生成一個前景mask,並且它只用於前景
* mutimod_foreground_type: 結合前景mask和多模態的策略
可選類型:
or: 可得到的masks的合集
and: 可得到的mask的交集
all: mask從每個模態獨立計算
[TRAINING]
* optimiser: 計算圖梯度優化器的類型,支持adagrade,adam,gradientdescent,momentum,rmsprop,nesterov
* sample_per_volume:每張圖的采樣次數
* lr: 學習率
* loss_type: loss函數的類型,支持segmentation,regression,autoencoder,gan
* starting_iter: 設置重新訓練模型的迭代次數
* save_every_n: 保存當前模型的頻率,0為不保存
* tensorboard_every_n: 計算圖中的元素和寫到tensorboard上的頻率
* max_iter: 最大訓練迭代次數
* optimiser: 計算圖梯度優化器的類型,支持adagrade,adam,gradientdescent,momentum,rmsprop,nesterov
* sample_per_volume:每張圖的采樣次數
* lr: 學習率
* loss_type: loss函數的類型,支持segmentation,regression,autoencoder,gan
* starting_iter: 設置重新訓練模型的迭代次數
* save_every_n: 保存當前模型的頻率,0為不保存
* tensorboard_every_n: 計算圖中的元素和寫到tensorboard上的頻率
* max_iter: 最大訓練迭代次數
[Validation during training]
* validation_every_n: 每n次迭代運行一次驗證迭代
* validation_max_iter: 驗證迭代運行的次數
* exclude_fraction_for_validation: 用於驗證的數據集的比例
* exclude_fraction_for_inference: 用於推斷的數據集的比例
* validation_every_n: 每n次迭代運行一次驗證迭代
* validation_max_iter: 驗證迭代運行的次數
* exclude_fraction_for_validation: 用於驗證的數據集的比例
* exclude_fraction_for_inference: 用於推斷的數據集的比例
[Data augmentation during traning]
* rotation_angle: 指示輸入的圖片旋轉一個隨機的旋轉
* scaling_percentage: 指示一個隨機的縮放比例(-50,50)
* random_flipping_axes: 可以翻轉增強數據的軸(???)
* rotation_angle: 指示輸入的圖片旋轉一個隨機的旋轉
* scaling_percentage: 指示一個隨機的縮放比例(-50,50)
* random_flipping_axes: 可以翻轉增強數據的軸(???)
[INFERENCE]
* spatial_window_size: 指示輸入窗口的大小(int array)
* border: 一個用於修剪輸出窗口大小的邊界值(int tuple),如設置(3,3,3),將把一個(64\*64\*64)的窗口修剪為(58\*58\*58)
* inference_iter: 指定已訓練的模型用於推測(integer)
* save_seg_dir: 預測目錄的名字
* output_postfix: 向每一個輸出文件的名稱后添加后綴
* output_interp_order: 網絡輸出的推斷順序
* dataset_to_infer: 字符串指定計算推理的數據集(‘training’, ‘validation’, ‘inference’)
* spatial_window_size: 指示輸入窗口的大小(int array)
* border: 一個用於修剪輸出窗口大小的邊界值(int tuple),如設置(3,3,3),將把一個(64\*64\*64)的窗口修剪為(58\*58\*58)
* inference_iter: 指定已訓練的模型用於推測(integer)
* save_seg_dir: 預測目錄的名字
* output_postfix: 向每一個輸出文件的名稱后添加后綴
* output_interp_order: 網絡輸出的推斷順序
* dataset_to_infer: 字符串指定計算推理的數據集(‘training’, ‘validation’, ‘inference’)
[EVALUATION]
* save_csv_dir: 存儲輸出的csv文件的路徑
* evaluations: 要計算的評價指標列表以逗號分隔的字符串表示,每個應用程序可能的評估指標列表可用於回歸評估、分段評估和分類評估
* evaluation_units: 描述在分割的情況下應該如何進行評估
foreground: 只對一個標簽
label: 對每一個標簽度量
cc: 對每個連接組件度量
* save_csv_dir: 存儲輸出的csv文件的路徑
* evaluations: 要計算的評價指標列表以逗號分隔的字符串表示,每個應用程序可能的評估指標列表可用於回歸評估、分段評估和分類評估
* evaluation_units: 描述在分割的情況下應該如何進行評估
foreground: 只對一個標簽
label: 對每一個標簽度量
cc: 對每個連接組件度量