使用 SimpleITK 和 PyTorch 读取 dicom 文件的性能

问题描述

我想以pytorch张量格式直接将图像从内存加载到python。 我通过替换这些行修改了 GetArrayViewFromImage() 函数

image_memory_view = _GetmemoryviewFromImage(image)
array_view = numpy.asarray(image_memory_view).view(dtype = dtype)

作者:

image_memory_view = _GetmemoryviewFromImage(image)
array_view = torch.as_tensor(image_memory_view,dtype = dtype)

实际上它太慢了,我用:

image_memory_view = _GetmemoryviewFromImage(image)
array_view = numpy.asarray(image_memory_view).view(dtype = dtype)
array_view  = torch.as_tensor(array_view)

现在我有两个问题:

  1. 它要慢得多,我真的不知道为什么用 numpy 读取它并转换它更快。
  2. 即使我添加了 dtype 参数并返回了一个具有正确 dtype 的张量,它也会读取错误(例如,无论我选择什么 torch.dtype,numpy 中的 -1000 都被读取为 252),这在阅读时不是问题使用 numpy 和转换,为什么会发生这种情况?

解决方法

虽然这不能直接回答您的问题,但我强烈建议您使用 torchio 包,而不是自己处理这些 IO 问题(torchio 在幕后使用 SimpleITK)。