首页 > 其他分享 >在3D Slicer中使用 Monai Bundle 和 Model Zoo 标注医学影像数据-CT肺结节检测

在3D Slicer中使用 Monai Bundle 和 Model Zoo 标注医学影像数据-CT肺结节检测

时间:2024-09-03 17:27:05浏览次数:13  
标签:MONAI Slicer 模型 Monai Label 医学影像 CT 3D


在3D Slicer中使用 Monai Bundle 和 Model Zoo 标注医学影像数据-CT肺结节检测

在3D Slicer中使用 Monai Bundle 和 Model Zoo 标注医学影像数据-CT肺结节检测_数据集

导读

本系列涵盖从 3D Slicer 医学图像查看器的基础使用到高级自动分割扩展程序的内容(从入门到高阶!),具体包括软件安装、基础使用教程,自动分割扩展(totalsegmentator, monai label)快速标注数据。

在本系列第三部分中,我们在工作站上安装了 MONAILabel 服务端和 MONAILabel 3D Slicer 客户端。在第四部分内容中,我们从一个简单的腹部CT脾脏分割案例开始,介绍了monai label使用的一些基础用法。在第五部分中,使用radiology app进行全脊柱的分割,并且详细介绍了radiology app所有用法。在第六部分中首次使用monai bundle 和model zoo里面的分割模型在MRI图像上分割全脑133个结构。

本节重点:在这一节中,我们不再进行分割,而是使用monai bundle做检测任务。识别CT胸部图像中可能存在结节的位置,并计算结节的概率。

该系列之前的内容如下:
【添加链接】

Monai Bundle 和 Model Zoo简单介绍

MONAI Model Zoo 提供了一系列由社区开发的医学影像模型,采用 Monai Bundle 格式。Monai Bundle 允许您轻松获取任何来自 MONAI Model Zoo 的模型并将其导入 MONAILabel。

Model Zoo提供的模型包括MRI脑肿瘤分割,CT肺结节检测,病理细胞核分割分类,CT胰腺分割,MRI前列腺分割,CT肾脏分割,CT脾脏分割,MRI脑切片生成等20几个模型。后面会用单独的篇幅分别介绍这些预训练模型的使用。

MONAI Bundle 是一种基于规范和文件结构的方式,用于分发经过训练的 MONAI 模型以及相关元数据、代码、文档和其他资源。这些旨在让您更轻松地以某种格式分发模型,该格式说明了模型的用途、如何使用它、如何重现您用它完成的科学研究,并将其用于 Label 和 Deploy 等其他应用程序。详细的使用教程可以去monai bundle github

接下来我们将用更多案例来演示monai bunlde在3D slicer中的用法

基于monai bundle的CT肺结节检测

在每一个教程开始前,会简单介绍这个预训练模型的基本信息,了解模型才能更好的适配模型,提高标注准确度。

模型简介

  • 名称:Lung nodule ct detection
  • 概述:在 LUNA16 数据集上训练的 CT 图像检测肺结节 3D 预训练模型
  • 作者:MONAI 团队
  • 参考文献:Lin, Tsung-Yi, 等人. “Focal loss for dense object detection.” ICCV 2017
  • 版本:0.5.9

模型概述

预训练模型用于从CT图像中进行肺结节的体积(3D)检测。

该模型在LUNA16数据集上训练,使用了RetinaNet

在3D Slicer中使用 Monai Bundle 和 Model Zoo 标注医学影像数据-CT肺结节检测_数据集_02

训练数据

本示例中我们使用的实验数据集是LUNA16,LUNA16是一个用于CT肺结节检测的公开数据集。使用原始CT扫描数据,目标是识别可能存在结节的位置,并为每个位置分配结节的概率。

在这些文件中,“box”的值是世界坐标中的真实值框。

数据重采样:LUNA16中的原始CT图像具有不同的体素大小。第一步是将它们重新采样为相同的体素大小。在此模型中,我们将它们重新采样为0.703125 x 0.703125 x 1.25毫米 请按照https://github.com/Project-MONAI/tutorials/tree/main/detection中第3.1节的说明进行重采样。

训练配置

  • 实际模型输入:192 x 192 x 80
  • 优化器:Adam
  • 学习率:1e-2
  • 损失函数:BCE loss and L1 loss
  • input:1 channel - List of 3D CT patches
  • output: 训练模式: classification and box regression loss.评估模式:预测框、分类标签和分类分数的字典列表。

如果想要自己训练,可以参考https://monai.io/model-zoo.html

注意事项

想要标注更精确,可以使用训练数据相同的分辨率。

在3D slicer中进行CT肺结节检测

  • step1: 激活环境
conda activate monailabel
  • step2: 下载monaibundle app

如在之前的教程中下载过请忽略此步骤

monailabel apps --name monaibundle --download --output apps

在3D Slicer中使用 Monai Bundle 和 Model Zoo 标注医学影像数据-CT肺结节检测_数据集_03


可以前往图片上地址查看下载了什么

  • step3: 下载实验数据

提供三个数据集,看自己需要选择一个进行下载

  • LUNA16数据集:
    肺结节检测模型使用LUNA16数据集进行训练和评估。如果您打算使用LUNA16的完整数据集,请参考训练数据集中的说明下载数据,并按规范创建和预处理图像。
  • monai示例数据:
    在本教程中,我们准备了一个示例子集,已经重新采样并可以直接使用。该子集仅用于演示。点击此处下载monai sample data

或者使用以下命令直接下载和解压。

mkdir datasets
wget "https://github.com/Project-MONAI/MONAILabel/releases/download/data/detection_dataset.zip" -O datasets/detection_dataset.zip
unzip datasets/detection_dataset.zip -d datasets/detection_dataset
  • 十项全能挑战赛数据集:
    该检测模型还支持MSD Task06_Lung数据集进行推理。请注意,此数据集是为结节分割任务创建的。我们不使用分割掩码,只使用图像进行推理。

使用以下monailabel API自动下载数据集。

monailabel datasets --download --name Task06_Lung --output datasets

Tina姐使用的是Task06_Lung,数据集有8G,下载不下来可以联系我。

  • step4: 启动 MONAI Label Server
monailabel start_server --app apps/monaibundle --studies datasets/Task06_Lung/imagesTr --conf models lung_nodule_ct_detection

这个命令中,配置的预训练模型为lung_nodule_ct_detection,注意大小写

  • step5(可选步骤):修改包中的检测参数。lung_nodule_ct_detection包可以设置框预测的概率阈值。在apps/monaibundle/model/lung_nodule_ct_detection_v0.5.0/configs/inference.json中,它定义了score_thresh=0.02
"detector_ops": [
    "[email protected]_target_keys(box_key='box', label_key='label')",
    "[email protected]_box_selector_parameters(score_thresh=0.02, topk_candidates_per_level=1000, nms_thresh=0.22, detections_per_img=300)",
    "[email protected]_sliding_window_inferer(roi_size=@infer_patch_size, overlap=0.25, sw_batch_size=1, mode='constant', device='cpu')"
]

此参数将影响最终预测输出中的框数量。然后在3D Slicer中显示所有框的ROI。

如果用户希望限制在3D Slicer中显示的预测框数量,可以设置更高的score_thresh,例如score_thresh=0.5score_thresh=0.6甚至更高。

  • step6:启动 3D Slicer

启动3D Slicer和MONAI Label插件,绿色刷新符号连接服务端,点解nextsample加载数据,最后点击run等待自动勾画检测框:如不会请参考系列之前的内容

在3D Slicer中使用 Monai Bundle 和 Model Zoo 标注医学影像数据-CT肺结节检测_人工智能_04

重要提示:如果您的MONAI Label插件来自较旧版本,请更新和使用最新的MONAI Label插件。检测任务需要在3D Slicer标记中绘制ROI节点。

该过程在mac上勾画的时间为14分钟,建议使用GPU。

  • step7: 编辑结果和提交

用户可以使用3D Slicer的ROI框编辑器手动编辑推理标签,点击顶部的Markups选项卡,使用调整ROI的工具。

  1. 手动编辑推理标签:
  • 打开3D Slicer,点击顶部的Markups选项卡。
  • 使用ROI框编辑器调整和编辑ROI。
  1. 保存注释:
  • 编辑完成后,返回MONAI Label插件界面。
  • 点击Submit Label按钮,将注释保存到文件系统中。
  1. 注释存储路径:
  • 注释将保存到研究数据集中的labels/final文件夹。
  • 例如,在此用例中,真实标签将保存到datasets/Task06_Lung/imagesTr/labels/final文件夹中。
  1. 加载注释:
  • 保存的注释将以JSON文件形式存储,使用3D Slicer的ROINode格式。
  • 可以使用3D Slicer加载该JSON文件,以查看和编辑注释。

通过这些步骤,您可以使用3D Slicer手动编辑和保存肺结节检测的注释标签,并在需要时重新加载进行查看和进一步编辑。

在3D Slicer中使用 Monai Bundle 和 Model Zoo 标注医学影像数据-CT肺结节检测_数据集_05


从图中可以看到,预测的检测框有12个,而真正肺结节只有一个,假阳性太高,可以使用step5的方法降低假阳性。

  • step8:主动学习

MONAI Label中的主动学习(active learning)和交互式微调模型具有突出功能,用户可以在保存新的注释标签时随时训练他们的模型。点击“Train”按钮,MONAI Label服务器将获取保存的最终真实标签,并微调之前的模型。

在3D Slicer中使用 Monai Bundle 和 Model Zoo 标注医学影像数据-CT肺结节检测_数据_06

以下是JSON文件中注释框坐标的示例:

{
    "ROINode": {
        "label": "Lung Nodule",
        "type": "Box",
        "coordinates": [
            {
                "x": 32,
                "y": 45,
                "z": 20,
                "width": 15,
                "height": 15,
                "depth": 10
            },
            {
                "x": 60,
                "y": 70,
                "z": 40,
                "width": 20,
                "height": 20,
                "depth": 15
            }
        ]
    }
}

通过这些步骤,您可以使用MONAI Label中的主动学习和交互式微调功能,在保存新的注释标签时不断改进您的模型。

用户可以使用最新微调的模型进行自动分割。主动学习过程将选择未标记的批次数据。

下一张图像被选中,已经训练过的图像将被标记为已标记数据,不会被选择用于下一次标记批次。主动学习策略如“first/random”将用于选择要获取的未标记数据。

  • step9: 重复直到所有数据都被注释和训练

重复获取数据和主动学习过程,直到所有未标记的数据都被注释和训练。

每个训练循环中,新的最佳指标模型将保存到“model/model.pt”文件中,在这个用例中,模型将保存到“apps/monaibundle/lung_nodule_ct_detection/model/model.pt”。

结论

本教程演示了使用MONAI Label和monaibundle应用进行肺结节CT检测任务。教程介绍了主动学习过程、自动推理、检测编辑器、提交标签和保存模型。
具体步骤总结如下:

  1. 安装和启动3D Slicer和MONAI Label插件:
  • 参考“Hello World”教程安装3D Slicer和MONAI Label插件。
  1. 选择模型并获取数据:
  • 在MONAI Label插件中选择lung_nodule_ct_detection模型。
  • 加载数据,进行标记和注释。
  1. 手动编辑推理标签:
  • 使用3D Slicer中的ROI框编辑器手动调整和编辑标签。
  • 返回MONAI Label插件,点击“Submit Label”按钮保存注释。
  1. 主动学习和微调模型:
  • 每次保存新的注释标签后,点击“Train”按钮微调模型。
  • 主动学习过程选择未标记数据进行新一轮训练。
  1. 自动分割:
  • 使用最新微调的模型进行自动分割。
  • 使用主动学习策略选择未标记数据,确保新数据被用来改进模型。
  1. 重复直到所有数据都被注释和训练:
  • 持续进行数据获取和主动学习过程,直到所有数据都被标记和训练。
  • 每次训练循环中,保存新的最佳模型到指定路径。

通过这些步骤,您可以高效地使用MONAI Label和monaibundle应用进行肺结节检测任务,利用主动学习和自动分割功能不断改进模型性能。

注意:3D slicer是系列课程,很多讲过的知识点没有反复强调。你如果对其中的某一个过程不是很了解,一定要去看之前的内容。

可以关注微公【医学图像人工智能实战营】

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

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

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

在3D Slicer中使用 Monai Bundle 和 Model Zoo 标注医学影像数据-CT肺结节检测_计算机视觉_07


标签:MONAI,Slicer,模型,Monai,Label,医学影像,CT,3D
From: https://blog.51cto.com/u_16159492/11909369

相关文章

  • 在3D slicer中使用MONAI Label 辅助标注提升标注速度-安装教程
    在3Dslicer中使用AI辅助标注可以大大减少我们的标注时间成本。例如,一个有经验的临床医生标注一个CT胰腺和胰腺癌需要20分钟,而在3dslicer中使用monailabelAI插件标注,只需要2-5分钟。而这个过程完全是自动的,你只需要对结果进行微调即可完成标注。备注:本文涉及到很多之前写过的文......
  • 使用 Monai Bundle 和 Model Zoo 对医学影像数据进行分类-全脑133个结构分割
    使用MonaiBundle和ModelZoo对医学影像数据进行分类-全脑133个结构分割文章目录导读MonaiBundle和ModelZoo简单介绍基于monaibundle的MRI全脑分割模型简介模型描述模型训练细节训练数据注意事项电脑配置完整的133个脑结构列表在3Dslicer使用全脑结构分割模型完整的133......
  • C#医学影像管理系统源码,PACS系统源码带三维重建,实现检查预约、病人信息登记、计算机阅
    C#医学影像管理系统源码医学影像存储与传输系统源码PACS系统源码带三维重建PACS影像存取与传输系统以实现医学影像数字化存储、诊断为核心任务,从医学影像设备(如CT、CR、DR、MR、DSA、RF等)获取影像,集中存储、综合管理医学影像及病人相关信息,建立数字化工作流程。PACS系统可......
  • 【2】Kaggle 医学影像数据读取
    赛题名称:RSNA2024LumbarSpineDegenerativeClassification中文:腰椎退行性病变分类kaggle官网赛题链接:https://www.kaggle.com/competitions/rsna-2024-lumbar-spine-degenerative-classification/overview文章安排①、如何用python读取dcm/dicom文件②、基于matplotlib......
  • 3D - 3D Slicer与NVIDIA Clara分割服务器进行集成
    设置3DSlicer与NVIDIAClara分割服务器进行集成可以通过几个步骤实现。以下是一个详细的指南,帮助你搭建并使用自己的分割服务器。前提条件3DSlicer:确保你已经安装了最新版本的3DSlicer。NVIDIAClaraDeploySDK:你需要安装并配置NVIDIAClaraDeploySDK和相关工具。Docke......
  • 基于聚类分析的医学图像分割算法研究在医学领域,图像分割是医学影像诊断中的关键步骤,其
    基于聚类分析的医学图像分割算法研究在医学领域,图像分割是医学影像诊断中的关键步骤,其目的在于从复杂的图像背景中准确提取出病灶区域,为医生提供更为精确的病变信息。近年来,随着计算机技术的飞速发展,基于聚类分析的医学图像分割算法逐渐受到了广泛关注。聚类分析是一种无监督......
  • 基于Kaggle学习MONAI(三)2D-Segmentation例程代码详解1
    1简介         MONAI网站提供了2D分类/分割、3D分类/分割等例程代码如下图所示,通过学习例程代码,初学者能够尽快掌握MONAI框架,但是由于开源框架软件版本更新较快、各模块功能难以协调等原因,这些例程往往无法在Kaggle平台直接运行。本文对MONAI官网第二个例程,即2D分割......
  • 3D Slicer编译错误:Variable Slicer_WC_LAST_CHANGED_DATE is expected to be defined.
    3DSlicer编译错误:VariableSlicer_WC_LAST_CHANGED_DATEisexpectedtobedefined. 解决:1、找到SlicerMacroExtractRepositoryInfo.cmake路径:F:\1_Slicer\CMake\SlicerMacroExtractRepositoryInfo.cmake2、添加 set(${wc_info_prefix}_WC_LAST_CHANGED_DATE"0000-00......
  • 3D Slicer编译错误,无法打开包括文件: “pthread.h”解决
    3DSlicer编译错误:fatalerrorC1083:无法打开包括文件:“pthread.h”:Nosuchfileordirectory解决方案:安装pthread库 1、下载pthread库pthreads-w32-2-9-1-release.zip地址:https://sourceforge.net/projects/pthreads4w/2、解压zip解压后,您应该能看到几个文件夹,......
  • PACS医学影像系统源码,支持Worklist服务,三维影像后处理和分析功能
    PACS/RIS医学影像存储和传输系统,实现从预约、登记、分诊、排队叫号、检查、诊断阅片、报告发布、自助胶片打印等流程化管理。PACS系统应用在医院影像科时,它直接与CT、MR、ECT、DSA和DR等提供DICOM标准图像的医学设备进行软硬对接。该系统应用在超声、内窥镜、病理等科室时,提供视频......