代码之家  ›  专栏  ›  技术社区  ›  Austin

有效地调整np.array图像的批大小

  •  3
  • Austin  · 技术社区  · 6 年前

    我有一个4D np.array大小(10000,32,32,3),表示一组10000个RGB图像。

    skimage.transform.resize 或其他功能来有效地调整所有图像的大小,使(32,32)插值到(224224)?我更喜欢用撇取法,但我愿意接受任何不使用的解决方案 tf.image.resize_images .

    ,但它会导致GPU内存问题,稍后在我的管道(不会释放内存后,在jupyter笔记本完成),所以我想更换它。

    例子:

    import tensorflow as tf
    X = tf.image.resize_images(X,[224, 224])
    with tf.Session() as sess:
        X = X.eval()
    
    2 回复  |  直到 6 年前
        1
  •  5
  •   Austin    6 年前

    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

        2
  •  3
  •   Andras Deak -- Слава Україні    6 年前

    一种可能性是 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) 一如预期。

    您必须检查运行时和结果是否符合您的需要。旋转插值顺序可能会影响这一点:二阶和(默认)三阶样条曲线之间存在明显的速度差异,这是以插值质量为代价的。