TotalSegmentator
TotalSegmentator是一种可以在任何CT或MR图像中分割大多数主要解剖结构的工具。它经过了广泛的不同CT和MR图像(不同的扫描仪、机构、协议等)的训练,因此应该能够很好地适用于大多数图像。大部分训练数据集可以在这里下载:CT数据集(1228名受试者)和MR数据集(298名受试者)。您也可以在totalsegmentator.com在线试用该工具。
公告:我们最近增加了对MR图像的支持。通过使用任务-ta total_mr
来尝试,或在我们的论文中查看更多详细信息。
CT主要类别:
MR主要类别:
点击这里查看所有可用结构。
由巴塞尔大学医院研究与分析部门创建。 如果您使用它,请引用我们的Radiology AI论文(免费预印本)。如果您将其用于MR图像,请引用TotalSegmentator MRI论文。由于TotalSegmentator在很大程度上基于nnUNet,请同时引用它。
安装
TotalSegmentator可在Ubuntu、Mac和Windows上运行,支持CPU和GPU。
安装依赖项:
- Python >= 3.9
- Pytorch >= 2.0.0
可选:
- 如果使用
--preview
选项,您必须安装xvfb(apt-get install xvfb
)和fury(pip install fury
)
安装Totalsegmentator
pip install TotalSegmentator
使用方法
对于CT图像:
TotalSegmentator -i ct.nii.gz -o segmentations
对于MR图像:
TotalSegmentator -i mri.nii.gz -o segmentations --task total_mr
注意:允许使用Nifti文件或包含一个患者所有DICOM切片的文件夹(或zip文件)作为输入。
注意:如果在CPU上运行,请使用
--fast
或--roi_subset
选项以大大提高运行时间。
注意:这不是医疗设备,不适用于临床用途。
子任务
除了默认任务(total
)外,还有更多包含更多类别的子任务。如果任务名以_mr
结尾,则适用于MR图像,否则适用于CT图像。
可供任何用途开放使用:
- total:默认任务,包含117个主要类别(点击此处查看类别列表)
- total_mr:默认任务,包含56个MR图像的主要类别(点击此处查看类别列表)
- lung_vessels:肺血管(引用论文),肺气管支气管
- body:身体、躯干、四肢、皮肤
- cerebral_bleed:脑内出血(引用论文)*
- hip_implant:髋关节植入物*
- coronary_arteries:冠状动脉*
- pleural_pericard_effusion:胸腔积液(引用论文),心包积液(引用论文)*
- head_glands_cavities:左眼、右眼、左眼晶状体、右眼晶状体、左视神经、右视神经、左腮腺、右腮腺、右下颌下腺、左下颌下腺、鼻咽、口咽、下咽、右鼻腔、左鼻腔、右听道、左听道、软腭、硬腭(引用论文)
- head_muscles:右咬肌、左咬肌、右颞肌、左颞肌、右外翼肌、左外翼肌、右内翼肌、左内翼肌、舌头、右二腹肌、左二腹肌
- headneck_bones_vessels:喉腔、甲状软骨、舌骨、环状软骨、右颧弓、左颧弓、右茎突、左茎突、右颈内动脉、左颈内动脉、右颈内静脉、左颈内静脉(引用论文)
- headneck_muscles:右胸锁乳突肌、左胸锁乳突肌、上咽缩肌、中咽缩肌、下咽缩肌、右斜方肌、左斜方肌、右颈阔肌、左颈阔肌、右肩胛提肌、左肩胛提肌、右前斜角肌、左前斜角肌、右中斜角肌、左中斜角肌、右后斜角肌、左后斜角肌、右胸骨甲状肌、左胸骨甲状肌、右甲状舌骨肌、左甲状舌骨肌、右椎前肌、左椎前肌(引用论文)
*:这些模型并非在完整的totalsegmentator数据集上训练,而是在一些小型数据集上训练。因此,预期它们的稳健性较差。
需要许可证(非商业用途的免费许可证可在这里获取。商业许可请联系jakob.wasserthal@usb.ch):
- heartchambers_highres:心肌、左心房、左心室、右心房、右心室、主动脉、肺动脉(在亚毫米分辨率上训练)
- appendicular_bones:髌骨、胫骨、腓骨、跗骨、跖骨、足趾骨、尺骨、桡骨、腕骨、掌骨、手指骨
- tissue_types:皮下脂肪、躯干脂肪、骨骼肌
- tissue_types_mr:皮下脂肪、躯干脂肪、骨骼肌(适用于MR图像)
- brain_structures:脑干、蛛网膜下腔、静脉窦、透明隔、小脑、尾状核、豆状核、岛叶皮质、内囊、脑室、中央沟、额叶、顶叶、枕叶、颞叶、丘脑(注意:这适用于CT)(引用论文,因为我们的模型部分基于此)
- vertebrae_body:所有椎骨的椎体(不包括椎弓)
- face:面部区域(用于匿名化)
使用方法:
TotalSegmentator -i ct.nii.gz -o segmentations -ta <task_name>
对所有结构和任务感到困惑?查看这里以搜索可用的结构和任务。
标签ID到类名的映射可在这里找到。
高级设置
--device
: 选择cpu
或gpu
或gpu:X(例如,gpu:1 -> cuda:1)
--fast
: 使用此选项可获得更快的运行时间和更少的内存需求。它将运行较低分辨率的模型(3mm而不是1.5mm)。--roi_subset
: 接受以空格分隔的类名列表(例如spleen colon brain
)并仅预测这些类别。可以大大节省运行时间和内存。对于小类别(如前列腺)可能准确度较低。--preview
: 这将生成所有类别的3D渲染,让您快速了解分割是否成功以及失败的位置(请查看输出目录中的preview.png
)。--ml
: 这将保存一个包含所有标签的nifti文件,而不是为每个类别保存一个文件。在保存nifti文件时节省运行时间。(索引到类名的映射请参见此处)。--statistics
: 这将生成一个statistics.json
文件,包含每个类别的体积(单位:mm³)和平均强度。--radiomics
: 这将生成一个statistics_radiomics.json
文件,包含每个类别的放射组学特征。您需要安装pyradiomics才能使用此功能(pip install pyradiomics
)。
通过docker运行
我们还提供了一个docker容器,可以按以下方式使用
docker run --gpus 'device=0' --ipc=host -v /absolute/path/to/my/data/directory:/tmp wasserth/totalsegmentator:2.2.1 TotalSegmentator -i /tmp/ct.nii.gz -o /tmp/segmentations
运行v1版本
如果您想继续使用TotalSegmentator v1(例如,因为您不想更改您的流程),可以使用以下命令安装:
pip install TotalSegmentator==1.5.7
v1的文档可以在这里找到。v1的错误修复在 v1_bugfixes
分支中开发。
我们的Radiology AI出版物引用的是TotalSegmentator v1。
资源需求
Totalsegmentator具有以下运行时间和内存需求(使用Nvidia RTX 3090 GPU):
(1.5mm是普通模型,3mm是 --fast
模型。在v2中,由于我们添加了更多类别,运行时间略有增加。)
如果您想减少内存消耗,可以使用以下选项:
--fast
: 这将使用较低分辨率的模型--body_seg
: 这将在处理之前将图像裁剪到身体区域--roi_subset <类别列表>
: 这将只预测一部分类别--force_split
: 这将把图像分成3部分,然后逐一处理。(不要对小图像使用此选项。将这些图像分割成更小的图像会导致视野太小。)--nr_thr_saving 1
: 使用多个线程保存大图像会占用大量内存
Python API
您可以通过Python运行totalsegmentator:
import nibabel as nib
from totalsegmentator.python_api import totalsegmentator
if __name__ == "__main__":
# 选项1:提供输入和输出的文件路径
totalsegmentator(input_path, output_path)
# 选项2:提供输入和输出作为nifti图像对象
input_img = nib.load(input_path)
output_img = totalsegmentator(input_img)
nib.save(output_img, output_path)
您可以在这里查看所有可用的参数。在主环境中运行应该可以避免一些多进程问题。
分割图像在扩展头部包含类别名称。如果您想加载这些额外的头部信息,可以使用以下代码(需要 pip install xmltodict
):
from totalsegmentator.nifti_ext_header import load_multilabel_nifti
segmentation_nifti_img, label_map_dict = load_multilabel_nifti(image_path)
安装最新的主分支(包含最新的错误修复)
pip install git+https://github.com/wasserth/TotalSegmentator.git
其他命令
如果您想知道CT图像的对比相位,可以使用以下命令(需要 pip install xgboost
)。更多详情可以在这里找到:
totalseg_get_phase -i ct.nii.gz -o contrast_phase.json
如果您想将一些子类(例如肺叶)合并成一个二值掩码(例如整个肺),可以使用以下命令:
totalseg_combine_masks -i totalsegmentator_output_dir -o combined_mask.nii.gz -m lungcomm
通常,运行TotalSegmentator时会自动下载权重。如果您想使用额外的命令下载权重(例如在构建docker容器时),请使用:
totalseg_download_weights -t <task_name>
获得非开放任务的许可证号后,您可以使用以下命令设置:
totalseg_set_license -l aca_12345678910
训练/验证/测试集划分
数据集的确切划分可以在数据集内的 meta.csv
文件中找到。这被用于我们论文中的验证。
高分辨率模型(1.5mm)的准确结果可以在这里找到。论文在补充材料图11中展示了这些数字。
重新训练模型和运行评估
有关如何在TotalSegmentator数据集上自己训练nnU-Net,如何像我们论文中那样将数据分割为训练/验证/测试集,以及如何运行与我们论文中相同的评估的更多信息,请参见此处。
常见问题
ITK加载错误 当您遇到以下错误消息时
ITK ERROR: ITK only supports orthonormal direction cosines. No orthonormal definition was found!
您应该执行
pip install SimpleITK==2.0.2
或者您可以尝试
fslorient -copysform2qform input_file
fslreorient2std input_file output_file
分割效果不佳 当您得到不好的分割结果时,请检查以下几点:
- 您的输入图像是否包含原始的HU值,还是强度值被重新缩放到不同的范围?
- 患者在图像中的位置是否正常?(在轴向视图中,脊柱是否在图像底部?在冠状视图中,头部是否在图像顶部?)
其他
- TotalSegmentator会发送匿名使用统计数据,以帮助我们进一步改进。您可以通过在
~/.totalsegmentator/config.json
中将send_usage_stats
设置为false
来停用它。 - 在变更和改进中,您可以看到v1和v2之间的差异概述。
参考
更多详情请参见我们的Radiology AI论文(可免费获取的预印本)。 如果您使用此工具,请按以下方式引用:
Wasserthal, J., Breit, H.-C., Meyer, M.T., Pradella, M., Hinck, D., Sauter, A.W., Heye, T., Boll, D., Cyriac, J., Yang, S., Bach, M., Segeroth, M., 2023. TotalSegmentator: Robust Segmentation of 104 Anatomic Structures in CT Images. Radiology: Artificial Intelligence. https://doi.org/10.1148/ryai.230024
由于TotalSegmentator大量基于nnUNet,请也引用它。 此外,如果您能告诉我们您使用此工具的目的,我们将非常感激。您也可以告诉我们在未来的版本中应该添加哪些类别。您可以在这里这样做。
类别详情
下表显示了 total
任务的所有类别列表。
TA2是一种标准化的解剖命名方式。大多数TotalSegmentator名称遵循这一标准。 对于某些类别,它们有所不同,您可以在下表中看到。
这里您可以找到TotalSegmentator类别到SNOMED-CT代码的映射。
索引 | TotalSegmentator 名称 | TA2 名称 |
---|---|---|
1 | 脾脏 | |
2 | 右肾 | |
3 | 左肾 | |
4 | 胆囊 | |
5 | 肝脏 | |
6 | 胃 | |
7 | 胰腺 | |
8 | 右肾上腺 | 肾上腺 |
9 | 左肾上腺 | 肾上腺 |
10 | 左肺上叶 | 左肺上叶 |
11 | 左肺下叶 | 左肺下叶 |
12 | 右肺上叶 | 右肺上叶 |
13 | 右肺中叶 | 右肺中叶 |
14 | 右肺下叶 | 右肺下叶 |
15 | 食管 | |
16 | 气管 | |
17 | 甲状腺 | |
18 | 小肠 | 小肠 |
19 | 十二指肠 | |
20 | 结肠 | |
21 | 膀胱 | |
22 | 前列腺 | |
23 | 左肾囊肿 | |
24 | 右肾囊肿 | |
25 | 骶骨 | |
26 | 第一骶椎 | |
27 | 第五腰椎 | |
28 | 第四腰椎 | |
29 | 第三腰椎 | |
30 | 第二腰椎 | |
31 | 第一腰椎 | |
32 | 第十二胸椎 | |
33 | 第十一胸椎 | |
34 | 第十胸椎 | |
35 | 第九胸椎 | |
36 | 第八胸椎 | |
37 | 第七胸椎 | |
38 | 第六胸椎 | |
39 | 第五胸椎 | |
40 | 第四胸椎 | |
41 | 第三胸椎 | |
42 | 第二胸椎 | |
43 | 第一胸椎 | |
44 | 第七颈椎 | |
45 | 第六颈椎 | |
46 | 第五颈椎 | |
47 | 第四颈椎 | |
48 | 第三颈椎 | |
49 | 第二颈椎 | |
50 | 第一颈椎 | |
51 | 心脏 | |
52 | 主动脉 | |
53 | 肺静脉 | |
54 | 头臂干 | |
55 | 右锁骨下动脉 | |
56 | 左锁骨下动脉 | |
57 | 右颈总动脉 | |
58 | 左颈总动脉 | |
59 | 左头臂静脉 | |
60 | 右头臂静脉 | |
61 | 左心耳 | |
62 | 上腔静脉 | |
63 | 下腔静脉 | |
64 | 门静脉和脾静脉 | 肝门静脉 |
65 | 左髂动脉 | 髂总动脉 |
66 | 右髂动脉 | 髂总动脉 |
67 | 左髂静脉 | 髂总静脉 |
68 | 右髂静脉 | 髂总静脉 |
69 | 左肱骨 | |
70 | 右肱骨 | |
71 | 左肩胛骨 | |
72 | 右肩胛骨 | |
73 | 左锁骨 | 锁骨 |
74 | 右锁骨 | 锁骨 |
75 | 左股骨 | |
76 | 右股骨 | |
77 | 左髋部 | |
78 | 右髋部 | |
79 | 脊髓 | |
80 | 左臀大肌 | 臀大肌 |
81 | 右臀大肌 | 臀大肌 |
82 | 左臀中肌 | 臀中肌 |
83 | 右臀中肌 | 臀中肌 |
84 | 左臀小肌 | 臀小肌 |
85 | 右臀小肌 | 臀小肌 |
86 | 左自主肌 | |
87 | 右自主肌 | |
88 | 左髂腰肌 | 髂腰肌 |
89 | 右髂腰肌 | 髂腰肌 |
90 | 大脑 | |
91 | 颅骨 | |
92 | 左第1肋骨 | |
93 | 左第2肋骨 | |
94 | 左第3肋骨 | |
95 | 左第4肋骨 | |
96 | 左第5肋骨 | |
97 | 左第6肋骨 | |
98 | 左第7肋骨 | |
99 | 左第8肋骨 | |
100 | 左第9肋骨 | |
101 | 左第10肋骨 | |
102 | 左第11肋骨 | |
103 | 左第12肋骨 | |
104 | 右第1肋骨 | |
105 | 右第2肋骨 | |
106 | 右第3肋骨 | |
107 | 右第4肋骨 | |
108 | 右第5肋骨 | |
109 | 右第6肋骨 | |
110 | 右第7肋骨 | |
111 | 右第8肋骨 | |
112 | 右第9肋骨 | |
113 | 右第10肋骨 | |
114 | 右第11肋骨 | |
115 | 右第12肋骨 | |
116 | 胸骨 | |
117 | 肋软骨 |
"total_mr"任务的类别映射:
索引 | TotalSegmentator 名称 | TA2 名称 |
---|---|---|
1 | 脾脏 | |
2 | 右肾 | |
3 | 左肾 | |
4 | 胆囊 | |
5 | 肝脏 | |
6 | 胃 | |
7 | 胰腺 | |
8 | 右肾上腺 | 肾上腺 |
9 | 左肾上腺 | 肾上腺 |
10 | 左肺 | |
11 | 右肺 | |
12 | 食管 | |
13 | 小肠 | 小肠 |
14 | 十二指肠 | |
15 | 结肠 | |
16 | 膀胱 | |
17 | 前列腺 | |
18 | 骶骨 | |
19 | 脊椎 | |
20 | 椎间盘 | |
21 | 脊髓 | |
22 | 心脏 | |
23 | 主动脉 | |
24 | 下腔静脉 | |
25 | 门静脉和脾静脉 | 肝门静脉 |
26 | 左髂动脉 | 髂总动脉 |
27 | 右髂动脉 | 髂总动脉 |
28 | 左髂静脉 | 髂总静脉 |
29 | 右髂静脉 | 髂总静脉 |
30 | 左肱骨 | |
31 | 右肱骨 | |
32 | 腓骨 | |
33 | 胫骨 | |
34 | 左股骨 | |
35 | 右股骨 | |
36 | 左髋部 | |
37 | 右髋部 | |
38 | 左臀大肌 | 臀大肌 |
39 | 右臀大肌 | 臀大肌 |
40 | 左臀中肌 | 臀中肌 |
41 | 右臀中肌 | 臀中肌 |
42 | 左臀小肌 | 臀小肌 |
43 | 右臀小肌 | 臀小肌 |
44 | 左自主肌 | |
45 | 右自主肌 | |
46 | 左髂腰肌 | 髂腰肌 |
47 | 右髂腰肌 | 髂腰肌 |
48 | 左股四头肌 | |
49 | 右股四头肌 | |
50 | 左大腿内侧肌群 | |
51 | 右大腿内侧肌群 | |
52 | 左大腿后部肌群 | |
53 | 右大腿后部肌群 | |
54 | 左缝匠肌 | |
55 | 右缝匠肌 | |
56 | 大脑 |