У меня есть набор данных с кортежами изображений (низкого разрешения, высокого разрешения). Я хочу нормализовать сэмплы низкого разрешения до [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
...
По этой проблеме кажется, что можно ожидать отрицательных значений хотя.
Очень хотелось бы получить отзыв, если я делаю это правильно или есть лучший способ сделать это.