многопроцессорность (возможности HoG) в Python - возвращены пустые массивы - PullRequest
0 голосов
/ 05 декабря 2018

Попытка извлечь функции 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.

Возможно, передача данных в функцию неверна?

1 Ответ

0 голосов
/ 05 декабря 2018

при многопроцессорной обработке в 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...