pytorch 测试每一类_2D-UNet脑胶质瘤分割BraTs + Pytorch实现
2D-UNet講解
玖零猴:U-Net+與FCN的區(qū)別+醫(yī)學(xué)表現(xiàn)+網(wǎng)絡(luò)詳解+創(chuàng)新?zhuanlan.zhihu.comBraTs數(shù)據(jù)準(zhǔn)備
數(shù)據(jù)來源
本文用的訓(xùn)練集和驗(yàn)證集均來自BraTs2018的訓(xùn)練集(其中HGG:210個(gè)病人,LGG:75個(gè)病人)
但由于BraTs只公開訓(xùn)練集數(shù)據(jù),沒有測試集數(shù)據(jù),如果在訓(xùn)練集中再拆一部分用來作測試集的話,那訓(xùn)練集便少了許多,訓(xùn)練數(shù)據(jù)如果過少,容易出現(xiàn)過擬合現(xiàn)象,即在訓(xùn)練集中表現(xiàn)好,而在測試集中表現(xiàn)差,此時(shí)的網(wǎng)絡(luò)泛化能力變差了.為了解決數(shù)據(jù)少的問題,靈機(jī)一動(dòng)的我想出了一個(gè)辦法.
因?yàn)锽raTs2019的訓(xùn)練集在BraTs2018的基礎(chǔ)上增多了,其中HGG增加了49例,LGG增加了1例,那么我就把這些新增的作為我的測試集
下面我提供百度云盤給大家下載,這是原始數(shù)據(jù)
BraTs18數(shù)據(jù)集下載地址(不包含測試集,提供的驗(yàn)證集無GT) 鏈接:https://pan.baidu.com/s/1Ry41OVl9VLOMzhQQR9qXuA 提取碼:qvmo BraTs19數(shù)據(jù)集下載地址如下(不包含測試集,提供的驗(yàn)證集無GT) 鏈接: https://pan.baidu.com/s/1S5XGTdHkwFnagKS-5vWYBg 提取碼: 2333數(shù)據(jù)的預(yù)處理以及實(shí)現(xiàn)代碼
把上面兩年的數(shù)據(jù)下下來,然后我對數(shù)據(jù)的預(yù)處理方法是鏈接
完整的實(shí)現(xiàn)代碼(jupyter notebook打開)
https://github.com/Merofine/BraTS2Dpreprocessing?github.com代碼執(zhí)行完后,獲得npy數(shù)據(jù)
<如果大家嫌麻煩,我這里提供預(yù)處理好的npy數(shù)據(jù)>
鏈接:https://pan.baidu.com/s/1iIBvqrXIx2JAvoyt3FcuYw 密碼:4qua訓(xùn)練集、驗(yàn)證集和測試集——預(yù)處理之區(qū)別
它們的預(yù)處理除了是否要去除沒有病灶切片外,別無區(qū)別
訓(xùn)練集是去除的,以緩解類別不均衡問題,類別不平衡(class-imbalance)就是指分類任務(wù)中不同類別的訓(xùn)練樣例數(shù)目差別很大的情況,但若差別很大,則會對學(xué)習(xí)過程造成困擾.我們的任務(wù)是分割,分割是一種對像素級別的分類,一個(gè)切片假如病灶很少甚至沒有,那么就會出現(xiàn)嚴(yán)重的類別不均衡,學(xué)習(xí)的時(shí)候網(wǎng)絡(luò)就會偏向于多的那一類靠,為了緩解這種情況,應(yīng)該剔除沒有病灶的切片
而驗(yàn)證集我也是去除的,因?yàn)轵?yàn)證集其實(shí)在訓(xùn)練過程中扮演了另一角色,雖然并沒有直接參與訓(xùn)練,可是卻是為了防止過擬合現(xiàn)象,也就是說防止網(wǎng)絡(luò)將這些有病灶的切片學(xué)得太過頭了,這是個(gè)人理解,具體到底是否去除,還得通過實(shí)驗(yàn)證明
測試集當(dāng)然是不用去除的,因?yàn)檫@個(gè)時(shí)候就是考驗(yàn)它的時(shí)候到了,讓它自己判斷是否有病灶
運(yùn)行環(huán)境的安裝
windows10 64 bits、nvidia驅(qū)動(dòng)、CUDA8.0、cudnn、anaconda
打開命令窗口, 分別輸入以下指令:conda create -n jiu0Monkey python=3.6conda activate jiu0Monkeypip install simpleitkpip install opencv-python==3.4.2.16pip install scipypip install scikit-learn==0.20pip install scikit-image==0.14conda install numpy mkl cffi安裝pytorch,選擇與cuda版本對應(yīng)的進(jìn)行安裝,python版本也要對應(yīng) 下載鏈接:https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ 我選擇的是win-64 pytorch-0.4.0-py36_cuda80_cudnn7he774522_1.tar.bz2 下載完畢后進(jìn)行安裝,找到下載目錄并執(zhí)行: conda install --offline .pytorch-0.4.0-py36_cuda80_cudnn7he774522_1.tar.bz2conda install torchvision -c pytorchconda install Pillow=6.1conda install tqdmconda install pandaspip install -U scikit-imagepip install -i https://pypi.tuna.tsinghua.edu.cn/simple numba pip install hausdorff代碼下載鏈接
https://github.com/Merofine/UNet2D_BraTs?github.com訓(xùn)練:
將train.py的img_paths和mask_paths修改為自己的trainImage和trainMask的路徑
訓(xùn)練前會通過train_test_split函數(shù)將數(shù)據(jù)集劃分為訓(xùn)練集和驗(yàn)證集,只要參數(shù)random_state一樣,劃分的結(jié)果就是一樣的
每一次epoch訓(xùn)練結(jié)束,都會對驗(yàn)證集進(jìn)行測試Iou指標(biāo),如果比之前最好的還要好就保存本次訓(xùn)練模型,如果超過args.early_stop這個(gè)參數(shù)還沒有訓(xùn)練更好的話,便結(jié)束訓(xùn)練,這個(gè)原理就是early_stop,主要還是防止網(wǎng)絡(luò)訓(xùn)練過度,造成過擬合現(xiàn)象,這也就是驗(yàn)證集雖然沒有直接參與訓(xùn)練,但是卻在其中扮演了一個(gè)非常重要的角色!
[過擬合]早停法 (Early Stopping)?blog.csdn.net如果要訓(xùn)練Unet,則運(yùn)行下面指令
python .train.py --arch="Unet" --dataset=“Jiu0Monkey”其它參數(shù)根據(jù)自己的情況進(jìn)行配置
預(yù)訓(xùn)練好的模型下載:
鏈接:https://pan.baidu.com/s/1CBSyOW3n0IOoEIbNdsbOrg 密碼:w7fw預(yù)測:
將test.py的img_paths和mask_paths修改為自己的testImage和testMask的路徑
運(yùn)行下面指令獲得測試結(jié)果以及GT文件:
python .test.py --name="Jiu0Monkey_Unet_woDS" --mode="GetPicture"Unet 左邊為GT,右邊為預(yù)測運(yùn)行下面指令評價(jià)測試結(jié)果以及GT文件的指標(biāo),想了解更多指標(biāo)的信息包括Dice、Hausdorff、IOU、PPV等,可以參考我這一篇(分割常用評價(jià)指標(biāo))
玖零猴:分割常用評價(jià)指標(biāo)Dice、Hausdorff_95、IOU、PPV等(打馬)?zhuanlan.zhihu.compython .test.py --name="Jiu0Monkey_Unet_woDS" --mode="Calculate"運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的pytorch 测试每一类_2D-UNet脑胶质瘤分割BraTs + Pytorch实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何用python32位开发词典软件_P
- 下一篇: mysql聚簇索引 和主键的区别_[My