使用MONAI和UNet进行端到端3D脾脏分割的编码实现(基于医学CT体积数据)
本教程使用MONAI构建端到端3D医学图像分割流水线,在Medical Segmentation Decathlon Task09数据集上进行脾脏分割。涉及CT体积数据处理、医学图像变换(方向对齐、体素间距归一化、强度窗宽、前景裁剪、基于补丁的采样),训练3D UNet模型进行二元器官分割。采用混合精度训练、DiceCE损失、滑动窗口推理、Dice验证及定性可视化,从原始医学体积到完整的训练-验证-可视化分割系统。
本教程演示了如何使用MONAI库构建一个端到端的3D医学图像分割流水线,目标是基于Medical Segmentation Decathlon Task09数据集进行脾脏分割。我们将处理体积CT扫描数据,应用一系列医学图像变换,包括方向对齐、体素间距归一化、强度窗宽、前景裁剪以及基于补丁的采样,然后训练一个3D UNet模型用于二元器官分割。此外,我们还将采用混合精度训练、DiceCE损失函数、滑动窗口推理、基于Dice的验证以及定性可视化,以了解模型的学习过程以及预测结果与真实掩模的对比。最终,我们将从原始医学体积数据出发,构建一个完整的训练-验证-可视化分割系统。
首先,安装MONAI及其所需的医学成像和可视化依赖项。然后导入PyTorch、NumPy、Matplotlib以及MONAI的主要模块,这些模块用于数据集、变换、模型训练、指标和推理。同时抑制警告以保持笔记本输出整洁。
接下来配置主要参数,包括设备、数据集目录、补丁大小、批次大小、训练轮数和缓存设置。然后创建CT体积的预处理流水线:加载图像、对齐方向、重采样体素间距、缩放强度以及裁剪前景。定义训练和验证变换,训练流水线包括随机裁剪、翻转、旋转和强度偏移。
使用MONAI的DecathlonDataset加载Medical Segmentation Decathlon Task09脾脏数据集,将数据分为训练集和验证集,应用相应的变换,并用PyTorch数据加载器包装。然后创建3D UNet模型,定义DiceCE损失,设置AdamW优化器、学习率调度器、混合精度缩放器、Dice指标和后处理步骤。
运行完整的训练循环,每个epoch在脾脏数据集的裁剪体积补丁上训练3D UNet。使用自动混合精度以减少内存占用并加速GPU训练。定期通过滑动窗口推理验证模型,跟踪Dice分数,并保存最佳检查点。
最后,绘制训练损失和验证Dice分数以观察模型改进。重新加载最佳模型检查点,在单个验证体积上运行滑动窗口推理,并并排显示CT切片、真实掩模和预测分割结果,以定性检查模型性能。
总之,我们完成了一个基于MONAI的实用3D脾脏分割工作流,使用了3D UNet模型。我们准备了Medical Segmentation Decathlon数据集,对CT体积进行了变换和增强,使用DiceCE损失训练模型,通过滑动窗口推理进行验证,并随时间跟踪损失和Dice分数。我们还通过并排比较CT切片、真实标签和模型输出来直观检查最终预测。现在,我们清楚地了解了MONAI如何支持从数据加载和预处理到模型训练、评估、检查点和定性分析的完整医学分割任务。
完整代码和笔记本请查看原文。欢迎关注我们的Twitter、加入ML SubReddit和订阅新闻通讯。