Tensorflow 2 ImageDataGenerator preprocessing_function для semanti c масок сегментации - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь использовать ImageDataGenerator flow_from_directory для загрузки изображений и масок для semanti c сегментации. Изображения и маски - это файлы png. Маски 3 класса представлены 3 цветами: [255,0,0], [0,0,255] и [255,255,255]. Пример маски:

enter image description here

Я хочу загрузить маску из каталога и применить одно горячее кодирование на лету:

def one_hot_preprocessing(img):
  # the RGB values printed here have float values 
  #print(img)
  print("shape: ", img.shape)
  print("type: ", type(img))
  return one_hot(img, num_classes)

seed = 1
data_gen_args = dict(
    rotation_range=180,
    width_shift_range=0.1,
    height_shift_range=0.1,
    zoom_range=0.2)

image_datagen = ImageDataGenerator(**data_gen_args, rescale=1./255)
mask_datagen = ImageDataGenerator(**data_gen_args, preprocessing_function=one_hot_preprocessing)

image_generator = image_datagen.flow_from_directory(
    'train/input',
    class_mode=None,
    target_size=(IMG_WIDTH, IMG_HEIGHT),
    seed=seed)
mask_generator = mask_datagen.flow_from_directory(
    'train/output',
    class_mode=None,
    target_size=(IMG_WIDTH, IMG_HEIGHT),
    seed=seed)

# combine generators into one which yields image and masks
train_generator = zip(image_generator, mask_generator)

Когда я проверяю значения img в функции one_hot_preprocessing, я вижу такие значения, как 0.0000000e+00, 2.5500000e+02 или даже 5.3197867e-04. Я не понимаю, почему значения RGB читаются так. Мое единственное предположение заключается в том, что генератор масок уже применил некоторые преобразования и изменил цвета. Но как в этом случае получить один набор с горячим кодированием?

Может быть, вы можете посоветовать какое-нибудь более сложное решение, как загрузить набор данных для semanti c сегментации?

Заранее спасибо!

...