0.5 版本有什么新变化#
反转空间变换和测试时数据增强
数字病理中的病灶检测
用于交互式分割的 DeepGrow 模块
各种可用性改进
反转空间变换和测试时数据增强#
在深度学习工作流程中,通常需要反转先前应用的空间变换(如调整大小、翻转、旋转、缩放、裁剪、填充等),例如,在归一化数据空间中处理图像数据后恢复到原始成像空间。我们增强了几乎所有的空间变换,为其添加了 inverse
操作,并在 v0.5 版本中发布了这一实验性功能。用户可以轻松反转一个变换后的数据项或一批数据项的所有空间变换。这也可以通过使用 TransformInverter
处理器在工作流程中实现。
如果流水线包含随机变换,用户可能希望观察这些变换对输出的影响。典型的方法是将相同的输入通过不同的随机实现多次通过变换。然后使用反向变换将所有结果移动到公共空间,并计算度量。MONAI 为此功能提供了 TestTimeAugmentation
,默认情况下会计算 mode
、mean
、standard deviation
和 volume variation coefficient
。
反转变换和 TTA 教程通过示例详细介绍了 API。
(1) 最后一列是模型输出的反转数据:
(2) mode
、mean
和 standard deviation
的 TTA 结果:
数字病理中的病灶检测#
MONAI 开始支持数字病理深度学习任务。病理检测组件的初始实现包括
使用 NVIDIA cuCIM 库实现高效全玻片图像 IO
基于 Patch 的采样和训练策略,带有 SmartCache 机制
用于病灶检测的 FROC 测量
病灶 ROI 的概率后处理。
用于交互式分割的 DeepGrow 模块#
为了实现训练和推理过程中带有手动输入的交互式工作流程,此版本中包含了 DeepGrow 组件的重新实现。DeepGrow 是一种基于深度学习的半自动化分割方法,旨在成为用于医学图像感兴趣区域勾画的“智能”交互式工具。
一个端到端示例展示于 project-monai/tutorials
。
基于学习的图像配准#
从 v0.5 版本开始,MONAI 为构建基于学习的 2D/3D 配准工作流程提供了实验性功能。这包括作为损失函数的图像相似性度量、作为模型正则化的弯曲能量、网络架构、以及形变模块。这些组件可用于构建主要的无监督和弱监督算法。
下图显示了使用 MONAI 对同一患者在不同时间点采集的 CT 图像进行配准的结果
各种可用性改进#
医学图像格式的 IO 工厂#
医学领域存在许多流行的图像格式,它们差异很大且包含丰富的元数据信息。为了在同一个流水线中轻松处理不同的医学图像格式,MONAI 提供了 LoadImage
变换,它可以根据支持的后缀并按照以下优先顺序自动选择图像读取器
调用此加载器时用户在运行时指定的读取器。
列表中从最新注册到最先注册的读取器。
默认读取器:(nii, nii.gz -> NibabelReader), (png, jpg, bmp -> PILReader), (npz, npy -> NumpyReader), (其他 -> ITKReader)。
ImageReader
API 非常直观,用户可以轻松扩展以创建自己的定制图像读取器。
有了这些预定义的图像读取器,MONAI 可以加载以下格式的图像:NIfTI
、DICOM
、PNG
、JPG
、BMP
、NPY/NPZ
等。
将变换后的数据保存为 NIfTI 或 PNG 文件#
为了将图像转换为文件或调试变换链,MONAI 提供了 SaveImage
变换。用户可以将此变换注入变换链中以保存结果。
自动确保 channel-first
数据形状#
医学图像具有不同的形状格式。它们可以是 channel-last
、channel-first
甚至 no-channel
。例如,我们可能希望加载多个 no-channel
图像并将它们堆叠为 channel-first
数据。为了改善用户体验,MONAI 提供了一个 EnsureChannelFirst
变换,可以根据元信息自动检测数据形状并将其一致地转换为 channel-first
格式。
网络架构#
各种可直接使用的网络架构,包含来自 torch.hub
的预训练模型权重。
结果写入#
目前,MONAI 支持将模型输出作为 NIfTI 文件或 PNG 文件用于分割任务,以及作为 CSV 文件用于分类任务。并且写入器可以根据输入图像中的 original_shape
或 original_affine
信息恢复数据间距、方向或形状。
很快将支持丰富的格式,同时自动计算输出的相关统计数据和评估指标。
针对不同输入/输出类别的迁移学习#
迁移学习
是一种非常常见且高效的训练方法,特别是在医学特定领域,获取用于训练的大型数据集可能很困难。因此,从预训练的检查点进行迁移学习可以显著提高模型指标并缩短训练时间。
MONAI 提供了 CheckpointLoader
用于在训练前加载工作流程的检查点,它允许当前网络的某些 层名称
与检查点不匹配,或者某些 层形状
与检查点不匹配,这在当前任务具有不同的输入图像类别或输出类别时非常有用。
C++/CUDA 优化模块#
为了加速某些繁重的计算过程,C++/CUDA 实现是一种令人印象深刻的方法,通常可以带来数百倍的性能提升。MONAI 包含一些 C++/CUDA 优化模块,例如 Resampler
、Conditional random field (CRF)
、Fast bilateral filtering using the permutohedral lattice
,并且完全支持 CI/CD 中的 C++/CUDA 程序和软件包构建。