我的目标是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张量上采样有直接的作用吗?
答案 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))