Beispiel #1
0
    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
Beispiel #2
0
 def _bottleneck(features, scope):
   return resnet_v1.bottleneck(features,
                               features.shape[-1].value,
                               features.shape[-1].value,
                               1,
                               scope=scope)