对于机器学习应用程序,我尝试用python编写一个图像读取器类,该类读入图像,对其进行预处理,然后成批传递给应用程序。在
阅读和预处理需要与机器学习训练/测试并行进行,使用线程和队列很容易实现。然而,由于预处理在计算上很昂贵,我想进一步并行化,以便在不同的处理中并行读取和预处理单个图像。我试着用下面的方法来实现这一点(注意,这个例子去掉了与问题无关的所有内容,例如标签的读取)import numpy as np
import cv2
import csv
from multiprocessing import Queue, Pool
def load_image(fname):
return cv2.imread(fname)[:,:,[2,1,0]].astype(np.float32)
class ImageReader(object):
def __init__(self, path_to_csv, batchsize, transform=None):
self.path_to_csv = path_to_csv
self.batchsize = batchsize
self.transform = transform
self.fnames = []
csvfile = open(path_to_csv, 'rb')
reader = csv.reader(csvfile)
for row in reader:
self.fnames.append(row[0])
self.num_samples = len(self.fnames)
def __iter__(self):
q = Queue(maxsize=3*self.batchsize)
def producer(fname):
if self.transform is None:
q.

本文介绍了如何使用Python的multiprocessing库并行处理图像读取和预处理,以加速机器学习应用中的批量数据处理。通过创建一个ImageReader类,利用Pool和Queue实现并行化,但遇到了由于内部函数不能被pickle导致的问题。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



