在TensorFlow中上采样5-D张量

时间:2018-05-15 05:42:57

标签: python tensorflow

我的目标是3D医学影像。

对于形状为[batch, height, width, channels]的4-D张量B,使用tf.image.resize_*进行上采样。

对于形状为[batch, height, width, depth, channels]的5-D张量A,例如上采样到[batch, 1.5*height, 1.5*width, 1.5*depth, channels]形状,tf.nn.conv3d_transpose可用于上采样,但我不希望额外的权重用于训练

对张量流中的5-D张量上采样有直接的作用吗?

1 个答案:

答案 0 :(得分:2)

您可以使用tf.constant为conv3d_transpose提供过滤器。培训不会产生任何额外的负担。您还可以将conv3d额外使用一次,并使用相同的常数滤波器进行双线性插值上采样。下面的示例是我使用双线性插值对3D张量(5D格式)进行升采样的函数。

def upsample(input, upsamplescale, channel_count):
    deconv = tf.nn.conv3d_transpose(value=input, filter=tf.constant(np.ones([upsamplescale,upsamplescale,upsamplescale,channel_count,channel_count], np.float32)), output_shape=[1, xdim, ydim, zdim, channel_count],
                                strides=[1, upsamplescale, upsamplescale, upsamplescale, 1],
                                padding="SAME", name='UpsampleDeconv')
    smooth5d = tf.constant(np.ones([upsamplescale,upsamplescale,upsamplescale,channel_count,channel_count],dtype='float32')/np.float32(upsamplescale)/np.float32(upsamplescale)/np.float32(upsamplescale), name='Upsample'+str(upsamplescale))
    print('Upsample', upsamplescale)
    return tf.nn.conv3d(input=deconv,
                 filter=smooth5d,
                 strides=[1, 1, 1, 1, 1],
                 padding='SAME',
                 name='UpsampleSmooth'+str(upsamplescale))