Эффективно изменить размер пакета изображений np.array - PullRequest
0 голосов
/ 31 октября 2018

У меня есть размер 4D np.array (10000,32,32,3), который представляет собой набор из 10000 изображений RGB.

Как я могу использовать skimage.transform.resize или другую функцию для эффективного изменения размера всех изображений, чтобы (32,32) интерполировалось в (224,224)? Я бы предпочел сделать это с лыжным магом, но я открыт для любых решений, которые не используют tf.image.resize_images.

Мое текущее решение использует tf.image.resize_images, но оно вызывает проблемы с памятью графического процессора позже в моем конвейере (не освобождает память после завершения в ноутбуке jupyter), поэтому я хотел бы заменить его.

Пример:

import tensorflow as tf
X = tf.image.resize_images(X,[224, 224])
with tf.Session() as sess:
    X = X.eval()

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Скорее всего, я не приму мой собственный ответ, но кажется, что простой цикл for на самом деле довольно быстрый (говорит ~ 300% загрузка ЦП из top).

from skimage.transform import resize

imgs_in = np.random.rand(100, 32, 32, 3)
imgs_out = np.zeros((100,224,224,3))

for n,i in enumerate(imgs_in):
    imgs_out[n,:,:,:] = resize(imgs_in[n,:,:,:], imgs_out.shape[1:], anti_aliasing=True)

print(imgs_out.shape)

Кажется, на моей машине в 7-8 раз быстрее, чем ndi.zoom. Думаю, было бы еще лучше распараллелить это с multiprocessing.

0 голосов
/ 31 октября 2018

Одна возможность - scipy.ndimage.zoom, которая может работать с вашей коллекцией изображений и использовать сплайн-интерполяцию заданного порядка для повышения качества ваших изображений:

import numpy as np
import scipy.ndimage as ndi

imgs_in = np.random.rand(100, 32, 32, 3)
factor = 224/imgs_in.shape[1]
imgs_out = ndi.zoom(imgs_in, (1, factor, factor, 1), order=2)
print(imgs_out.shape)

Полученная форма равна (100, 224, 224, 3), как и ожидалось.

Вам нужно проверить, приемлемы ли время выполнения и результат для ваших нужд. Наверное, на это может повлиять изменение порядка интерполяции: существует заметная разница в скорости между сплайнами второго и (по умолчанию) третьего порядка за счет качества интерполяции.

...