python 并行化 图像处理_Python:使用多处理的并行图像读取和预处理

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

对于机器学习应用程序,我尝试用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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值