如果使用 opencv 调整大小方法,pytorch 数据加载器会卡住

JMa*_*arc 3 opencv multiprocessing python-2.7 scikit-image pytorch

我可以运行关于数据加载的 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))
       .....
Run Code Online (Sandbox Code Playgroud)

dataloaderfor 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())
Run Code Online (Sandbox Code Playgroud)

如果 ,我可以iterator打印一些东西num_workers=0。看起来opencv与 pytorch 的 Multiprocessing 不太兼容。我真的更喜欢在训练时间和测试时间使用相同的包来转换图像(并且我已经在测试时间使用 OpenCV 进行图像重新缩放)。任何建议将不胜感激。

小智 7

我有一个非常相似的问题,这就是我解决它的方法:

当您导入 cv2 set 时cv2.setNumThreads(0) ,您可以num_workers>0在 PyTorch 的数据加载器中进行设置。

似乎 OpenCV 尝试多线程并且某处陷入僵局。

希望能帮助到你。