оцените, какой объем оперативной памяти может использоваться при загрузке набора изображений

#python #numpy #opencv

#python #numpy #opencv

Вопрос:

Я работаю над задачей классификации изображений kaggle cat vs dog. На данный момент на моем компьютере всего 8 ГБ оперативной памяти, поэтому при использовании некоторой ее части у меня остается около 6 ГБ в запасе.

Начал с попытки загрузить image test_set, который содержит 12 500 изображений и занимает 285 МБАЙТ на жестком диске. При запуске скрипта он использует всю доступную оперативную память и, скорее всего, просто остановит компьютер, поэтому я остановил его до того, как он превысил 95% использования.

 import os

test_images = os.listdir('data/test')
print(len(test_images))
>>> 12500

test_images_data = []

for image in test_images:
    image_data = cv2.imread('data/test/'   image)

    #convert color from BGR to RGB
    image_data = cv2.cvtColor(image_data, cv2.COLOR_BGR2RGB)

    test_images.append(image_data)
  

Есть ли способ заранее определить, сколько оперативной памяти он, вероятно, будет использовать, чтобы я знал, например, будет ли достаточно добавить еще 8 ГБ оперативной памяти?

Комментарии:

1. Итак, каков размер изображения.? Необходимая память также будет зависеть от этого.

2. это зависит от того, выполняется ли какая-либо предварительная обработка, чтобы установить для них равные размеры, но я бы сказал, что максимум составляет 400 x 400 пикселей в rgb.

3. Для приблизительной оценки используйте экстраполяцию. Измерьте использование оперативной памяти перед загрузкой изображений, загрузите 1250 изображений, снова измерьте использование оперативной памяти, вычтите два, а затем в десять раз больше.

4. @grooveplex спасибо, я попробую это.

5. вам понадобится как минимум ширина x высота x каналы x объем памяти в битах на канал на несжатое изображение (для 8-битных каналов примерно в 10 раз больше размера jpeg afair, но сильно зависит от содержимого). Если вы используете 32/64-разрядные представления с плавающей запятой вместо 8-разрядного int, вам потребуется в 4/8 раза больше памяти. Если вы используете специальные методы, такие как глубокое обучение нейронной сети, вам потребуется гораздо больше памяти по сравнению с простым хранением необработанных данных.