如何编写自定义keras层来对3D体积进行重采样?

j7dteeu8  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(146)

我在网络内部有一个Tensor(batch_size, height, width, depth, channel)(表示3D体积),需要重新采样。我正在考虑编写一个自定义keras层来完成这一任务。

input = Input()
x = net(input) # another network
x = custom_resample_3d(...)(x)
x = ...

net的输出是(batch_size, 64, 64, 64, 1)。我想使用插值将Tensor大小调整为(batch_size, 256, 256, 32, 1)
所以我最初的想法是用scipy.ndimage.interpolation.zoom定制一个keras层。

class MyLayer(Layer):

    def __init__(self, output_dim, **kwargs):
        self.output_dim = output_dim
        super(MyLayer, self).__init__(**kwargs)

    def build(self, input_shape):
        super(MyLayer, self).build(input_shape)  # Be sure to call this at the end

    def call(self, x):
        return scipy.ndimage.interpolation.zoom(x, ...)

    def compute_output_shape(self, input_shape):
        return ...

有更好的方法吗?或者我需要将keras tensor转换为numpy数组,然后将其转换回Tensor?

kiz8lqtg

kiz8lqtg1#

如果你还没有在TF中解决这个问题,你可以使用TorchIO库和resample函数来reszie。你需要知道仿射空间来做到这一点。

相关问题