拯救脂肪肝第一步!以飞桨3D医疗影像分割方案MedicalSeg自主诊断脂肪肝
发布日期:2023-03-29 16:00浏览量:1100次
https://aistudio.baidu.com/aistudio/projectdetail/5574909
1. self.preprocess = {
2. "images": [
3. wrapped_partial(
4. HUnorm, HU_min=-100, HU_max=300),#设置窗宽窗位的裁剪范围
5. wrapped_partial(
6. resample, new_shape=[128,128,128], order=1)#设置输入网络的数据形状,顺序是[z,y,x]
7. ],
8. "labels": [
9. wrapped_partial(
10. resample, new_shape=[128,128,128], order=0),
11. ],
12. "images_test":[
13. wrapped_partial(
14. HUnorm, HU_min=-100, HU_max=300),
15. wrapped_partial(
16. resample, new_shape=[128, 128, 128], order=1)
17. ]
18. }
2.!python tools/prepare_SpleenAndLiver.py
2.batch_size: 2 #32GB显存,shape=256x128x128,batchsize可以设置2
3.iters: 10000 #训练轮次
4.train_dataset:
5. type: MedicalDataset
6. dataset_root: /home/aistudio/work/SpleenAndLiver_Np #转换后的Numpy文件路径
7. result_dir: /home/aistudio/result
8.#设置数据增强
9. transforms:
10. - type: RandomRotation3D #3d选择
11. degrees: 90
12. - type: RandomFlip3D #水平翻转
13. mode: train
14. num_classes: 3 #分割类别数
15.val_dataset:
16. type: MedicalDataset
17. dataset_root: /home/aistudio/work/SpleenAndLiver_Np
18. result_dir: /home/aistudio/result
19. num_classes: 3
20. transforms: []
21. mode: val
22. dataset_json_path: "/home/aistudio/work/dataset.json"
23.#设置优化器
24.optimizer:
25. type: sgd
26. momentum: 0.9
27. weight_decay: 1.0e-4
28.#设置学习率
29.lr_scheduler:
30. type: PolynomialDecay
31. decay_steps: 10000
32. learning_rate: 0.05
33. end_lr: 0
34. power: 0.9
35.#设置损失函数
36.loss:
37. types:
38. - type: MixedLoss
39. losses:
40. - type: CrossEntropyLoss
41. - type: DiceLoss
42. coef: [0.3, 0.7]
43. coef: [1]
44.#设置VNet模型参数
45.model:
46. type: VNet
47. elu: False
48. in_channels: 1
49. num_classes: 3
50. pretrained: null
51. kernel_size: [[2,2,4], [2,2,2], [2,2,2], [2,2,2]]
52. stride_size: [[2,2,1], [2,2,1], [2,2,2], [2,2,2]]
2. --save_dir "/home/aistudio/output/SpleenAndLiver_vent_128" \
3. --save_interval 70 --log_iters 20 \
4. --keep_checkpoint_max 3 \
5. --num_workers 1 --do_eval --use_vdl
2. --model_path /home/aistudio/output/SpleenAndLiver_vent_128/best_model/model.pdparams \
3. --save_dir /home/aistudio/output/SpleenAndLiver_vent_128/best_model
2.2023-03-22 04:57:21 [INFO] [EVAL] Class dice:
3.[0.9964 0.9444 0.9183]
2.--model_path /home/aistudio/output/SpleenAndLiver_vent_128/best_model/model.pdparams \
3.--save_dir /home/aistudio/export_model
-
保留最大连通域
2. # 最大连通域提取,binarysitk_image 是掩膜
3. cc = sitk.ConnectedComponent(binarysitk_image)
4. stats = sitk.LabelIntensityStatisticsImageFilter()
5. stats.SetGlobalDefaultNumberOfThreads(8)
6. stats.Execute(cc, binarysitk_image)#根据掩膜计算统计量
7. maxlabel = 0
8. maxsize = 0
9. for l in stats.GetLabels():#掩膜中存在的标签类别
10. size = stats.GetPhysicalSize(l)
11. if maxsize < size:#只保留最大的标签类别
12. maxlabel = l
13. maxsize = size
14. labelmaskimage = sitk.GetArrayFromImage(cc)
15. outmask = labelmaskimage.copy()
16. if len(stats.GetLabels()):
17. outmask[labelmaskimage == maxlabel] = 255
18. outmask[labelmaskimage != maxlabel] = 0
19. return outmask
-
缩小肝脏、脾脏的范围
2. #寻找mask范围的3D最大边界范围
3. mask_2 = np.argwhere(mask)
4. (zstart, ystart, xstart), (zstop, ystop, xstop) = mask_2.min(axis=0), mask_2.max(axis=0) + 1
5. if zstart- zstop < 0 : zmax,zmin = zstop,zstart
6. if ystart- ystop < 0 : ymax,ymin = ystop,ystart
7. if xstart- xstop < 0 : xmax,xmin = xstop,xstart
8. return zmax,zmin,ymax,ymin,xmax,xmin
-
两两配对计算肝脏和脾脏的CT比值
2.tupleNums = list(itertools.product(label[1], label[2]))
3.cts = [tupleNum[0]/tupleNum[1] for tupleNum in tupleNums]
体验AI
Web端 前往AI能力体验中心
移动端 打开百度APP“扫一扫”