rgb_to_grayscale с тензорным потоком 2.3, получение "размеры должны быть равны ошибке" - PullRequest
0 голосов
/ 01 августа 2020

Я нуб тензорного потока, извините. Я следую этому руководству: https://www.tensorflow.org/tutorials/images/segmentation

Я хочу применить некоторую предварительную обработку к изображениям в наборе данных, а rgb_to_grayscale выдает ошибку, указанную ниже. Мой средний фильтр работает, но не rbg_to_grayscale.

Я был бы очень признателен за любой ваш совет.

@tf.function
def load_image_train(datapoint):
  input_image = tf.image.resize(datapoint['image'], (128, 128))
  input_mask = tf.image.resize(datapoint['segmentation_mask'], (128, 128))  

  print(type(input_image))
  print(input_image.shape)

  input_image = tf.image.rgb_to_grayscale(input_image)
  input_mask = tf.image.rgb_to_grayscale(input_mask)

  input_image = tfa.image.median_filter2d(input_image)
  input_mask = tfa.image.median_filter2d(input_mask)

вывод на печать:

<class 'tensorflow.python.framework.ops.Tensor'>
(128, 128, 3)

Получена ошибка:

    tutorial.py:36 load_image_train  *
        input_mask = tf.image.rgb_to_grayscale(input_mask)
    /home/dmattie/environments/imgproc/lib/python3.7/site-packages/tensorflow/python/util/dispatch.py:201 wrapper  **
        return target(*args, **kwargs)
    /home/dmattie/environments/imgproc/lib/python3.7/site-packages/tensorflow/python/ops/image_ops_impl.py:2136 rgb_to_grayscale
        gray_float = math_ops.tensordot(flt_image, rgb_weights, [-1, -1])
    /home/dmattie/environments/imgproc/lib/python3.7/site-packages/tensorflow/python/util/dispatch.py:201 wrapper
        return target(*args, **kwargs)
    /home/dmattie/environments/imgproc/lib/python3.7/site-packages/tensorflow/python/ops/math_ops.py:4519 tensordot
        ab_matmul = matmul(a_reshape, b_reshape)
    /home/dmattie/environments/imgproc/lib/python3.7/site-packages/tensorflow/python/util/dispatch.py:201 wrapper
        return target(*args, **kwargs)
    /home/dmattie/environments/imgproc/lib/python3.7/site-packages/tensorflow/python/ops/math_ops.py:3255 matmul
        a, b, transpose_a=transpose_a, transpose_b=transpose_b, name=name)
    /home/dmattie/environments/imgproc/lib/python3.7/site-packages/tensorflow/python/ops/gen_math_ops.py:5642 mat_mul
        name=name)
    /home/dmattie/environments/imgproc/lib/python3.7/site-packages/tensorflow/python/framework/op_def_library.py:744 _apply_op_helper
        attrs=attr_protos, op_def=op_def)
    /home/dmattie/environments/imgproc/lib/python3.7/site-packages/tensorflow/python/framework/func_graph.py:593 _create_op_internal
        compute_device)
    /home/dmattie/environments/imgproc/lib/python3.7/site-packages/tensorflow/python/framework/ops.py:3485 _create_op_internal
        op_def=op_def)
    /home/dmattie/environments/imgproc/lib/python3.7/site-packages/tensorflow/python/framework/ops.py:1975 __init__
        control_input_ops, op_def)
    /home/dmattie/environments/imgproc/lib/python3.7/site-packages/tensorflow/python/framework/ops.py:1815 _create_c_op
        raise ValueError(str(e))

    ValueError: Dimensions must be equal, but are 1 and 3 for '{{node rgb_to_grayscale_1/Tensordot/MatMul}} = MatMul[T=DT_FLOAT, transpose_a=false, transpose_b=false](rgb_to_grayscale_1/Tensordot/Reshape, rgb_to_grayscale_1/Tensordot/Reshape_1)' with input shapes: [16384,1], [3,1].

1 Ответ

0 голосов
/ 01 августа 2020

Форма input_mask равна (128,128,1), так что когда она становится плоской, на последней оси остается только одно значение. Это делает его несовместимым с tf.image.rgb_to_grayscale, для которого требуется три значения RGB на последней оси. Вы не должны интерпретировать маску как изображение, но если вы действительно хотите иметь возможность применять оттенки серого к значениям маски (я не вижу причин для этого), вы можете транслировать это:

input_mask = tf.broadcast_to(input_mask, (128,128,3))
...