我是靠谱客的博主 柔弱便当,最近开发中收集的这篇文章主要介绍jupyter分割代码块_3DUnet医学分割速成-MONAI,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

837bc492673736c6ee7ce4e5c1d13fe5.png

MONAI是基于PyTorch的开源框架,用于医疗影像的深度学习领域。本文示范3D的脾脏分割,提供数据集和jupyter代码。

我找了好久类似的分割例程,还是MONAI最贴心最清晰,半天就出结果了,可以在jupyter notebook 里面看到分割的结果和手工标注的label的比较。

1. 安装: pip install monai

2. 代码&数据

Project-MONAI/tutorials​github.com
936f5b1861a9e45df55b122f6d922b09.png

3. 对于数据的载入和预处理

3.1 首先注意数据路径,data_root要改成你自己的路径

3.2 目前MONAI只适用于Nifti格式的文件,Nrrd格式需要自行转换为nii/nii.gz 格式.(格式转换这个问题困惑了我好久,因为我们实验室只有nrrd格式的数据。最后使用sitk解决了这个问题。)

3.3 注意transform里面的重采样间隔[1.5,1.5,2],和sitk.GetSpacing的X.Y.Z的顺序不一样。例如:我的数据sitk.GetSpacing的间隔是:[0.7,0.7,2.5],但是在MONAI这里要设置成[0.7,2.5,0.7]

3.4 MONAI贴心的设计了 ScaleIntensityRanged,可以把CT里面的HU值限制在(-57,164)之间并标准化到(0,1)。因为脾脏的HU值在(50,70)之间,所以(-57,164)以外的HU值就不考虑了,我的liver分割设置到了(-100,200)。

3.5 这个功能要慎用,CropForegroundd(keys=['image', 'label'], source_key='image')。它直接把你CT的空白部分去掉了,造成CT的size变化。如果你想让分割的结果再重叠到原CT,这个功能就禁用了吧。

3.6 注意train_transforms 和val_transforms 的超参数要一致。

3.7 注意不要一次性载入太多数据train_loader到你的GPU,进程会被killed

4. 对于神经网络架构的理解

这个Unet居然用了残差结构和DiceLoss,整的有点像Vnet了,厉害厉害。DiceLoss就是把Dice这个metric放进了反向传播算法来更新参数。残差,我还没弄懂,哪个大神下场教一下我?

5. 分割结果的展示和导出

这个例程对分割结果的展示做的很好,一行的图像展示了CT/label/Segmentation,可是分割结果没提供导出的功能啊,看得到摸不到欸。

我自己写了一个代码,把分割生成的array导出成nii/nrrd文件,这样就可以用slicer观看3D观感下的分割性能。用sitk resample到CT的spacing/origin/direction,然后写成nii/nrrd文件就可以了。注意numpy.array的XYZ轴的顺序和Sitk.GetArray是不一样的,需要转一下顺序:

seg_array = np.transpose(seg_array,(2,1,0))

还有挺神奇的一点是,MONAI提供的CT和segmentation导出是可以直接map到一起的。但是我的CT和segmentation导出来居然方向是不对的,需要再让segmentation转一下:

seg_array = np.rot90(seg_array, axes=(1,2))

seg_array = np.rot90(seg_array, axes=(1,2))

希望MONAI能画出来这个model的结构,再把niftynet里面的dense-Vnet拿过来就好了。

Ref: https://github.com/Project-MONAI/Tutorials/blob/master/spleen_segmentation_3d.ipynb

最后

以上就是柔弱便当为你收集整理的jupyter分割代码块_3DUnet医学分割速成-MONAI的全部内容,希望文章能够帮你解决jupyter分割代码块_3DUnet医学分割速成-MONAI所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部