用pytorch训练神经网络的时候,用PIL保存图片之后立即读出,出现问题。主要是想用PIL包进行图像压缩的图像处理
源码:
name = './temp.jpg'
pil.save(name, "JPEG", quality=ratio)
img = Image.open(name)
pil = img
报错
IOError: Traceback (most recent call last):
File “/home/chenjun/anaconda2/envs/mypytorch/lib/python2.7/site-packages/torch/utils/data/dataloader.py”, line 106, in _worker_loop
samples = collate_fn([dataset[i] for i in batch_indices])
File “/media/chenjun/ed/31_ocr_own/Calligraphy_crnn/mech_demo2/src/dataset.py”, line 115, in getitem
img = self.transform(img)
File “/media/chenjun/ed/31_ocr_own/Calligraphy_crnn/mech_demo2/src/utils.py”, line 323, in call
img = t(img)
File “/media/chenjun/ed/31_ocr_own/Calligraphy_crnn/mech_demo2/src/utils.py”, line 307, in call
img = Image.open(name)
File “/home/chenjun/anaconda2/envs/mypytorch/lib/python2.7/site-packages/PIL/Image.py”, line 2657, in open
% (filename if filename else fp))
IOError: cannot identify image file ‘./002.jpeg’
解决方案:
采用opencv读取的方式读入图片
temp = cv2.imread(name)
pil = Image.fromarray(temp[:,:,::-1])
AttributeError: ‘NoneType’ object has no attribute ‘shape’
发现是图片本身的问题
具体原因:
pytorch的dataloader是多线程的,减少num_worker就好了。
train_loader = torch.utils.data.DataLoader( # 训练数据集
train_dataset, batch_size=opt.batchSize,
shuffle=False, sampler=sampler,
num_workers=int(opt.workers),
collate_fn=dataset.OwnalignCollate(imgH=opt.imgH, keep_ratio=opt.keep_ratio))
参考