Я пытаюсь использовать ImageDataGenerator flow_from_directory для загрузки изображений и масок для semanti c сегментации. Изображения и маски - это файлы png. Маски 3 класса представлены 3 цветами: [255,0,0], [0,0,255] и [255,255,255]. Пример маски:
![enter image description here](https://i.stack.imgur.com/AbBSF.png)
Я хочу загрузить маску из каталога и применить одно горячее кодирование на лету:
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 сегментации?
Заранее спасибо!