为机器学习框架提供全切片图像流。
项目描述
HistomicsStream
概述
本项目的目标是创建一个机器学习的全切片图像文件读取器。该读取器允许用户从全切片图像格式中提取像素数据,并支持在机器学习训练和推理期间常用的读取模式。该软件包目前支持TensorFlow 2。
Python安装
histomics_stream
可以通过Python wheels轻松安装。如果您不希望安装到当前的Python环境中,您应该首先创建并激活一个 Python虚拟环境(venv) 以在其中工作。然后,从命令行运行以下命令
sudo apt update
sudo apt install -y python3-openslide openslide-tools
pip install histomics_stream 'large_image[openslide]' \
scikit_image --find-links https://girder.github.io/large_image_wheels
通过子包支持额外功能,例如,使用 histomics_stream[tensorflow,torch,zarr]
而不是 large_image[openslide]
。
可以通过使用,例如,large_image[openslide,ometiff,openjpeg,bioformats]
而不是 large_image[openslide]
来支持额外的图像读取器。
在启动 python3
之后,使用以下命令导入 histomics_stream
包
import histomics_stream as hs
这已在 tensorflow:2.6.2-gpu
和 tensorflow:2.8.0-gpu
上进行了测试。
历史
版本1.0.6之前,该项目被称为 tensorflow_reader
。
研究表示
histomics_stream
分为两步工作。首先,它构建一个代表研究的对象。其次,从这个研究对象中,它构建一个 tensorflow
Dataset
对象,该对象可以高效地从文件中读取像素数据。研究对象的描述见 StudyObject.md。
简介
病理学是使用显微镜研究活检组织以诊断疾病的一种方法。通过化学染色薄组织切片以突出细胞结构,制备组织标本的玻片。传统上,病理学家通过检查玻片来寻找疾病的明显迹象,但最近,整个玻片的图像(WSI)被用于诊断,这些图像以高倍放大整个玻片。一项单一的研究可能涉及数千个WSI,每个WSI包含数十亿像素,需要由医务人员进行分析。基于机器学习的计算机视觉算法也越来越被用于在研究和临床实践中检测、分类和测量WSI中的结构。由于流行的机器学习框架和计算硬件是为分析更小的图像而构建的,因此开发分析WSI的算法具有挑战性。例如,一个典型的WSI有120,000 × 80,000像素,相当于191万个224 × 224像素的图像,这是机器学习框架中常用的典型大小。
我们正在开发软件工具以简化计算机视觉算法的开发。这些工具使计算机视觉和机器学习专家更容易处理WSI数据,并将吸引更多人进入计算病理学领域,从而显著加速研究。由美国国立卫生研究院资助的项目,由Kitware,Inc.、西北大学、Wake Forest医学院和埃默里大学合作进行,使用机器学习来寻找感兴趣的区域。histomics_stream
位于工作流程的开始。具体来说,histomics_stream
负责高效访问将用于拟合新机器学习模型或使用已学习的模型在新的输入中预测感兴趣区域的数据。
一个25 mm × 25 mm(1英寸 × 1英寸)的组织病理学组织标本,在典型的40倍放大下成像,将大约是100,000 × 100,000像素,对于一个图像来说,是不压缩的30GB RGB数据。一项研究可能包含10-10,000个这样的全玻片图像。为了机器学习目的,如提出具有诊断价值的区域,这些图像通常被分割成瓦片,例如每个256 × 256像素,在机器学习操作中可能需要处理数百万到数十亿的瓦片。特别是在机器学习的预测步骤中,简单地从磁盘读取这些数据可能是运行时性能的最大决定因素。
几个Python库,如 openslide
和 large_image
,能够以高效的方式读取全玻片图像。来自包如 Zarr
的额外功能是将单个图像的数据分布在多个文件中。这些包能够在不读取整个图像的情况下,从整个玻片图像的任何地方高效地读取瓦片。这些在基于单线程CPU的应用程序中效果很好。然而,机器学习涉及大规模并行化、复杂的调度、基于GPU的计算和相对有限的GPU可访问内存。
方法
histomics_stream
是一个Python包,它使得访问用于机器学习的大量全切片图像数据集变得高效。在第一步中,用户指定数据集的详细信息以及所需的操作参数。用户指定哪些图像将被处理,它们在哪里可以找到,以及每个图像关联的元数据(例如,队列、主题标识符),每个图像的“块”大小以及所需放大倍数。在许多测试场景中,2048 × 2048像素的块大小效果良好,但用户也可以指定其他值;块大小表示每次读取时应该从磁盘读取多少像素数据,在默认情况下意味着一个8 × 8的瓦片网格,每个瓦片256 × 256像素,可以高效地通过每次磁盘读取来读取。在某些图像类型(如TIF和SVS)中,图像文件包含多个分辨率的图像数据。histomics_stream
根据用户指定的所需放大倍数选择要使用的原始分辨率。
在第一步中,用户还指定了操作参数。每个瓦片的大小应该是多少?瓦片应该以网格方式均匀选择吗?如果是这样,相邻瓦片之间应该有多少重叠?用户可以提供一个掩码,指示应使用网格中的哪些瓦片。或者,用户可以提供一个要使用的瓦片的显式列表,无论它们是否在网格上。用户可以指示选择随机子集的瓦片,而不是其他允许的瓦片。用户可以指示从允许的瓦片中选择随机子集。
作为第二步,histomics_stream
从研究描述中创建一个TensorFlow Dataset对象。按照TensorFlow的范式,创建是以懒加载、非急切的方式进行的。通过调用TensorFlow命令,histomics_stream
创建一个TensorFlow执行图,该图指定了数据工作流中的依赖关系。结合TensorFlow的调度和并行功能,这个执行图简单有效地指导从磁盘读取瓦片,以便在TensorFlow模型操作中直接且高效地使用。然后,由histomics_stream
创建的TensorFlow Dataset直接用于TensorFlow操作进行机器学习,无论是用于模型拟合、模型评估还是在新输入数据中使用模型进行预测。
结果
histomics_stream
提高了运行时性能,并简化了所需TensorFlow执行图的构建。
性能
histomics_stream
包显著提高了运行时性能。在一个典型示例中,以256 × 256像素的非重叠瓦片读取19,784 × 27,888像素的单个全切片图像,产生一个77 × 108的8316瓦片网格。在large_image
包中,它能够无缝读取多种文件格式,并有效地从大图像中读取瓦片;使用large_image
时,包括读取和机器学习预测在内的运行时间为每秒16.9个瓦片,使用单个GeForce RTX 2080 Ti。使用histomics_stream
,这个工作流程吞吐量提高到了每秒27.9个瓦片,这提高了65%的性能。大部分性能提升来自于一次读取一个数据块,而不是一个瓦片。额外的性能提升来自于对TensorFlow读取调度的依赖;TensorFlow的图执行调度优化整个工作流程的整体性能。
实现
histomics_stream
的步骤在Jupyter lab笔记本example/tensorflow_stream.ipynb
中进行了演示,该笔记本也可在Google Colab上找到。构建描述研究数据集的Python字典非常简单,histomics_stream
实现了关键步骤。TensorFlow的复杂性得到了无缝处理。例如,TensorFlow中并行化循环的语法,这对于运行时性能至关重要,通常不是很直观;histomics_stream
提供了所需的并行性,而不暴露这种复杂性。同样,TensorFlow对条件控制流的态度可能很情绪化,需要证明应该产生相同形状的对象的替代执行分支实际上确实如此;histomics_stream
的设计赋予了用户,例如,在几种替代策略下高效选择瓦片的权力,而不将这种图执行复杂性暴露给用户。
结论
TensorFlow图执行接口可能具有挑战性和不直观性。相反,生物信息学模型创建者可以使用histomics_stream
指定要分析的数据集。histomics_stream
负责TensorFlow执行图创建,并提供显著的运行时性能改进。
致谢
这项工作得到了美国国立卫生研究院国家癌症研究所癌症研究信息技术(NIH NCR ITCR)U01资助,项目编号为5U01CA220401-04,项目名称为“用于定量数字病理学分析和综合预后建模的信息学工具”,由Lee A. D. Cooper(西北大学)、Metin N. Gurcan(Wake Forest医学院)和Christopher R. Flowers(埃默里大学)担任主要研究员,Kitware, Inc.担任分包商。主要由Lee A. Newberg(Kitware, Inc.)实施。
项目详情
下载文件
下载适合您平台文件。如果您不确定选择哪一个,请了解有关安装软件包的更多信息。
源分布
构建分布
histomics_stream-2.5.3.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8fd98e7141cd6eb3bcbe67ee2ef656b8bd798c2bccf247b41903397093816857 |
|
MD5 | ba3e26064f8726d623f3bfee25e1196f |
|
BLAKE2b-256 | 9273d14f83895533ca54c172798b1e84f50ed41fa448ceff3b30db561c8108c1 |