MONAILabel in 3D Slicer 案例1: 在腹部CT中自动分割脾脏

server/2024/11/14 20:18:55/

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 命令有四个子命令,你可以用它们来执行不同的任务:

  1. start_server:启动应用服务器。
  2. apps:列出或下载示例应用程序。
  3. datasets:列出或下载示例数据集。
  4. plugins:列出或下载查看器插件。

每个子命令还有自己的帮助信息,具体用法如下:

用法示例

  • 显示帮助信息
    monailabel -h
    这会显示所有子命令的列表及其简要说明。

  • 启动应用服务器
    monailabel start_server
    这会启动应用服务器,让你可以开始使用这个工具。这个是重点功能,使用’monailabel start_server -h’查看具体用法。特别注意图片上打勾的地方,是每次运行都要配置的参数信息

  • 列出或下载示例应用程序
    monailabel apps
    这会显示所有可用的示例应用程序,并提供下载选项。

查看子命令的用法:monailabel apps -h

  • 列出或下载示例数据集
    monailabel datasets
    这会显示所有可用的示例数据集,并提供下载选项。

  • 列出或下载查看器插件
    monailabel plugins
    这会显示所有可用的查看器插件,并提供下载选项。

接下来的教程就会使用这些命令来完成,遇到问题时请再回来看看命令的用法,你会有更清晰的认知。

使用monailabel预置模型自动分割脾脏

step1: 激活环境

conda activate monailabel 

step2:下载 radiology app

monailabel apps --download --name radiology --output apps

把radiology下载到‘apps’文件夹,请记住你的apps地址

step3:下载示例数据

使用 monailabel API 下载 MSD 脾脏数据集作为示例数据集。任务是从 CT 图像中进行脾脏的体积(3D)分割。

monailabel datasets --download --name Task09_Spleen --output datasets

可以前往文件夹查看下载信息,如因为网速下载不下来数据可联系Tina姐。之前下载过此数据可直接将数据放到此目录下,无需重复下载。

step4: 启动MONAI Label Server

segmentation_spleen模型将在启动 MONAI Label 服务器时自动下载。网络和检查点将在 monailabel 命令的初始化步骤中进行处理。

monailabel start_server --app apps/radiology --studies datasets/Task09_Spleen/imagesTr --conf models segmentation_spleen

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服务器将获取保存的最终标签,并对先前的模型进行微调。

主动学习流程图

用户可以使用最新的微调模型进行自动分割。主动学习过程将选择未标记的批次数据,也就是说下一个选择的图像,已经被用来训练的图像将不会再次标注

monai官方示意图

但是我在笔记本演示的时候,训练准确率一直为0.不知道是不是版本问题。

Tina姐训练示意图

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姐,一起学习进步~

我是Tina, 我们下篇博客见~

白天工作晚上写文,呕心沥血

觉得写的不错的话最后,求点赞,评论,收藏。或者一键三连

在这里插入图片描述


http://www.ppmy.cn/server/108359.html

相关文章

网络安全的历史

如今&#xff0c;网络安全几乎成为各大公司和利益相关者关注的焦点。但在早期&#xff0c;网络安全的概念非常模糊。 直到多年以后&#xff0c;由于网络攻击和危险实体威胁的频繁发生&#xff0c;网络安全的发展才受到重视。这些措施的发展成为了网络安全的演变。 网络安全起…

Go语言Time包的使用

原文链接&#xff0c;关注可获取更新 time包 Go语言中有关于时间和日期的方法都在time包里面&#xff0c;Go语言的time包为开发者提供了一套全面而简洁的工具来处理时间相关的操作。包括解析和格式化时间字符串&#xff0c;计算时间差和时区转换等&#xff0c;time包时Go语言…

【数据结构篇】~链式二叉树(附源码)

链式二叉树 前言&#xff08;含头文件&#xff09;头文件 1.链式二叉树的组成2.前、中、后、层序遍历1.前序遍历2.中序遍历3.后序遍历 3.结点个数以及高度等​4.判断二叉树是否为完全二叉树 前言&#xff08;含头文件&#xff09; 之前的堆是特殊的二叉树是顺序结构的二叉树&a…

MySQL中的事务

一、事务是什么??? 事务&#xff08;Transaction&#xff09;&#xff0c;就是将一组SQL语句放在同一批次内去执行&#xff0c;如果一个SQL语句出错&#xff0c;则该批次内 的所有SQL都将被取消执行。 二、事务的特性 原子性&#xff1a;意味着数据库中的事务执行是作为原…

34. 打字机效果 水平滚动贴合

打字机效果 创建打字机效果动画。 定义两个动画,typing 用于字符动画,blink 用于光标动画。使用 ::after 伪元素在容器元素中添加光标。使用 JavaScript 为内部元素设置文本,并设置包含字符数的 --characters 变量。这个变量用于文本动画。使用 white-space: nowrap 和 overfl…

LuaJit分析(五)LuaJit filename分析

LuaJit执行文件过程分析 通过之前对luajit -b命令的分析可知&#xff0c;在luajit.c文件的runargs函数中&#xff0c;用于手机参数&#xff0c;对相应的参数调用对应的函数&#xff0c;若返回LUA_OK则执行handle_script函数&#xff0c;该函数用于执行一个lua脚本文件&#xf…

基础概念与简单数据结构的笔记02

学习内容: 栈&#xff08;Stack&#xff09;&#xff1a; 栈的定义、基本操作&#xff08;Push、Pop、Peek&#xff09;、应用场景。 队列&#xff08;Queue&#xff09;&#xff1a; 队列的定义、基本操作&#xff08;Enqueue、Dequeue&#xff09;、应用场景。双端队列&#…

【JPCS独立出版】2024电驱系统与控制工程国际学术研讨会(EDSCE 2024,10月18-20)

2024电驱系统与控制工程国际学术研讨会&#xff08;EDSCE 2024&#xff09;将于2024年10月18-20日在中国本溪隆重举行。 本次会议将集中讨论电驱系统与控制工程的最新研究成果&#xff0c;旨在建立一个高水平的学术交流平台&#xff0c;以便领域内的专家学者、工程师和技术研发…