首页 > 解决方案 > Python 中的多处理(HoG 功能) - 返回空数组

问题描述

尝试在大量图像数据集上提取 HoG 特征 - 总共 70K。所以 test_X 是 28x28x70000 我正在尝试使用 Pool。试用前 10 张图片

from multiprocessing import Pool

def get_hog(inputImg):
    fd,hi=hog(inputImg, orientations=4, pixels_per_cell=(4, 4),
                    cells_per_block=(1, 1), visualize=True, multichannel=False)
    return fd

with Pool(5) as p:
    V = p.map(get_hog,test_X[:,:,range(0,10)]))

我最终在 V 中得到了空数组。

可能将数据传递给函数不正确?

标签: pythonloopsparallel-processing

解决方案


在 python 中的多处理中,应该始终尝试提供回调方法来存储来自进程的返回数据。因此,对于您的示例,我们可以使用池并在您的情况下在图像列表上运行池,test_X并让回调处理池中每个进程返回的数据。这是示例代码:

import numpy as np
from multiprocessing import Pool
V=[]
test_X = np.transpose(test_x)
def get_hog(inputImg):
    fd,hi=hog(inputImg, orientations=4, pixels_per_cell=(4, 4),
                cells_per_block=(1, 1), visualize=True, multichannel=False)
    return fd

def poolCallback(returnDataFromPool):
    global V
    V.append(returnDataFromPool)

p = Pool(5)
for x in test_X:
    p.apply_async(get_hog ,args=(x,),callback=poolCallback)    
p.close()
p.join()

推荐阅读