MONAILabel in 3D Slicer 案例1: 在腹部CT中自动分割脾脏
导读
本系列涵盖从 3D Slicer 医学图像查看器的基础使用到高级自动分割扩展程序的内容(从入门到高阶!),具体包括软件安装、基础使用教程,自动分割扩展(totalsegmentator, monai label)快速标注数据。
在本系列第三部分中,我们在工作站上安装了 MONAILabel 服务端和 MONAILabel 3D Slicer 客户端。
这是在3D Slicer 中使用monai label标注系列的的第四部分内容,我们将从一个简单的案例开始,带你学会使用monai label标注数据。
[ MONAI Label 是一个服务器-客户端系统,它利用 AI 促进交互式医学图像注释。它是一个开源且易于安装的生态系统,可以在具有单个或多个 GPU 的机器上本地运行。服务器和客户端都在同一台/不同的机器上工作。它与MONAI共享相同的原理。
MONAI Label 减少了注释新数据集的时间和精力,并通过不断从用户交互和数据中学习,使 AI 能够适应手头的任务。MONAI Label 允许研究人员和开发人员以用户的方式与他们的应用程序交互,从而不断改进他们的应用程序。最终用户(临床医生、技术人员和一般注释者)受益于 AI 的不断学习,并更好地理解最终用户试图注释的内容。]
下表列出了MONAI Label支持的基本场景、模式、查看器和一般数据类型
从图中第一行可以看到,可对放射学领域‘Radiology’3D 图像进行交互式和自动分割.交互式工具包括 DeepEdit 和 Deepgrow,用于积极改进训练后的模型和部署。并且只针对CT和MRI图像,不包括x线图像。图像格式可以是NIfTI/NRRD/DICOM
MONAI Label初认识
首先,打开终端,激活monailabel环境conda activate monailabel
激活后,输入monailabel -h
查看基础用法
没有正确运行的话,请检查你的安装是否正确
【添加安装链接】
为了帮助初学者尤其是临床医生理解这个命令的用法。请仔细阅读下面的说明:
基本命令结构
-
monailabel
:这是你要运行的命令。 -
-h
或--help
:这是一个可选参数,意思是显示帮助信息。运行monailabel -h
会显示所有可用的子命令及其用途。 -
-v
或--version
:这是另一个可选参数,意思是显示软件的版本信息。
子命令
monailabel
命令有四个子命令,你可以用它们来执行不同的任务:
- start_server:启动应用服务器。
- apps:列出或下载示例应用程序。
- datasets:列出或下载示例数据集。
- plugins:列出或下载查看器插件。
每个子命令还有自己的帮助信息,具体用法如下:
用法示例
- 显示帮助信息:
monailabel -h
这会显示所有子命令的列表及其简要说明。 - 启动应用服务器:
monailabel start_server
这会启动应用服务器,让你可以开始使用这个工具。这个是重点功能,使用’monailabel start_server -h’查看具体用法。特别注意图片上打勾的地方,是每次运行都要配置的参数信息
- 列出或下载示例应用程序:
monailabel apps
这会显示所有可用的示例应用程序,并提供下载选项。
查看子命令的用法:monailabel apps -h
- 列出或下载示例数据集:
monailabel datasets
这会显示所有可用的示例数据集,并提供下载选项。 - 列出或下载查看器插件:
monailabel plugins
这会显示所有可用的查看器插件,并提供下载选项。
接下来的教程就会使用这些命令来完成,遇到问题时请再回来看看命令的用法,你会有更清晰的认知。
使用monailabel预置模型自动分割脾脏
step1: 激活环境
step2:下载 radiology app
把radiology下载到‘apps’文件夹,请记住你的apps地址
step3:下载示例数据
使用 monailabel API 下载 MSD 脾脏数据集作为示例数据集。任务是从 CT 图像中进行脾脏的体积(3D)分割。
可以前往文件夹查看下载信息,如因为网速下载不下来数据可联系Tina姐。之前下载过此数据可直接将数据放到此目录下,无需重复下载。
step4: 启动MONAI Label Server
segmentation_spleen
模型将在启动 MONAI Label 服务器时自动下载。网络和检查点将在 monailabel 命令的初始化步骤中进行处理。
Tina姐:一个简单的服务端启动命令你总得告诉它你用什么app,分割哪个数据集,用哪个预置model
启动好后,可以看看程序响应,了解它加载的模型来自哪里,加载的数据信息,以及提供的端口号(默认为8000,见下方图片打勾的地方)
如果你顺利到这一步,那么恭喜您,成功启动了服务端。
如果遇到bug:如 ImportError: cannot import name ‘AddChanneld’ from 'monai.transforms’可尝试将monai版本降到1.2。
step5: 打开3D Slicer加载模型和数据
服务端启动好后,就可以打开3D Slicer,并加载MONAI Label模块。加载之后,如下图,点击绿色刷新符号启动服务,如果没有正常启动,把step4中的地址复制进来(http://0.0.0.0:8000)再点刷新
我们在启动服务端时,告诉了monailabel数据地址对不对,点击Next Sample
就可以把数据加载进来。数据加载有三种方式:随机,正序,倒序加载。可以在Strategy
里面选择
step6: 使用模型进行分割
加载好数据之后,在Auto Segmentation
模块下点击run按钮,就开始自动分割了,分割运行时,鼠标会打转转,等分割好了就正常了。在这个案例中,我在mac上CPU分割一例脾脏的时间是1分钟。
注意:在“模型”文件夹中启动MONAI Label服务器时,将下载预先训练好的模型。例如,在这个用例中,下载的预训练模型保存在“apps/radiology/model/pretrained_segmentation_spleen.pt”中。
step7:查看和手动编辑分割并保存
自动分割好后,点击Segment Editor
可以修改和查看所有的分割目标,点击show 3D
可以在图上显示三维表面轮廓。如果对分割的细节不满意可以,可以使用手动工具进行矫正。
标注完成后,单击Active Learning
模块中Submit Label
将标签保存到文件系统中。
注:最终注释将保存到数据集中的“labels/final”文件夹中,例如,在本用例中,标签将保存到datasets/Task09_Spleen/imagesTr/labels/finall
step8:主动学习微调模型
主动学习和交互式微调模型在MONAI标签中突出了功能,用户可以在保存新的注释标签时随时训练他们的模型。单击Active Learning
模块中Train
按钮,MONAI Label服务器将获取保存的最终标签,并对先前的模型进行微调。
用户可以使用最新的微调模型进行自动分割。主动学习过程将选择未标记的批次数据,也就是说下一个选择的图像,已经被用来训练的图像将不会再次标注
但是我在笔记本演示的时候,训练准确率一直为0.不知道是不是版本问题。
step9: 重复交互式标记过程
重复提取数据并进行第step8的主动学习过程,直到对所有未标记的数据进行注释和训练。
对于每个训练循环,新的最佳度量模型将保存在“model/<model_name>.pt”中,在本用例中,将保存“apps/radiology/model/sectionation_spleen.pt”。有关详细的训练统计数据和步骤模型,请参阅“apps/radiology/model/sectionaation_spleen/train_01”,
结论
本教程演示了MONAI label与radiology app的基本用法,其中介绍了脾脏分割任务。包括主动学习过程、自动分割、分割编辑器、提交标签和保存模型。我们在标记数据集时强调了交互式学习过程,借助monai平台可以实现增量改进,使研究人员和临床医生更高效的标注医疗数据。
可以关注微公【医学图像人工智能实战营】
我是Tina, 我们下篇博客见~
白天工作晚上写文,呕心沥血
觉得写的不错的话最后,求点赞,评论,收藏。或者一键三连