使用 TensorFlow 和 DLTK 进行生物医学影像分析

来源 | Tensorflow
作者 | 伦敦帝国学院 Martin Rajchl、S. Ira Ktena 和 Nick Pawlowski
【磐创AI导读】:本文授权转载自Tensorflow。本篇博文对生物医学影像深度学习进行了简要介绍,围绕当前工程难点指出一些问题和解决方案,并展示如何针对您的问题启动和运行原型。想要学习更多的机器学习、深度学习知识,欢迎大家点击上方蓝字关注我们的公众号:磐创AI。
DLTK,即 医学成像的深度学习工具包 ,扩展了 TensorFlow, 使针对生物医学影像的深度学习成为可能。此工具包提供了专用运算与函数、模型实现、教程(如本博客中所用)和典型应用的代码示例。
网站:https://dltk.github.io;
来源:https://github.com/DLTK/DLTK;
概述
什么是生物医学影像分析?为什么需要这种分析?
生物医学影像是在不同尺度(即微观、宏观等)下对人体进行的测量。它们具有多种成像模式(如 CT 扫描仪、超声机等)并测量人体的物理特性(如放射强度、对 X 射线的不透明度)。这些影像由临床任务(如诊断)的领域专家(如放射科医师)解释并对医生的决策具有重大影响。

医学影像示例(从左上方到右下方):多序列脑部 MRI:T1 加权、T1 反转恢复和 T2 FLAIR 通道;全身拼接 MRI;平面心脏超声;胸部 X 光片;心脏电影 MRI
生物医学影像通常为体积影像 (3D),有时还会加上时间维度 (4D) 和/或多个通道 (4-5D)(如多序列 MR 影像)。生物医学影像中的差异与自然影像(如照片)中的差异完全不同,因为临床方案的目的是对影像的采集方式进行分层(例如,患者平躺、头部保持正直,等等)。在影像分析过程中,我们的目标是发现细微差异(即一些小区域表明发现异常)。
为什么采用计算机视觉和机器学习?
长期以来,计算机视觉方法一直用于自动分析生物医学影像。近年来,随着深度学习的出现,许多其他机器学习方法被取代,因为深度学习免去了创建手工工程特征的必要,从过程中消除了一个关键的误差来源。此外,完全采用 GPU 加速的网络可以实现快速推断,让分析的数据量得到前所未有的增加(例如,10⁶ 个受试者影像)。
我们能否直接使用深度学习库进行生物医学成像?为什么要创建 DLTK?
之所以要创建 DLTK ,是因为要提供开箱即用并特定于该领域的专业工具。 尽管许多深度学习库向开发者公开了低级运算(如张量乘法等),但许多用于体积影像的较高级别专用运算却并未公开(例如,可区分的 3D 上采样层等),并且由于影像的其他空间维度,我们可能会遇到内存问题(例如,假设影像尺寸为 512x512x256 体素,那么以 float32 格式存储包含 1000 个 CT 影像的数据库的单个副本将需要大约 268 GB)。由于采集的性质不同,一些影像需要特殊的预处理(例如,强度归一化、偏置场校正、去噪、空间归一化/配准等)。
文件格式、头和读取影像
虽然许多成像模式供应商都按照 DICOM 标准格式制作影像并在一系列 2D 切片中保存卷,许多分析库还是依赖于更适合计算和与医学影像连接的格式。我们使用的是 NifTI (或 .nii 格式),这种格式最初开发用于脑部成像,但广泛用于 DLTK 和本教程中的大多数其他体积影像。这种格式和其他格式保存的内容是重建影像容器并将其在物理空间中定位的必要信息。
为此,它需要专用头信息,我们将对用于深度学习的一些属性进行介绍:
-
尺寸和大小存储有关如何重建影像的信息(例如,使用大小向量将体积分解为三维)
-
数据类型
-
体素间距(也是体素的物理尺寸,通常以毫米为单位)
-
物理坐标系原点
-
方向
为什么这些属性很重要?网络将在体素空间中进行训练,这意味着我们将创建形状和尺寸为 [batch_size, dx, dy, dz, channels/features] 的张量并将其提供给网络。网络将在该体素空间中进行训练并假设所有影像(包括未见过的测试影像)在该空间中归一化或者可能有需要泛化的问题。在该体素空间中,特征提取器(如卷积层)将假设体素尺寸各向同性(即,在每个维度中均相同)并且所有影像以相同的方式定向。
然而,由于大多数影像描述的都是物理空间,我们需要从该物理空间转换为常见的体素空间:
如果所有影像均以相同的方式定向(有时我们需要进行配准以在空间内归一化影像:请参见 MIRTK),我们可以通过以下公式计算从物理空间到体素空间的缩放转换:
phys_coords = origin + voxel_spacing * voxel_coord
所有上述信息均为 .nii 头文件中存储的向量。
读取 .nii 影像:可通过一些库读取 .nii 文件并访问和解析头信息以获得 numpy 阵列格式的重建影像容器。我们选择的是 SimpleITK,这是 ITK 库的一种 python 包装器,可用于导入额外的影像过滤器以进行预处理和其他任务。
