У меня есть обученная модель тензорного потока, и при создании обучающей базы данных я использовал
from tensorflow.keras.preprocessing.image import ImageDataGenerator
ImageDataGenerator.flow_from_directory(organized_dir,
target_size=(image_dim, image_dim),
color_mode="grayscale",
batch_size=20,
shuffle=True,
follow_links=True)
(Я просто показываю параметры, которые я выбрал для предоставления, такие переменные, как image_dim
, определены в другом месте)
Когда я смотрю на один из пакетов, использующий next()
в объекте DirectoryIterator, который возвращает функция, значения пикселей изображения кажутся масштабированными от их исходных значений rgb [0,255] до оттенков серого [0,1]. Я хочу, чтобы он был в оттенках серого, и я так понимаю, что модели машинного обучения лучше всего работают с числами от 0 до 1. Так что это здорово!
Однако теперь я хочу использовать модель на разных изображениях. Открытие их в cv2
и преобразование в оттенки серого не масштабирует значения пикселей так же, как это делает тензорный поток, он просто сохраняет значения цвета в [0,255] вместо [0,1]:
>>> z = cv2.imread("img.png")
>>> cv2.cvtColor(z, cv2.COLOR_BGR2GRAY)
array([[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255],
...,
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255]], dtype=uint8)
Итак, я спрашиваю, как мне использовать то же преобразование, которое использует набор данных tensorflow, чтобы изображение использовало значения пикселей от [0,255] до [0,1]. Я обнаружил, что могу нормализовать изображения: Нормализация изображений в OpenCV. Но я хотел бы использовать точный алгоритм / параметры, которые использует тензорный поток, чтобы я мог максимизировать свою точность в реальном мире. спасибо ????