NiftyNet開源平台使用


NiftyNet是一款開源的卷積神經網絡平台,專門針對醫學圖像處理分析,上一篇博客已經詳細介紹了這個平台,接下來讓我簡單介紹一下目前我了解到的使用方法。更詳細的使用方法、以及配置過程請查看NiftyNet官方文檔:https://niftynet.readthedocs.io/en/latest/config_spec.html

目錄:

1.NiftyNet層結構介紹

2.運行NiftyNet demo所需的指令格式

3.配置文件部分參數介紹

(1)[Input data source]

(2)[System]

(3)[NETWORK]

(4)[Volume-normalisation]

(5)[TRAINING]

(6)[Validation during training]

(7)[Data augmentation during traning]

(8)[INFERENCE]

(9)[EVALUATION]


 1.NiftyNet層結構介紹

NiftyNet有很強的易用性,數據層,應用層,網絡層等是完全獨立的,

(1)數據層(NiftyNet/niftynet/io),負責醫學圖像的讀取,目前讀取器有以下幾種:

  • nibabel 支持 .nii醫學文件格式
  • simpleith 支持 .dcm和 .mhd格式的醫療圖像
  • opencv 支持 .jpg等常見圖像讀取,讀取后通道順序為BGR
  • skimage 支持 .jpg等常見圖像讀取
  • pillow 支持 .jpg等常見圖像讀取,通道順序為RGB

(2)應用層(NiftyNet/niftynet/application),目前支持的應用有以下幾種:

  • 分割 (segmentation_application.py)
  • 分類 (classification_application.py)
  • Autoencoder
  • Gan生成網絡
  • 回歸

(3)網絡層(NiftyNet/niftynet/network),這個里面包含了已經實現的一些網絡,resnet,dense_vnet,等,我們可以創建自己的網絡結構后放在這個文件夾

 

 2.運行NiftyNet demo所需的指令格式

(1) 運行以下格式的命令可以使NiftyNet工作:

# command to run from git-cloned NiftyNet source code folde
python net_run.py [train|inference|evaluation] -c <path_to/config.ini> -a <application>
# command to run using pip-installed NiftyNet
net_run [train|inference|evaluation] -c <path_to/config.ini> -a <application>

train:train指令表明想要使用提供的數據更新已存在的網絡模型

inference:inference將加載已存在的網絡模型根據提供的數據生成響應

-c:后跟配置文件路徑(有關配置文件的內容見第3個知識點)

-a:跟將要import的應用種類

(2)NiftyNet的應用層已經自帶了5種應用,那么如何運行這些應用呢?

圖像分割

# command
net_run -a niftynet.application.segmentation_application.SegmentationApplication -c ...
# alias(別名):
net_segment -c ...

圖像回歸

# command
net_run -a niftynet.application.regression_application.RegressionApplication -c ...
# alias(別名):
net_regress -c ...

自動編碼器

# command
net_run -a niftynet.application.autoencoder_application.AutoencoderApplication -c ...
# alias(別名):
net_autoencoder -c ...

生成對抗網絡

# command
net_run -a niftynet.application.gan_application.GANApplication -c ...
# alias(別名):
net_gan -c ...

 

3.配置文件部分參數介紹

(1)每個網絡想要運行必須包含一個config.ini配置文件,用來設置訓練/測試所用的全部參數,詳細如下:  

每個配置文件中必須包含三個sections:  

* [SYSTEM]  

* [NETWORK]  

* [APPLICATION] (自己定義.如[SEGMENTATION],[GAN],等)

如果train行為被需要,則`[TRAINING]`和`[Input data source]`需要被定義,其中`[Input data source]`這個section可以自定義命名

如果inference行為被需要,則需要定義`[INFERENCE]`和`[Input data source]`,其中`[Input data source]`這個section可以自定義命名

以NiftyNet自帶的分割腦部Demo為例子,其運行指令和配置文件如下圖所示:

運行指令:

net_segment -c C:/niftynet/extensions/highres3dnet_brain_parcellation/highres3dnet_config_eval.ini 

配置文件如下:

[Modality0]
path_to_search = data/OASIS/
filename_contains = nii
spatial_window_size = (96, 96, 96)
interp_order = 0
pixdim = (1.0, 1.0, 1.0)
axcodes = (R, A, S)

[SYSTEM]
cuda_devices = ""
model_dir = models/highres3dnet_brain_parcellation

[NETWORK]
name = highres3dnet
batch_size = 1
activation_function = relu
volume_padding_size = 10

[Volume-normalisation] whitening = True normalisation = True normalise_foreground_only=True foreground_type = mean_plus histogram_ref_file = databrain_std_hist_models_otsu.txt cutoff = (0.001, 0.999) [INFERENCE] border = 2 inference_iter = 33000 save_seg_dir = ./parcellation_output output_interp_order = 0 spatial_window_size = (128, 128, 128) [SEGMENTATION] image = Modality0 output_prob = False num_classes = 160

(2)接下來讓我們看看每個部分的參數的含義

 [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將嘗試所有可得到的讀取器

[System]

* 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 

* reg_type:  可訓練的正規化參數的類型  

* 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: 如果失活被網絡支持的話,每個元素存活的可能性

[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從每個模態獨立計算 

[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:  最大訓練迭代次數 

[Validation during training]

* 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:  可以翻轉增強數據的軸

[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:  對每個連接組件度量 

 

參考:https://blog.csdn.net/PKnotnull/article/details/80378824#inference

 


以上就是本次有關Niftynet的相關知識學習,歡迎交流!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM