Использование «density_image_warp» выводит предупреждение о трассировке - PullRequest
0 голосов
/ 28 мая 2020

Я строю сеть пирамид изображений, где каждый слой выводит сетку передискретизации, поэтому мне нужно передискретизировать изображение на каждом уровне пирамиды. Я использую функцию dense_image_warp из tensorflow_addons (не нашел другой ...) для повторной выборки изображения.

С этой функцией много проблем, и один из них распечатывает следующее сообщение несколько раз:

ПРЕДУПРЕЖДЕНИЕ: tenorflow: 7 из последних 11 вызовов сработавшего восстановления функции tf. Трассировка стоит дорого, и чрезмерное количество трассировок, вероятно, связано с передачей python объектов вместо тензоров. Кроме того, tf.function имеет параметр экспериментальной_relax_shapes = True, который смягчает формы аргументов, чтобы избежать ненужного повторения. Пожалуйста, обратитесь к https://www.tensorflow.org/tutorials/customization/performance#python_or_tensor_args и https://www.tensorflow.org/api_docs/python/tf/function для получения более подробной информации.

Я попытался обернуть слой Lambda, в значительной степени проблема . Я также попытался создать собственный слой, используя подклассы, снова безуспешно.

Пример кода:

    def pyramid_net(num_levels):
        in_image = Input(shape=(INPUT_HEIGHT, INPUT_WIDTH, 3))
        # using average pooling to downscale
        in_image_pyramid = CreateImagePyramid(num_levels)(in_image)
        x = in_image_pyramid[0]
        for level in range(num_levels):
            resampler = SequenceOfConv2D(x)
            if level==num_levels-1:
                break
            x = tfa.image.dense_image_warp(in_image_pyramid[level+1], resampler)
            # for some reason the outputs is of None shape
            x.set_shape(in_image_pyramid[level+1].shape) 

        return Model(inputs=[in_image], outputs=[resampler])

    network = pyramid_net(3)
    test_image = tf.random.normal((1, INPUT_HEIGHT, INPUT_WIDTH, 3))
    output = network(test_image)
...