Я тренирую CNN, используя Keras fit_generator для большого набора данных (> 50 тыс. Изображений).Я читаю изображения, используя cv2, делаю некоторую предварительную обработку (вращаю, изменяю размер) и записываю в файл HDF5 (следуя этому учебнику).Моя проблема в том, что изображение, считанное из HDF5, выглядит иначе, чем исходное предварительно обработанное изображение перед записью в HDF5.Код для сохранения файла HDF5 -
import numpy as np
import cv2
import imutils
import os
import random
import h5py
all_imgs = os.listdir(r"D:\test_images/")
img_rows, img_cols = 128, 128
hdf5_path = r'D:\test_images\test.hdf5'
train_shape = (len(all_imgs),3 , img_rows, img_cols)
hdf5_file = h5py.File(hdf5_path, mode='w')
hdf5_file.create_dataset("train_img", train_shape, np.int8)
hdf5_file.create_dataset("train_mean", train_shape[1:], np.float32)
mean = np.zeros(train_shape[1:], np.float32)
for i in range(len(all_imgs)):
img = cv2.imread(r"D:\test_images/"+all_imgs[i])
img = imutils.rotate(img,90)
img = cv2.resize(img,(128,128))
if i == 0:
cv2.imwrite(r"D:\test_images/test_before.jpg",img)
img = np.rollaxis(img, 2) #My CNN takes input with channel first
hdf5_file["train_img"][i, ...] = img[None]
mean += img / float(len(all_imgs))
hdf5_file["train_mean"][...] = mean
hdf5_file.close()
Код для чтения из файла HDF5 -
hdf5_path = r'D:\test_images\test.hdf5'
hdf5_file = h5py.File(hdf5_path, "r")
images = hdf5_file["train_img"][0:1, ...]
images = images.astype('float32')
# images /= 255
images = np.moveaxis(images, 1, -1)
cv2.imwrite(r"D:\test_images/test_after.jpg",images[0])
hdf5_file.close()
Исходное изображение, изображение перед записью в HDF5 и изображение, считанное из HDF5 -
Во время предсказания, если я передаю изображение, прочитанное из cv2, оно не дает правильных результатов.Однако сохранение изображения в формате HDF5 и передача изображения, считанного из этого файла HDF5, дает правильный вывод.Как справиться с этим во время сохранения HDF5 или во время прогнозирования?