2D HybridResUnet腦膠質瘤分割BraTs + Pytorch實現

論文鏈接:

https://download.csdn.net/download/weixin_40519315/12314673

BraTs數據準備

數據來源

本文用的訓練集和驗證集均來自BraTs2018的訓練集(其中HGG:210個病人,LGG:75個病人)

但由於BraTs只公開訓練集數據,沒有測試集數據,如果在訓練集中再拆一部分用來作測試集的話,那訓練集便少了許多,訓練數據如果過少,容易出現過擬合現象,即在訓練集中表現好,而在測試集中表現差,此時的網絡泛化能力變差了.爲了解決數據少的問題,靈機一動的我想出了一個辦法.

因爲BraTs2019的訓練集在BraTs2018的基礎上增多了,其中HGG增加了49例,LGG增加了1例,那麼我就把這些新增的作爲我的測試集

下面我提供百度雲盤給大家下載,這是原始數據

        BraTs18數據集下載地址(不包含測試集,提供的驗證集無GT) 
鏈接:https://pan.baidu.com/s/1Ry41OVl9VLOMzhQQR9qXuA 提取碼:qvmo
BraTs19數據集下載地址如下(不包含測試集,提供的驗證集無GT) 
鏈接: https://pan.baidu.com/s/1S5XGTdHkwFnagKS-5vWYBg 提取碼: 2333
      

數據的預處理以及實現代碼

把上面兩年的數據下下來,然後我對數據的預處理方法是鏈接

完整的實現代碼(jupyter notebook打開)

https://github.com/Merofine/BraTS2Dpreprocessing
  1. GetTrainingSets.ipynb——>訓練集和驗證集
  2. GetTestingSetsFrom2019.ipynb-—>測試集

代碼執行完後,獲得npy數據

v2-31cb53c7a1a959205b2a5c4682bb0c2f_b.png

<如果大家嫌麻煩,我這裏提供預處理好的npy數據>

        鏈接:https://pan.baidu.com/s/1iIBvqrXIx2JAvoyt3FcuYw  密碼:4qua
      

訓練集、驗證集和測試集——預處理之區別

它們的預處理除了是否要去除沒有病竈切片外,別無區別

訓練集是去除的,以緩解類別不均衡問題,類別不平衡(class-imbalance)就是指分類任務中不同類別的訓練樣例數目差別很大的情況,但若差別很大,則會對學習過程造成困擾.我們的任務是分割,分割是一種對像素級別的分類,一個切片假如病竈很少甚至沒有,那麼就會出現嚴重的類別不均衡,學習的時候網絡就會偏向於多的那一類靠,爲了緩解這種情況,應該剔除沒有病竈的切片

而驗證集我也是去除的,因爲驗證集其實在訓練過程中扮演了另一角色,雖然並沒有直接參與訓練,可是卻是爲了防止過擬合現象,也就是說防止網絡將這些有病竈的切片學得太過頭了,這是個人理解,具體到底是否去除,還得通過實驗證明

測試集當然是不用去除的,因爲這個時候就是考驗它的時候到了,讓它自己判斷是否有病竈

運行環境的安裝

windows10 64 bits、nvidia驅動、CUDA8.0、cudnn、anaconda

        打開命令窗口, 分別輸入以下指令:

conda create -n jiu0Monkey python=3.6

conda activate jiu0Monkey

pip install simpleitk

pip install opencv-python==3.4.2.16

pip install scipy

pip install scikit-learn==0.20

pip install scikit-image==0.14

conda  install numpy  mkl cffi

安裝pytorch,選擇與cuda版本對應的進行安裝,python版本也要對應
下載鏈接:https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
我選擇的是win-64 pytorch-0.4.0-py36_cuda80_cudnn7he774522_1.tar.bz2
下載完畢後進行安裝,找到下載目錄並執行:
conda install --offline .\pytorch-0.4.0-py36_cuda80_cudnn7he774522_1.tar.bz2

conda install  torchvision  -c pytorch

conda install Pillow=6.1

conda install tqdm

conda install pandas

pip install -U scikit-image
        
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numba
pip install hausdorff
      

代碼下載鏈接

https://github.com/Merofine/hybridresunet

訓練:

將train.py的img_paths和mask_paths修改爲自己的trainImage和trainMask的路徑

訓練前會通過train_test_split函數將數據集劃分爲訓練集和驗證集,只要參數random_state一樣,劃分的結果就是一樣的

每一次epoch訓練結束,都會對驗證集進行測試Iou指標,如果比之前最好的還要好就保存本次訓練模型,如果超過args.early_stop這個參數還沒有訓練更好的話,便結束訓練,這個原理就是early_stop,主要還是防止網絡訓練過度,造成過擬合現象,這也就是驗證集雖然沒有直接參與訓練,但是卻在其中扮演了一個非常重要的角色!

[過擬合]早停法 (Early Stopping)

如果要訓練,則運行下面指令

        python .\train.py --arch="HybridResUNet" --dataset=“Jiu0Monkey”
      

其它參數根據自己的情況進行配置

預訓練好的模型下載

        鏈接:https://pan.baidu.com/s/1Kph8MxohLjASSOKqCGow1A  密碼:x53e
      

v2-c2eba8fc440072d9767b3f7f6c41c18c_b.jpg

v2-61bed8f92433c54aceb5168bb083e81d_b.jpg

預測:

將test.py的img_paths和mask_paths修改爲自己的testImage和testMask的路徑

運行下面指令獲得測試結果以及GT文件:

        python .\test.py --name="Jiu0Monkey_HybridResUNet_woDS" --mode="GetPicture"
      

v2-a110eba60d64c8d32b94f303c5f67524_b.jpg
hybridResUnet 左邊爲GT,右邊爲預測

運行下面指令評價測試結果以及GT文件的指標,想了解更多指標的信息包括Dice、Hausdorff、IOU、PPV等,可以參考我這一篇(分割常用評價指標)

玖零猴:分割常用評價指標Dice、Hausdorff_95、IOU、PPV等(打馬)
        python .\test.py --name="Jiu0Monkey_HybridResUNet_woDS" --mode="Calculate"
      

運行結果:

v2-a0df63fc6f77fa41fe2cad6d16fcf95b_b.jpg

v2-b97fafc668d7d17b219c051e84491989_b.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章