Skip to main content

CT和MR中基于CNN的全肝和肝病灶分割

项目描述

pyliverlesionseg - CT 和 MR 中基于 CNN 的肝脏和肝脏病变分割

  • pyliverlesionseg 是一个基于 Keras 和 Tensorflow 的 Python 框架,用于执行基于体素的肝脏和病变分割。它基于DeepVoxNet 版本 1构建,该版本是 Keras 的深度学习处理框架,由 KU Leuven 医学影像研究中心 (MIRC) 开发。
  • 它允许对图像的片段(即补丁、子体积)进行训练。段由 subject_id 和中心体素的坐标标识。

参考

  1. Robben, D.、Bertels, J.、Willems, S.、Vandermeulen, D.、Maes, F.、Suetens, P. (2018)。DeepVoxNet:3D 图像的体素预测。报告编号 KUL/ESAT/PSI/1801。
  2. 唐,X. 等人。基于深度学习和人工调整的全肝分割在SIRT中临床使用,欧洲核医学与分子成像杂志,2020年47期,链接

安装

从 python 包索引安装

pip install pyliverlesionseg

从github下载

安装包的另一种方法(特别是对于开发人员)是克隆这个存储库或下载 github 版本。使用此方法时,请确保环境变量PYTHONPATH包含克隆/下载包的位置。


肝脏分割的离线模型预测

  • 输入图像为DICOM格式
python predict_liver_lesion_seg.py <data_input> --seg_liver

<data_input> 是图像(CT或MR)的输入dicom文件的目录或需要用户定义的nifti文件(CT或MR)的路径。

  • 输入图像(例如 CT)是 NIFTI 格式
python predict_liver_lesion_seg.py <data_input> --seg_liver --input_nifti --Modality CT

<data_input> 是图像(CT或MR)的输入dicom文件的目录或需要用户定义的nifti文件(CT或MR)的路径。

肝脏和肝脏病变分割的 Dicom 服务

除了离线分段的脚本之外,我们还提供了两个脚本来为分段运行 dicom 服务。这些服务可以通过以下方式启动:

python dcm_server_liver_seg.py
python dcm_server_liver_lesion_seg.py

这些服务启动一个 dicom 服务器,该服务器正在侦听可以为应分段的传入 dicom 系列指定的端口。在一系列到达后(在 dicom 关联被释放后),开始 CNN 处理并将生成的 RTstruct 发送回发送方。为了分割肝脏病变,必须首先发送定义整个肝脏的 RTstruct,然后是要分割的图像。像往常一样,-h可用于查看所有命令行参数。默认监听端口为 11112 和 11113,RTstruct 通过端口 104 发回。

病变分割的模型预测

  • 输入图像为DICOM格式
python predict_liver_lesion_seg.py <data_input> --seg_lesion

<data_input> 是图像(CT或MR)的输入dicom文件的目录或需要用户定义的nifti文件(CT或MR)的路径。

  • 输入图像(例如 CT)是 NIFTI 格式
python predict_liver_lesion_seg.py <data_input> --seg_lesion --input_nifti --Modality CT

<data_input> 是图像(CT或MR)的输入dicom文件的目录或需要用户定义的nifti文件(CT或MR)的路径。


CNN 训练数据集的组织

输入数据需要按如下方式组织:

应该有一个文件夹(其目录在位置参数中指定data_path)包含一个Training用于训练数据集的子文件夹和/或一个Testing用于测试数据集的子文件夹。在每个子文件夹(例如Training)中,应该有子文件夹case_0, case_1, case_2, ...,其中每个子文件夹都包含一个 NIFTI 格式的预处理图像(文件名在可选参数中指定inputs)和一个预处理的 ground-truth NIFTI 格式的分段(文件名在可选参数中指定outputs)。

`-- Training
    |-- case_0
    |   |-- preprocessed_image.nii
    |   |-- segmentation.nii
    |-- case_1
    |   |-- preprocessed_image.nii
    |   |-- segmentation.nii
    ...
`-- Testing
    |-- case_0
    |   |-- preprocessed_image.nii
    |   |-- segmentation.nii
    |-- case_1
    |   |-- preprocessed_image.nii
    |   |-- segmentation.nii
    ...

培训期间用于验证的案例也应存储在该Training文件夹中。要指定用于训练和验证的案例,您可以使用--training_index_range--validation_index_range参数。

肝脏分割的模型训练

  • 脚本“train_liver_lesion_seg.py”的默认参数用于 CNN 肝脏分割训练。对于 CNN 病灶分割训练,需要给出一些参数的新值。

  • CNN 模型的输入图像采用 NIFTI 格式。

  • 预处理:原始图像在放入CNN模型之前需要进行预处理。用于预处理原始图像的代码可以在 pyliverlesionseg/CNN_liver_lesion_seg_CT_MR_functions.py 中找到。

    1. 应首先裁剪原始图像,使裁剪后的图像仅包含横轴切片中的整个腹部和 z 方向上的整个肝脏。这可以通过 pyliverlesionseg.CNN_liver_lesion_seg_CT_MR_functions.py 中的函数“crop_ct_image”(用于 CT)或“crop_mr_image”(用于 MR)来完成。这两个函数将生成一个保存在 csv 文件中的边界框。您也可以自己定义边界框。
    2. 之后,裁剪后的图像需要重新采样到 3 mm 的各向同性体素大小。
    3. 裁剪和重采样的 CT 需要在 -200 HU 和 200 HU 之间进行裁剪,并通过线性映射归一化到 [-0.5, 0.5] 的强度范围。裁剪和重采样的 MR 需要在 MR 的最小强度和最小强度 + 0.8 * MR 的强度范围之间进行裁剪,并通过线性映射归一化到 [-0.5, 0.5] 的强度范围。
    4. 地面实况肝脏分割也应使用边界框进行裁剪,并重新采样为 3 mm 的各向同性体素大小。
  • 用于训练 CNN 进行肝脏分割的脚本可以通过以下方式运行:

python train_liver_lesion_seg.py <data_path>

<data_path> 是包含需要由用户定义的训练和/或测试数据集的文件夹的目录。

肝病灶分割模型训练

  • CNN 模型的输入图像采用 NIFTI 格式。

  • 预处理:原始图像在放入CNN模型之前需要进行预处理。用于预处理原始图像的代码可以在 pyliverlesionseg/CNN_liver_lesion_seg_CT_MR_functions.py 中找到。

    1. 原始 CT 需要在 -200 HU 和 200 HU 之间进行裁剪,并通过线性映射归一化到 [-0.5, 0.5] 的强度范围。原始 MR 强度减去肝面罩内 MR 的中值强度,夹在肝面罩内集中式 MR 的最小和最大强度之间,并通过线性映射归一化到 [-0.5, 0.5] 的强度范围.
    2. 标准化图像被重新采样为 [1 mm, 1 mm, 3 mm] 的体素大小。
    3. 重采样的图像被重采样的肝掩码所掩盖,并使用重采样的肝掩码的边界框进行裁剪。重采样肝脏掩码外的图像强度设置为 -0.5。
    4. 地面实况病变分割也应该重新采样到 [1 mm, 1 mm, 3 mm] 的体素大小,并使用重新采样的肝脏掩码的边界框进行裁剪。
  • 用于训练 CNN 进行病变分割的脚本可以通过以下方式运行:

python train_liver_lesion_seg.py <data_path> --nb_subjects 180 --training_index_range 145 --validation_index_range 145 180 --run_folder_name Runs_lesion_seg_output_size_92_84_42 --network_architecture_id 2 --segment_size 92 84 42 --no_center_sampling --sgd_batch_size 4 --prediction_batch_size 4 --nb_samples_training 320 --nb_samples_validation 140 --max_number_of_subjects_used_for_training 80 --max_number_of_subjects_used_for_validation 35 --nb_subepochs 5 

<data_path> 是包含需要由用户定义的训练和/或测试数据集的文件夹的目录。


致谢

该项目已获得欧洲 Horizo​​n2020 ITN 项目 (HYBRID, MSCA 764458, https://www.hybrid2020.eu/home.html ) 和法兰德斯研究基金会 (FWO, 赠款 G082418N) 的资助。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

pyliverlesionseg-0.3.tar.gz (27.5 MB 查看哈希

已上传 source

内置分布

pyliverlesionseg-0.3-py3-none-any.whl (27.5 MB 查看哈希

已上传 py3