【nnunet】个人数据训练心得

安装:

pip install nnunetv2
## 或者是把他下载下来,自行安装
git clone https://github.com/MIC-DKFZ/nnUNet.git
cd nnUNet
pip install -e .

GitHub代码:

GitHub - MIC-DKFZ/nnUNet

十项医学分割数据集:

Medical Segmentation Decathlon

注意:安装时一定不能使用魔法,否则会被伏地魔(False)

配置:

这里有几个铁汁,可以一起参考,以他们的为主,我的为辅,一起食用

(四:2020.07.28)nnUNet最舒服的训练教程(让我的奶奶也会用nnUNet(上))(21.04.20更新)_nnuet_花卷汤圆的博客-CSDN博客

nnUNet实战一使用预训练nnUNet模型进行推理_Tina姐的博客-CSDN博客

nnUNet 使用不完全指南(上) - No Visitor Website(这里有自定义生成json的代码)

我引用一下吧:

from collections import OrderedDict
from batchgenerators.utilities.file_and_folder_operations import save_json
   
   
def main():
    foldername = "Task128_LungLobe"
    numTraining = 80
    numTest = 6
    numClass = 6
    json_dict = OrderedDict()
    json_dict['name'] = foldername
    json_dict['description'] = foldername
    json_dict['tensorImageSize'] = "4D"
    json_dict['reference'] = "see challenge website"
    json_dict['licence'] = "see challenge website"
    json_dict['release'] = "0.0"
    json_dict['modality'] = {
        "0": "CT",
    }
    json_dict['labels'] = {i: str(i) for i in range(numClass)}
   
    json_dict['numTraining'] = numTraining
    json_dict['numTest'] = numTest
    json_dict['training'] = [{'image': "./imagesTr/LungLobe_{:0>3d}.nii.gz".format(i),
                              "label": "./labelsTr/LungLobe_{:0>3d}.nii.gz".format(i)}
                             for i in range(numTraining)]
   
    json_dict['test'] = ["./imagesTs/LungLobe_{:0>3d}.nii.gz".format(i)
                         for i in range(numTraining, numTraining+numTest)]
   
    save_json(json_dict, "./dataset.json")
   
   
if __name__ == "__main__":
    main()
   

nnUNet保姆级使用教程!从环境配置到训练与推理(新手必看) | AI技术聚合

在windows下安装nnUnet,并制作数据集以及运行(让隔壁奶奶也能学会的教程)_花生米生花@的博客-CSDN博客

数据文件夹:

其实就是需要自己自行手动建立几个文件夹,

 进入红色文件夹:

在红色文件夹里,丢如数据文件夹Task14_Vessel,这是固定的命名形式Task数字_名字

数字的话,建议是10以上,但是不能三位数,就说如果你是13的话,不要013,如果你里面的数据格式是正确的话,就是训练数据后面是_0000,nii.gz后缀的话,可以忽略这个规则,可直接跳到 --然后

因为的我的数据是这样的

 肯定是不符合格式的,所以得改,可以利用nnunet自带的代码进行更改:

nnUNet_convert_decathlon_task -i F:/data/data_1100/nnUNet_raw_data_base/nnUNet_raw/nnUNet_raw_dat
a/Task14_Vessel

这时,他会再次生成一个文件夹,这个文件夹叫Task014_Vessel,原来的叫Task14_Vessel,所以你应该懂了吧!!!

 其中这个过程中你是回遇到错误的,如果你的是Windows环境的话,解决方案,如下:

nnUNet windows 遇到的 bug_nnunet windows_*小呆的博客-CSDN博客

还有个最重的是,image和label的名字得一样

 

然后

运行指令,数字是自己任务的代号:

nnUNet_plan_and_preprocess -t 14 --verify_dataset_integrity
## 或者是
nnUNet_plan_and_preprocess -t 14 

然后又遇到报错了,一般是到了这步才会报错的:

 File "D:\Python\anaconda3\envs\pytorch\lib\site-packages\nnunet\preprocessing\sanity_checks.py", line 129, in verify_dataset_integrity
    assert isfile(expected_label_file), "could not find label file for case %s. Expected file: \n%s" % (
AssertionError: could not find label file for case img_001. Expected file:

上面所有的问题皆是Windows下出现的,Linux的话,我是一次通过的。

解决方案:装Windows版的nnunet,它会解决Windows下的线程问题,不会报这么多奇奇怪怪的问题

最后就是运行指令进行训练

nnUNet_train 3d_fullres nnUNetTrainerV2 13 0-4

nnUNetTrainerV2:代表是训练的模型,

13:任务数据集

0-4:五折中的其中一折

若是训练到一半,想接着训练,则

nnUNet_train 3d_fullres nnUNetTrainerV2 13 0-4 -c

-c:continue的意思

nnunet默认是每50个epoch保存一次

总共训练1000个epoch

#############################################################################

指令总结

#############################################################################

nnUNet_convert_decathlon_task -i F:/data/data_1100/nnUNet_raw_data_base/nnUNet_raw/nnUNet_raw_dat
a/Task14_Vessel

nnUNet_plan_and_preprocess -t 14 

nnUNet_train 3d_fullres nnUNetTrainerV2 13 0

文件位置 

 nnUNet_convert_decathlon_task:

\nnunet\experiment_planning\ nnUNet_convert_decathlon_task

nnUNet_plan_and_preprocess:

\nnunet\experiment_planning\ nnUNet_plan_and_preprocess

nnUNet_train:

\nnunet\run\run_training

##########################################################################################################################################################

训练的一些源代码笔记

如果用的是nnUNet_train 3d_fullres nnUNetTrainerV2的话,主要看这五个文件代码:

 run_training.py:

位置:\nnunet\run\run_training

功能:

主流程都在这里

 nnUNetTrainerV2.py:

位置:\nnunet\training\network_training\nnUNetTrainerV2

功能:

1、定义训练的网络模型、初始化网络

2、加载和解压数据集,数据的增强

3、定义损失函数、优化器、学习率之类的

4、加载数据参数定义

5、训练的入口,(在代码最后一段)

nnUNetTrainer.py:

位置:\nnunet\training\nnUNetTrainer.py

功能:

1、加载的一些数据参数定义,分配到self总体上

2、在这个可以自己改batch大小和patch_size大小

一般默认的batch是2,patch_size是【90,190,190】

self.batch_size   和    self.patch_size

3、划分训练集和验证集

4、加载数据集

network_trainer.py:

位置:

位置:\nnunet\training\network_trainer.py

功能:

1、设置一些参数

self.num_batches_per_epoch = 250        ## 训练块

self.num_val_batches_per_epoch = 50        ## 测试块

self.save_every = 50                                ## 每多少个epoch保存一下

2、加载权重

3、保存debug日志文件到输出文件夹下

4、训练的while:epoch < max_num_epochs:在这

generic_UNet.py:

位置:\nnunet\network_architecture\generic_UNet.py

功能:

网络结构模型

猜你喜欢

转载自blog.csdn.net/qq_42792802/article/details/129902881