Загружайте и конвертируйте множество изображений в массив размером (n, 224,224,3) из пути - PullRequest
1 голос
/ 23 марта 2019

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

Код:

def convert_image_to_array(files,relpath):
    images_as_array=[]
    len_files = len(files)
    i = 0
    print("---ConvImg2Arr---")
    print("---STARTING---")
    for file in files:
        images_as_array.append(img_to_array(load_img(relpath+file, target_size=(soll_img_shape, soll_img_shape)))/255)
        if i == int(len_files*0.2):
            print("20% done")
        if i == int(len_files*0.5):
            print("50% done")
        if i == int(len_files*0.8):
            print("80% done")

        i +=1
    print("---DONE---")
    return images_as_array

, вызывая его с помощью X_train, получаемого из train_test_split:

x_train =  convert_image_to_array_opt(X_train,rel_path)

Какой более эффективный способ загрузить все эти изображения?

Редактировать:

Использование .flow_from_directory () из Keras решило мои проблемы, но я все равнохотелось бы знать, как это можно сделать так, как я пытался.

1 Ответ

0 голосов
/ 23 марта 2019

Предполагая, что метод load_img не является узким местом, convert_image_to_array_opt загружает все изображения (20 КБ) в память.Однако методы flow_from_directory загружают только одну серию изображений за один раз (типичные размеры пакетов - 32, 64, ... 1024)

Возможный способ изменить структуру convert_image_to_array_opt - взять размер партиив качестве аргумента и загрузки и yield массива, загруженного только bath_size изображениями (вместе с метками).И во время обучения перечислите метод convert_image_to_array_opt, который возвращает batch_size X и Y, по которым вы можете тренироваться.

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