深度学习分割模型过程记录

1,数据预处理

(1)Dicom 2 Nii

(2)MR图像做N4偏置场矫正

(3)数据分组,确定训练集和验证集的图像和ROI的输入路径txt

2,训练阶段

(1)TrainConfig确定,Spacing注意一下,尽量和原始尺寸一致

(2)保存的模型要转成neuro模型,代码位置"/data1/wangfang_data/Kunming_Hebo/1_LumbarMuscleSegmentation/1_Data/0-Code/interconvert_neuro_and_pth.py",在docker环境下转换。1)修改.py文件中的模型存在位置;2)python .py文件的绝对路径

3,激活docker环境步骤

(1)连网:firefox

(2)cd~;

(3)关闭上次的docker环境:sudo bash stop_and_rm_container_wf.sh

(4)激活docker:sudo bash run_contaoner_wf.sh,出现root@a01e1b8a60db:~/workapsce#

(5)安装所需要的包:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple nibabel,pip install -i https://pypi.tuna.tsinghua.edu.cn/simple SimpleITK,pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pycrypto,pip install -i https://pypi.tuna.tsinghua.edu.cn/simple antspyx【配准需要】

4,模型应用和测试

(1)单纯从原图分割ROI,命令行输入函数:vseg_test -i /data1/wangfang_data/Kunming_Hebo/1_LumbarMuscleSegmentation/1_Data/3_TestData/230222_TestDataPath.txt  -m /data1/wangfang_data/Kunming_Hebo/1_LumbarMuscleSegmentation/1_Data/5_ModelApply/230223_neur_model/ -o /data1/wangfang_data/Kunming_Hebo/1_LumbarMuscleSegmentation/1_Data/5_ModelApply/Top50P/230223_SegRes/ -n "Muscle_seg.nii.gz"。i是input路径,输入准备好的txt文件的绝对路径;m是保存的neuro模型,输入deploy上一层目录即可;o是保存结果的路径;n是分割结果的保存名称

(2)除了分割ROI外,还要evaluation,也是在docker环境下,用python /data1/wangfang_data/Kunming_Hebo/1_LumbarMuscleSegmentation/1_Data/0-Code/vseg_auto_coarsetofine_test_appoint_wf.py代码运行。在.py文件中,设置各参数条件。注意要修改的地方:evaluation_test中,替换的地方(117行和122行,163-168行)

5. 模型参数计算

(1)对比各个模型时,计算Parameters、Memory、Deployment model size、FLOPS、Forward time、Convolutional layers。Max stride

(2)Parameters和FLOPS可用代码计算;Memory是保存模型check-point下的params.pth的大小;Deployment model size是转换模型后fine.neuro的大小;Forward time是计算每个样本平均花费时间

(3)Parameters和FLOPS可用代码计算过程:1)VNet和SEVBNet的模型原位置:/data1/wangfang_data/Kunming_Hebo/1_LumbarMuscleSegmentation/1_Data/0_Code/md_segmentation3d/;2)在pycharm中打开该目录;3)在md_segmentation3d,network下打开需要的网络,如se_vbnet网络,在代码最后,改变相关参数即可。

(4)nnunet模型的Parameters和FLOPS可用代码计算过程:1)找到原始架构代码位置:/data1/wangfang_data/Kunming_Hebo/1_LumbarMuscleSegmentation/4_NNunet/nnUNet/nnunet/network_architecture/generic_UNet.py;2)在代码最后添加参数如下:

  import pickle
  path = "/data1/wangfang_data/Kunming_Hebo/1_LumbarMuscleSegmentation/4_NNunet/DATASET/nnUNet_trained_models/nnUNet/3d_fullres/Task101_Muscle/nnUNetTrainerV2__nnUNetPlansv2.1/plans.pkl"
  f = open(path,'rb')
  data = pickle.load(f)
  data

  import torch
  from thop import profile
  from ptflops import get_model_complexity_info

  model = Generic_UNet(1, 32, num_classes=3, num_pool=8, feat_map_mul_on_downscale=5, conv_op=nn.Conv2d, norm_op=nn.BatchNorm2d,
  dropout_op=nn.Dropout2d)
  print(model)
  print('Number of network parameters:', sum(param.numel() for param in model.parameters()))

  inputs = torch.randn(1, 1, 1,256, 256) # 2d
  #inputs = torch.randn(1, 1, 1, 32, 256, 256) # 3d
  flops, params = profile(model, inputs=inputs)
  print("flops:", flops, "params", params)

6 nnunet的测试

  (1)打开NNunet的project

  (2)conda activate 4_NNunet

  (3)nnUNet_predict -i /data1/wangfang_data/Kunming_Hebo/1_LumbarMuscleSegmentation/5_ExternalTestingData/3_ChengduMedicalHos/4_NNUnetData/ -o     /data1/wangfang_data/Kunming_Hebo/1_LumbarMuscleSegmentation/5_ExternalTestingData/3_ChengduMedicalHos/5_ModelSegRes_updata/2_NNunet2d/ -t 101 -m 2d -f all【3d模型修改:3d_fullres】

 

posted @ 2023-02-23 09:45  王姑娘呀~  阅读(75)  评论(0编辑  收藏  举报