【发布时间】:2018-10-18 10:12:53
【问题描述】:
我想以 numpy 数组的形式在我的 8gb 内存中加载超过 10000 张图像。到目前为止,我已经尝试过 cv2.imread、keras.preprocessing.image.load_image、pil、imageio、scipy。我想做最快的方法,但我不知道是哪一个。
【问题讨论】:
标签: python numpy image-processing machine-learning computer-vision
我想以 numpy 数组的形式在我的 8gb 内存中加载超过 10000 张图像。到目前为止,我已经尝试过 cv2.imread、keras.preprocessing.image.load_image、pil、imageio、scipy。我想做最快的方法,但我不知道是哪一个。
【问题讨论】:
标签: python numpy image-processing machine-learning computer-vision
如果您使用keras 库来创建deep learning 模型,我建议您使用keras.preprocessing 包中的image 类。
image 类提供了一个方法 img_to_array,它已经返回了一个 numpy 数组。
此外,它在内部使用NumPy - Numpy 进行所有array 操作/计算。
train_image = image.load_img(path, target_size = (height, width))
train_image = image.img_to_array(train_image)
【讨论】:
最快的方法之一是让您的多处理器并行完成您的工作,它要求您对所需工作进行并行化,当并发运行不是问题时,它可以让多个处理器同时处理您的任务。这种并行处理使您能够快速处理事情。现在下面的例子只是一个简单的草图,你可以用小函数练习,然后将它与你自己的代码集成:
from multiprocessing import Process
#this is the function to be parallelised
def image_load_here(image_path):
pass
if __name__ == '__main__':
#Start the multiprocesses and provide your dataset.
p = Process(target=image_load_here,['img1', 'img2', 'img3', 'img4'])
p.start()
p.join()
随意写,我想帮忙。
【讨论】:
import numpy as np
import os
from keras.preprocessing import image
def batch_data_generator(data, indexes):
#indexes is a sub array of index from the data
X = np.zeros((len(indexes), config.IMG_INPUT_SHAPE[0], config.IMG_INPUT_SHAPE[1], config.IMG_INPUT_SHAPE[2]))
Y = np.zeros((len(indexes), len(label_mapping)))
i = 0
for idx in indexes:
image_id = data['X'][idx]
filename = os.path.join('images', str(image_id) + '.jpg')
img = image.load_img(filename, target_size=(300, 300))
X[i] = np.array(img, dtype='float32')
label_id = label_mapping[data['Y'][idx]]
Y[i][label_id] = 1
i += 1
# subtract mean and normalize
for depth in range(3):
X[:, :, :, depth] = (X[:, :, :, depth] - np.mean(X[:, :, :, depth])) / 255
return X, Y
【讨论】: