Правильный способ нормализации изображений в tf.data.Dataset к [-1, 1] - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть набор данных с кортежами изображений (низкого разрешения, высокого разрешения). Я хочу нормализовать сэмплы низкого разрешения до [0, 1], а сэмплы высокого разрешения - [-1, 1].
В настоящее время я делаю это так:

def prepare_img_pairs(fpath):
    img = tf.io.read_file(fpath)
    img = tf.image.decode_png(img)

    img = tf.cast(img, tf.float32)
    lr_img = img / 255
    hr_img = img / 127.5 - 1
    lr_img = tf.image.resize(lr_img, size=LOW_RES_DIMS,
                             method=tf.image.ResizeMethod.BICUBIC)

    return lr_img, hr_img


file_ds = tf.data.Dataset.list_files([f"{IMG_PATH}/{fname}"
                                      for fname in os.listdir(IMG_PATH)])

train_ds = file_ds.map(prepare_img_pairs)

немного неуклюже, хотя, это правильный способ сделать это? Из того, что я понимаю, я не могу использовать tf.image.convert_image_dtype, поскольку он автоматически нормализует изображения до [0,1].
Кроме того, я получаю небольшие отрицательные значения для некоторых из моих изображений lr:

for (lr, hr) in train_ds:
    print(f"lr min: {tf.reduce_min(lr)}")

lr min: -0.007107843644917011
lr min: -0.03304228186607361
...

По этой проблеме кажется, что можно ожидать отрицательных значений хотя.

Очень хотелось бы получить отзыв, если я делаю это правильно или есть лучший способ сделать это.

...