对于一次一张图像,检测算法的工作原理很有魅力。但是,当我一次传递多个图像时,它就会崩溃。
早些时候,我让它在CPU服务器上工作,将它封装在多处理中,并在每次检测完成时关闭它。这是它的代码:
def process_detection_pipeline(self, front, inputdata):
try:
manager = multiprocessing.Manager()
return_dict = manager.dict()
def worker_process(return_dic, front, inputdata):
userid = inputdata['userid']
if front is not None:
frontcrpimg, statusmin, statusmax = self.obj_detectperson.getUserCropImg(front)
cv2.imwrite('output/' + str(userid) + '/cropimgs/front.jpg', frontcrpimg)
return_dic['1'] = statusmin
return_dic['2'] = statusmax
return_dic['3'] = frontcrpimg
p = Process(target=worker_process, args=(return_dict, front, inputdata))
p.start()
p.join()
return return_dict.values()
except:
return False, False, None
在基于GPU的服务器的情况下,相同的代码块不起作用。
我想知道是否有更好的解决方案来解决这个问题?
python多处理与CPU而非GPU一起工作,像tensorflow这样的ML层将使您能够在运行程序时指定要使用的设备,但python中的并行性始终基于可用的底层CPU。
如果你想使用GPU让python进行多进程处理-有一个名为-PyCuda的库可以使用
如果这不是你想要的-请提供更多关于问题细节的信息