赞
踩
TotalSegmentator
用于对 CT 图像中超过 117 个类别进行分割的工具。它接受了各种不同 CT 图像(不同扫描仪、机构、协议等)的训练,因此应该适用于大多数图像。大部分训练数据集可以从Zenodo下载(1228 个主题)。您还可以在totalsegmentator.com上在线试用该工具。
一句话概要:TotalSegmentator
是在大型数据集上使用nnUNet V2
训练的一个AI模型,可以在CT数据上自动分割全身117个器官(见文末)!同时还可以分割部分血管,脑出血,胸腔积液等(后面会介绍)。
一共有两个版本,各有千秋,选择适合自己的版本
3D Slicer版本
: 之前已经介绍过了,并且获得了广大朋友的喜欢。也是迄今为止Tina姐最受欢迎的教程。它的优势是提供了可视化的界面,自动分割完后,可以对结果进行实时修改。缺点是可调参数比python版少,只能one by one, 没法批量操作。且受网速影响,有的朋友在3D Slicer中并不能顺畅使用。【公-众-号查看】
python版本
: 它的特点是一次安装好后,即可在终端使用少量命令进行批处理。也可以设置想要的分割哪些器官,不用全部分割。对编程能力有一定要求,且分割完的结果需要手动审阅修改。接下来是 python 版本实战
TotalSegmentator 可在 Ubuntu、Mac 和 Windows 以及 CPU 和 GPU 上运行。由于它是个AI模型,最好是在GPU上安装,CPU上只有快速版本,分割又慢效果也差些
首先确保有如下依赖项:
直接在终端(选择合适的虚拟环境)pip
pip install TotalSegmentator
使用TotalSegmentator -h
查看使用说明
快速分割一幅图像
TotalSegmentator -i ct.nii.gz -o segmentations`
注意:允许将包含一名患者的所有 DICOM 切片的 Nifti 文件或文件夹作为输入
注意:如果您在CPU 上运行,请使用该选项--fast
或--roi_subset
来大大提高运行时间。
从交互界面可以看到,当你第一次调用TotalSegmentator
,它会先下载预训练好的模型。这需要一定的时间(取决于你的网络)。第二次使用就不会再下载了。整个分割过程不到1分钟。
这里自动分割结果按照不同器官进行存储。像我这样安装的是V1版本,因此仅分割了104个器官,就有104个分割文件。如图
将原始图像和你的目标器官加载进ITK-SNAP或者3D slicer等标注软件就可以进行手动修改。大大减少标注时间,提升标注效率
通过在命令中增加-ta
参数即可:
TotalSegmentator -i ct.nii.gz -o segmentations -ta <task_name>
ta
可以为如下值
在快速使用案例中,会自动分割所有器官,但实际应用中,我们可能只对其中的一个或几个器官感兴趣。分割太多耗时长,还占内存。这时候怎么处理?
只需要在命令后添加 -rs
参数
TotalSegmentator -i CT1202301051207_ZHOU_JUN/P_to_V.nii.gz -o CT1202301051207_ZHOU_JUN -rs liver
上述命令表示只分割肝脏,如需多个就括起来 [licer kindey_left pancreas]
中间用个空格分开
通过生成所有类的 3D 渲染,让您快速了解分割是否有效以及失败的位置。只需要添加--preview
参数
TotalSegmentator -i CT1202301051207_ZHOU_JUN/P_to_V.nii.gz -o CT1202301051207_ZHOU_JUN/P_to_V_liver --preview
上述命令如果报错OSError: Can not find Xvfb. Please install it and try again
通过下面命令进行安装sudo apt-get install xvfb
讲真,我安装有问题,没解决(如上图)。其实我蛮需要这个功能的,为了解决这个功能,我把电脑都搞崩了,最后重装了驱动。有大佬解决滴滴我一下,TQ。
虽然没直接解决,我绕弯解决了。
如果环境有问题,我们可以直接用官方的docker。当然,前提是安装好了
docker run --gpus 'device=0' --ipc=host -v /absolute/path/to/my/data/directory:/tmp wasserth/totalsegmentator:2.0.0 TotalSegmentator -i /tmp/ct.nii.gz -o /tmp/segmentations
我们之前的结果都是一个器官一个文件,想合并在同一个nii.gz文件,怎么办?
只需要添加--ml
参数,这将保存一个包含所有标签的 nifti 文件,而不是为每个类保存一个文件。在保存 nifti 文件期间节省运行时间
TotalSegmentator -i CT1202301051207_ZHOU_JUN/P_to_V.nii.gz -o CT1202301051207_ZHOU_JUN/P_to_V_seg --ml
其他
以上的功能都仅是针对单个病人进行处理。显然在深度学习中,我们需要勾画几百上千个病人,如何对这些病人进行批量处理变得非常重要。这可不是官方提供的,Tina姐独家配方!!
假设你的数据在train–>patient–>p_to_v.nii.gz.这里有多个patient文件夹。需要对每个文件夹下的p_to_v.nii.gz进行分割。使用循环即可
for i in `ls`; do cd $i; TotalSegmentator -i P_to_V.nii.gz -o ./ --preview; cd ..; done
注意:仅针对LINUX系统,并且熟悉shell的同学。不然你直接复制我的命令可能得不到你想要的结果。
如果你不习惯用终端操作。你也可以在python中调用totalsegmentator
import nibabel as nib
from totalsegmentator.python_api import totalsegmentator
if __name__ == "__main__":
# option 1: provide input and output as file paths
totalsegmentator(input_path, output_path)
# option 2: provide input and output as nifti image objects
input_img = nib.load(input_path)
output_img = totalsegmentator(input_img)
nib.save(output_img, output_path)
文章持续更新,可以关注微公【医学图像人工智能实战营】获取最新动态,一个关注于医学图像处理领域前沿科技的号。坚持以实践为主,手把手带你做项目,打比赛,写论文。凡原创文章皆提供理论讲解,实验代码,实验数据。只有实践才能成长的更快,关注我们,一起学习进步~
我是Tina, 我们下篇博客见~
白天工作晚上写文,呕心沥血
觉得写的不错的话最后,求点赞,评论,收藏。或者一键三连
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。