Недавно я заметил, что использование transform.resize заполняет мою оперативную память (например, много: 23Go).Вот моя функция
def resizePics(i):
target_size = 500
h, w = i.shape[0], i.shape[1]
if h > w: # crop to get a squared pic
crop_size = round((h - w)/2)
i = i[crop_size: h -crop_size, 0:w]
elif h < w:
crop_size = round((w - h)/2)
i = i[0:h, crop_size:w-crop_size]
i = transform.resize(i, (target_size,target_size), mode="constant", preserve_range=True) ##! HERE !##
return(i)
И где я ее вызываю (данные представляют собой панды данных)
pool = ThreadPool(multiprocessing.cpu_count())
data["img"] = pool.map(resizePics, data["img"])
pool.close()
pool.close()
[ Основные гипотезы ]
Я заметил, что вид значений для моих матриц сильно меняется после использования этой функции (даже если я использую preserve_range = True).Это перед transform.resize:
data.head(5)
0 chest_xray/train/PNEUMONIA/person64_bacteria_3... pneumonia [[98, 100, 103, 104, 105, 107, 111, 114, 113, ... 504 144.0
1 chest_xray/train/NORMAL/NORMAL2-IM-1342-0001.jpeg normal [[0, 173, 163, 154, 144, 140, 132, 131, 129, 1... 1078 138.0
2 chest_xray/train/PNEUMONIA/person1441_bacteria... pneumonia [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,... 1144 155.0
3 chest_xray/train/NORMAL/NORMAL2-IM-0576-0001.jpeg normal [[30, 31, 31, 28, 28, 30, 30, 30, 29, 27, 28, ... 1422 135.0
4 chest_xray/train/NORMAL/NORMAL2-IM-0660-0001.jpeg normal [[0, 2, 4, 3, 1, 1, 0, 0, 0, 1, 1, 3, 2, 0, 1,... 950 133.0
Это после:
data.head(5)
0 chest_xray/train/PNEUMONIA/person64_bacteria_3... pneumonia [[196.00400000000008, 197.000096, 197.02799999... 504 144.0
1 chest_xray/train/NORMAL/NORMAL2-IM-1342-0001.jpeg normal [[38.89042000000035, 38.15600000000006, 36.734... 1078 138.0
2 chest_xray/train/PNEUMONIA/person1441_bacteria... pneumonia [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... 1144 155.0
3 chest_xray/train/NORMAL/NORMAL2-IM-0576-0001.jpeg normal [[15.940252000000065, 17.550252000001198, 15.6... 1422 135.0
4 chest_xray/train/NORMAL/NORMAL2-IM-0660-0001.jpeg normal [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... 950 133.0
Мне кажется, что влияние на ОЗУ как-то связано с пикселями, кодируемыми из int -> плавает.
[ Вопрос ]: есть ли способ настроить transform.resize для того, чтобы
- придерживался целочисленных значений
- ограничить диапазончисло после (скажем, 3 десятичных знака)