preprocess_input в керасе резко увеличивает размер поезда - PullRequest
0 голосов
/ 07 мая 2018

Перед тренировкой с моделью resnet50 я предварительно обработал свой ввод, используя:

img = image.load_img(os.path.join(TRAIN, img), target_size=[224, 224])
img = image.img_to_array(img)
img = np.expand_dims(img, axis=0)
img = preprocess_input(img)

и сохраните массив изображений. Я обнаружил, что без preprocess_input размер массива составляет 1,5 ГБ, а с preprocess_input - 7 ГБ. Это нормальное поведение? Или я что-то упустил? Почему Zero-center by mean pixel резко увеличивает размер ввода?

Вот как zero center by mean pixel определяется в кератах

x = x[..., ::-1] x[..., 0] -= 103.939 x[..., 1] -= 116.779 x[..., 2] -= 123.68

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Это потому, что значения пикселей имели тип 'uint8', а теперь они имеют тип 'float'. Итак, теперь у вас есть изображение, которое представляет собой массив 'float', который больше, чем массив 'uint8'.

0 голосов
/ 10 мая 2018

Чтение из кераса реализации preprocess_input Изображения нормализуются путем вычитания среднего значения изображения набора данных, которое, по-видимому, является константой, полученной из imagenet. Здесь код

def _preprocess_numpy_input(x, data_format, mode):
if mode == 'tf':
    x /= 127.5
    x -= 1.
    return x

if data_format == 'channels_first':
    if x.ndim == 3:
        # 'RGB'->'BGR'
        x = x[::-1, ...]
        # Zero-center by mean pixel
        x[0, :, :] -= 103.939
        x[1, :, :] -= 116.779
        x[2, :, :] -= 123.68
    else:
        x = x[:, ::-1, ...]
        x[:, 0, :, :] -= 103.939
        x[:, 1, :, :] -= 116.779
        x[:, 2, :, :] -= 123.68
else:
    # 'RGB'->'BGR'
    x = x[..., ::-1]
    # Zero-center by mean pixel
    x[..., 0] -= 103.939
    x[..., 1] -= 116.779
    x[..., 2] -= 123.68
return x

Я не понимаю, почему использование этого фрагмента кода увеличило размер моего набора данных.

...