首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >深度学习-生成三维多模态数据补丁

深度学习-生成三维多模态数据补丁
EN

Stack Overflow用户
提问于 2021-08-06 21:54:20
回答 1查看 483关注 0票数 0

我选择了基于深度学习的脑肿瘤语义分割问题。我正在使用BRATS2015数据集。它有274例患者MRI扫描,每个大小为240x240x155。每个病人有四种治疗方式(T1,T2,T1c,FLAIR)。因此,我使用这些模式作为网络中的渠道。

在理想的世界中,我的3D UNet网络的输入可以在channels_last模式下具有形状(Batch_size,240,240,155,4)。但是,图形卡显然没有设备来处理这种大小的数据。因此,我需要把我的MRI扫描转换成补丁。

这就是我困惑的地方。对于单通道三维数据来说,获得补丁相对容易。为此,我们有许多库和助手函数。我面临的问题是为多模数据生成补丁,即带有通道的三维数据。

  • 我已经考虑过为每个通道分别生成补丁并将最终结果连接起来的想法,但是我相信如果我单独处理它,而不是直接为多模式数据生成补丁,我可能会丢失一些多通道信息。

我查看了patchify库,在这里我们可以使用下面的代码生成补丁

代码语言:javascript
运行
复制
from patchify import patchify, unpatchify

#This will split the image into small images of shape [3,3,3]
patches = patchify(image, (3, 3, 3), step=1)

reconstructed_image = unpatchify(patches, image.shape)

但我不知道如何生成多模式补丁。是否有一种使用patchify或任何其他库/助手函数来实现此操作的方法?

EN

回答 1

Stack Overflow用户

发布于 2021-08-07 14:50:28

您可能希望通过区块修补您的数据集。文件上说

输入n维数组的块视图(使用重步长)。块是输入数组的不重叠视图。

下面是一个虚拟的例子。

代码语言:javascript
运行
复制
import numpy as np
from skimage.util.shape import view_as_blocks


# batch_size:3
# height:4
# width:6
# depth:8
# channels:4
arr = np.arange(3*4*6*8*4).reshape(3,4,6,8,4)


patches = view_as_blocks(arr,block_shape=(1,2,2,2,4))

print(patches.shape) # (3, 2, 3, 4, 1, 1, 2, 2, 2, 4)

# Print the first patch
print(patches[0,0,0,0,0,:,:,:,:,:])

# [[[[[  0   1   2   3]
#     [  4   5   6   7]]

#    [[ 32  33  34  35]
#     [ 36  37  38  39]]]


#   [[[192 193 194 195]
#     [196 197 198 199]]

#    [[224 225 226 227]
#     [228 229 230 231]]]]]

patches.shape可能看起来很混乱,下面是一个简短的解释。最后5个数字代表块形状(1,2,2,2,4),前5个数字代表相应尺寸的块数。或者,简单地说,arr.form/block_block会给您(3,2,3,4,1)。

请注意以下几点:

  1. 每个维度( block_shape)必须均匀地划分为对应的arr_in维度。

要做到这一点,您可以首先根据您的block_shape为您的图像垫。

  1. patches将比arr占用更多的存储空间。因此,将所有补丁保存到您的磁盘上,然后一个一个地将它们提供给您的模型是有意义的。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68687832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档