Загрузчик данных Pytorch застрял при использовании метода изменения размера opencv - PullRequest
0 голосов
/ 03 января 2019

Я могу запустить все ячейки учебного пособия Pytorch по загрузке данных ( учебник по Pytorch ). Но когда я использую OpenCV вместо Skimage для изменения размера изображения, загрузчик данных застревает, т.е. ничего не происходит.

В классе Rescale:

class Rescale(object):
    .....
    def __call__(self, sample):
       ....
       #img = transform.resize(image, (new_h, new_w))
       img = cv2.resize(image, (new_h, new_w))
       .....

dataloader и for loop определяются с помощью:

dataloader = DataLoader(transformed_dataset, batch_size=4,
                        shuffle=True, num_workers=4)

for i_batch, sample_batched in enumerate(dataloader):
    print(i_batch, sample_batched['image'].size(),
          sample_batched['landmarks'].size())

Я могу заставить iterator напечатать что-нибудь, если num_workers=0. Похоже, что opencv не очень хорошо работает с многопроцессорностью pytorch. Я действительно предпочел бы использовать один и тот же пакет для преобразования изображений во время поезда и во время тестирования (и я уже использую OpenCV для масштабирования изображения во время теста). Любые предложения будут с благодарностью.

1 Ответ

0 голосов
/ 09 февраля 2019

У меня была очень похожая проблема, и вот как я ее решил:

, когда вы импортируете cv2, установите cv2.setNumThreads(0), а затем вы можете установить num_workers>0 в загрузчике данных в PyTorch.

Похоже, OpenCV пытается многопоточности, и где-то что-то заходит в тупик.

Надеюсь, это поможет.

...