def upsample_conv(input_tensor, previous_intermediate_layer, layer_params, number) -> tf.Tensor: """ Deconvolution (upscaling) layers :param input_tensor: :param previous_intermediate_layer: :param layer_params: :param number: :return: """ with tf.variable_scope('deconv_{}'.format(number)): if previous_intermediate_layer.get_shape()[1].value and \ previous_intermediate_layer.get_shape()[2].value: target_shape = previous_intermediate_layer.get_shape()[1:3] else: target_shape = tf.shape(previous_intermediate_layer)[1:3] upsampled_layer = tf.image.resize_images( input_tensor, target_shape, method=tf.image.ResizeMethod.BILINEAR) net = tf.concat([upsampled_layer, previous_intermediate_layer], 3) filter_size, nb_bottlenecks = layer_params if nb_bottlenecks > 0: for i in range(nb_bottlenecks): net = resnet_v1.bottleneck(inputs=net, depth=filter_size, depth_bottleneck=filter_size // 4, stride=1) else: net = layers.conv2d(inputs=net, num_outputs=filter_size, kernel_size=[3, 3], scope="conv{}".format(number)) return net
def _bottleneck(features, scope): return resnet_v1.bottleneck(features, features.shape[-1].value, features.shape[-1].value, 1, scope=scope)