Доступ к пикселям изображения в тензорном - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь написать тензорную функцию потока для нормализации данных изображения перед тренировкой. Функция примет маску изображения и преобразует все значения пикселей ниже 30 в «0», а все остальное в «1».

Чтобы сделать это вне тензора, мы можем использовать numpy:

arr = np.array(mask)
arr[arr < 30] = 0
arr[arr >= 30] = 1
mask.putdata(arr)

Но при попытке сделать это в функции tf:

def normalize(input_image, input_mask):
  # Transform the actual image to float values between 0 -> 1
  input_image = tf.cast(input_image, tf.float32) / 255.0 

  # Modify the mask to only contain values 0 and 1
  arr = np.array(input_mask)
  arr[arr < 30] = 0
  arr[arr >= 30] = 1
  input_mask.putdata(arr)

  return input_image, input_mask

@tf.function
def load_image_train(input_image, input_mask):
  input_image = tf.image.resize(input_image, (320, 320))
  input_mask = tf.image.resize(input_mask, (320, 320))

  if tf.random.uniform(()) > 0.5:
    input_image = tf.image.flip_left_right(input_image)
    input_mask = tf.image.flip_left_right(input_mask)

  input_image, input_mask = normalize(input_image, input_mask)

  return input_image, input_mask

train = labeled_ds.map(load_image_train, num_parallel_calls=AUTOTUNE)

я получаю ошибку NotImplementedError: Cannot convert a symbolic Tensor (cond/Identity_1:0) to a numpy array.

Как я могу сделать это правильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...