#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 раза больше памяти. Если вы используете специальные методы, такие как глубокое обучение нейронной сети, вам потребуется гораздо больше памяти по сравнению с простым хранением необработанных данных.