Недостаточно памяти для преобразования файлов изображений в массив numpy - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь запустить цикл, который выполняет итерацию по папке с изображениями и возвращает два числовых массива: x - сохраняет изображение в виде пустого массива y - хранит метку.

Папка может иметь более 40 000 изображений в формате RGB с размерами (224 224).У меня около 12 ГБ памяти, но после некоторых итераций используемая память просто всплывает и все останавливается.

Что я могу сделать, чтобы решить эту проблему?

def create_set(path, quality):
    x_file = glob.glob(path + '*')
    x = []

    for i, img in enumerate(x_file):
        image = cv2.imread(img, cv2.IMREAD_COLOR)
        x.append(np.asarray(image))
        if i % 50 == 0:
            print('{} - {} images processed'.format(path, i))

    x = np.asarray(x)
    x = x/255

    y = np.zeros((x.shape[0], 2))
    if quality == 0:
        y[:,0] = 1
    else:
        y[:,1] = 1 

    return x, y

1 Ответ

0 голосов
/ 06 июня 2018

Вы просто не можете загрузить столько изображений в память.Вы пытаетесь загрузить каждый файл по указанному пути к памяти, добавив их в x.

Попробуйте обработать их пакетами или, если вы делаете это для приложения tenorflowпопробуйте сначала записать их в .tfrecords.

Если вы хотите сэкономить память, оставьте изображения как np.uint8 вместо того, чтобы приводить их к плавающей точке (что происходит автоматически, когда вы нормализуете их в этой строке> x = x/255)

Вам также не нужно np.asarray в вашей строке x.append(np.asarray(image)).image это уже массив.np.asarray предназначен для преобразования списков, кортежей и т. Д. В массивы.

edit:

очень грубый пример пакетирования:

def batching function(imlist, batchsize):
    ims = []
    batch = imlist[:batchsize]

    for image in batch:
        ims.append(image)
        other_processing()

    new_imlist = imlist[batchsize:]
    return x, new_imlist

def main():
    imlist = all_the_globbing_here()
    for i in range(total_files/batch_size):
        ims, imlist = batching_function(imlist, batchsize)
        process_images(ims)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...