Изменяет ли метод flow_from_directory в Keras изображения, даже если они уже соответствуют желаемому размеру? - PullRequest
0 голосов
/ 10 апреля 2020

В Keras 'flow_from_directory аргумент устанавливает желаемый размер изображения. Значением по умолчанию является 256x256. В моем случае другое программное обеспечение уже создало изображения размером 299x299 и в оттенках серого. Поэтому мой вопрос заключается в эффективности Keras / TensorFlow: если я укажу размер изображения 299x299 и укажу color_mode=grayscale, то я надеюсь Keras не тратит время на изменение размера и вычисление оттенков серого. Это действительно так?

1 Ответ

1 голос
/ 11 апреля 2020

Преобразования выполняются только при наличии несоответствий. Вы можете легко убедиться в этом, проверив исходный код. Функция, отвечающая за загрузку изображения и выполнение необходимых преобразований, является функцией load_img (в пакете предварительной обработки keras):

def load_img(path, grayscale=False, color_mode='rgb', target_size=None,
             interpolation='nearest'):
    if grayscale is True:
        warnings.warn('grayscale is deprecated. Please use '
                      'color_mode = "grayscale"')
        color_mode = 'grayscale'
    if pil_image is None:
        raise ImportError('Could not import PIL.Image. '
                          'The use of `load_img` requires PIL.')
    with open(path, 'rb') as f:
        img = pil_image.open(io.BytesIO(f.read()))
        if color_mode == 'grayscale':
            # if image is not already an 8-bit, 16-bit or 32-bit grayscale image
            # convert it to an 8-bit grayscale image.
            if img.mode not in ('L', 'I;16', 'I'):
                img = img.convert('L')
        elif color_mode == 'rgba':
            if img.mode != 'RGBA':
                img = img.convert('RGBA')
        elif color_mode == 'rgb':
            if img.mode != 'RGB':
                img = img.convert('RGB')
        else:
            raise ValueError('color_mode must be "grayscale", "rgb", or "rgba"')
        if target_size is not None:
            width_height_tuple = (target_size[1], target_size[0])
            if img.size != width_height_tuple:
                if interpolation not in _PIL_INTERPOLATION_METHODS:
                    raise ValueError(
                        'Invalid interpolation method {} specified. Supported '
                        'methods are {}'.format(
                            interpolation,
                            ", ".join(_PIL_INTERPOLATION_METHODS.keys())))
                resample = _PIL_INTERPOLATION_METHODS[interpolation]
                img = img.resize(width_height_tuple, resample)
        return img

Как вы можете видеть выше, оба цветовых режима и преобразования размера выполняются тогда и только тогда, когда эти свойства загруженного изображения не соответствуют предоставленным пользователем аргументам (или значениям по умолчанию, если пользователь ничего не указал) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...