在 dask 中生成批量图像

2024-01-10

我刚开始dask因为它提供了强大的并行处理能力。我身边有40000我磁盘上的图像,我将使用它来使用一些 DL 库构建分类器,例如Keras or TF。我在 pandas 数据框中收集了这个元信息(图像路径和相应的标签),如下所示:

    img_path     labels
0   data/1.JPG   1
1   data/2.JPG   1
2   data/3.JPG   5
...     

现在这是我的简单任务:使用 dask 读取图像和相应的标签lazy时尚。对图像进行一些处理并将批次传递给分类器batch size of 32.

  1. 定义读取和预处理函数:

    def read_data(idx):
        img = cv2.imread(data['img_path'].iloc[idx])
        label = data['labels'].iloc[idx]
        return img, label
    
    def img_resize(img):
        return cv2.resize(img, (224,224)) 
    
  2. 获取延迟的 dask 数组:

    data = [dd.delayed(read_data)(idx) for idx in range(len(df))]
    images = [d[0] for d in data]
    labels = [d[1] for d in data]
    resized_images = [dd.delayed(img_resize)(img) for img in images]
    resized_images = [dd.array.from_delayed(x, shape=(224,224, 3),dtype=np.float32) for x in resized_images]
    

现在我的问题是:

Q1.我如何获得batch的数据,与batch_size=32从这个数组?现在这相当于一个惰性生成器吗?如果不是的话,可以让它表现得像一个人吗?

Q2。如何选择有效chunksize为了更好的批量生成?例如,如果我有4核心,图像的大小是(224,224,3),如何才能提高批处理效率?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 dask 中生成批量图像 的相关文章