医疗图像切割日记 01 - 用nnUNet做Fatal Head Segmentation Challenge

目录

1. nnUNet 介绍

1.1 nnUNet 特点

2. 准备工作

2.1 整理数据格式 - 用自己的数据集

2.2 设置路径

2.3 nnUNet预处理数据

3. 训练

3.1 训练代码

​编辑​编辑

3.2 训练结果

3.2.1 骰子系数 - 最差结果 - Worst Cases​编辑​编辑

3.2.2 骰子系数 - 最优结果 - Best Cases​编辑​编辑模型分析

4. 优化

4.1 数据预处理

4.2 优化结果 - 图片

4.2.1 骰子系数 - 最差结果 - Worst Cases​编辑​编辑

4.2.2 骰子系数 - 最优结果 - Best Cases​编辑​编辑

4.3 优化结果 - 数字

4.3.1 骰子

4.3.2 豪斯多夫

4.3.3 周长误差 (Circumference Error in mm)

5. 模型分析

5.1 索伦森-骰子系数 (Dice Distance)

5.2 豪斯多夫距离 (Hausdorff Distance) 

5.3 代码实现

6. 总结

总结(节俭版)


发的第一篇文,有很多要改进的地方。求各路大神多多指引
费时5天完成的一个Segmentation挑战,之前没有做过segmentation所以走了一点点弯路

nnUNet的github链接 - GitHub - MIC-DKFZ/nnUNet
nnUNet的文章链接- -nnU-Net: a self-configuring method for deep learning-based biomedical image segmentation | Nature Methods
Fatal Head Segmentation Challenge的链接 - Home - Grand Challenge 

*部分代码非原创,会标注出处以及链接*


1. nnUNet 介绍

nnUNet是一款可以自己调整数据预处理,模型架构,训练,和后处理的深度学习医疗图片分割模型。在没有人工调参的情况下,nnUNet 在23个图形切割挑战上得到了最优的分数/前沿的效果。作者把nnUNet开源,让更多人,不论背景,都能轻松的接触到医疗图形切割的领域。

1.1 nnUNet 特点

  • 衡量标准:nnUNet 在很多数据集都达到了最优的结果。作者表示nnUNet可以算是行业标杆,让其他用户的模型和nnUNet做准确率比对。(咱也不敢问,咱也不敢说,大佬说什么都对)
  • 开箱即食:nnUNet 是第一个“开箱即食”的先进图像分割系统。没有segmentation经验的用户也可以(相对)流畅的使用nnUNet来做图像分割的任务。
  • 框架:nnUNet的模块化框架可以让用户替换/优化部分,可以有效的看到自己优化的效果。

2. 准备工作

2.1 整理数据格式 - 用自己的数据集

nnUNet 对数据的格式要求比较高,是根据Medical Segmentation Decathlon (MSD)的格式。

nnUNet_raw_data_base/nnUNet_raw_data/
├── Task001_BrainTumour
├── Task002_Heart
├── Task003_Liver
├── Task004_Hippocampus
├── Task005_Prostate
├── ...

~/Task001_BrainTumour/
├── dataset.json
├── imagesTr
├── (imagesTs)
└── labelsTr

详细转换方法请借鉴作者 github:nnUNet/dataset_conversion.md at master · MIC-DKFZ/nnUNet · GitHub

2.2 设置路径

nnUNet的初衷是能让每个数据集都能用这个模型跑,所以环境设置很重要!我是在colab上面跑的,如果要本地跑的话需要修改。这里有三个环境设置:

  • Raw database - 源数据路径
  • Preprocessed - 处理后的数据路径
  • Results Folder - 结果储存路径
os.environ['nnUNet_raw_data_base'] = "content/raw_data_base"
os.environ['nnUNet_preprocessed'] = "content/raw_data_base/nnUNet_preprocessed"
os.environ["RESULTS_FOLDER"] = "content/raw_data_base/results"

2.3 nnUNet预处理数据

在训练nnUNet之前需要用他们的代码预处理一下数据,代码如下:

nnUNet_plan_and_preprocess -t XXX --verify_dataset_integrity

这里nnUNet_plan_and_preprocess是命令,XXX是自定义的任务编号,建议设置在500+以防和现有模型冲突。如果这代码跑出来没问题就可以开始训练了。

3. 训练

3.1 训练代码

!nnUNet_train 2d nnUNetTrainerV2 555 0
!nnUNet_train 2d nnUNetTrainerV2 555 1
!nnUNet_train 2d nnUNetTrainerV2 555 2
!nnUNet_train 2d nnUNetTrainerV2 555 3
!nnUNet_train 2d nnUNetTrainerV2 555 4
#nnUNet_train 命令
#2d 跑2d nnUNet
#nnUNetTrainerV2 基础nnUNet
#555 任务编号
#0/1/2/3/4 多重编号
#!nnUNet_train 2d nnUNetTrainerV2 555 4 -c 
#Add -c to continue train from the last check point

3.2 训练结果

3.2.1 骰子系数 - 最差结果 - Wor

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值