张量流tf.data.Dataset医学成像API

2024-05-15 01:41:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我是医学影像专业的学生。我需要构造一个神经网络来进行图像分割。我有一个285个受试者的数据集,每一个都有4个模式(T1,T2,T1ce,FLAIR)+他们各自的切分基本事实。一切都是三维的,分辨率为240x240x155体素(这是BraTS数据集)。在

我们知道,由于内存的原因,我不能在GPU上输入整个图像。我必须对图像进行预处理,并将其分解为三维重叠的补丁(40x40x40的子卷),我使用scikit-image将其视为窗口,然后在TFRecords文件中序列化这些窗口。由于每个面片在每个方向上都有10个体素重叠,因此每个体积上总共有5292个面片。对于TFI,每个文件的大小仅为1 GB。另外,我必须计算它们各自的分割权重图,并将其存储为补丁。分段也作为补丁存储在同一个文件中。在

我最终必须包括所有其他的模式,这将需要不少于兆字节的存储。我还必须记住,我还必须在后台和前台之间采样相等数量的补丁(类平衡)。在

所以,我想我必须在每一个训练步骤之前(同时希望不要减慢训练速度),就在飞行中完成所有的预处理步骤。我不能使用tf.data.Dataset.from_tensors(),因为我无法在RAM中加载所有内容。我不能使用tf.data.Dataset.from_tfrecords(),因为之前的预处理会占用大量的存储空间,最终会耗尽。在

问题是:我还能干净利落地完成这项工作,并在图像推理训练后重新加载模型?在

非常感谢,请随时询问其他细节。在

皮埃尔·卢克


Tags: 文件数据from图像data专业tf模式
1条回答
网友
1楼 · 发布于 2024-05-15 01:41:04

最后,我找到了解决问题的方法。在

我首先裁剪对象的图像,而不应用实际的裁剪。我只测量切片我需要裁剪到大脑的体积。然后我将所有的数据集图像序列化到一个TFRecord文件中,每个训练示例都是一个图像模式、原始图像的形状和切片(另存为Int64特性)。在

我随后解码了TF记录。每个训练样本都将被重塑为它在特征中包含的形状。我使用tf.stack()方法将所有图像模式堆叠到一个堆栈中。我使用先前提取的切片裁剪堆栈(然后裁剪应用于堆栈中的所有图像)。最后,我使用tf.random_crop()方法获得一些随机补丁,它允许我随机裁剪一个4-D数组(高、宽、深、通道)。在

我唯一还没弄明白的是数据扩充。因为所有这些都是以张量格式发生的,所以我不能使用普通Python和NumPy来旋转、剪切、翻转一个4-D数组。我需要在tf.Session()中执行此操作,但我希望避免这种情况,直接输入训练句柄。在

对于求值,我在TFRecords文件中序列化每个文件只序列化一个测试主题。测试对象也包含了所有的模式,但是由于没有张量流方法来提取4-D中的斑块,因此使用Scikit Learnextract_patches()方法对图像进行了小面积的预处理。我将这些补丁序列化到TFRecords。在

这样,训练TFRecords就小得多了。我可以使用批量预测来评估测试数据。在

感谢您的阅读,欢迎发表评论!在

相关问题 更多 >

    热门问题