PIL IndexError: index out of range

在pytorch读取自己制作的数据集时,发送return c if c.class is int else c[0] 862 IndexError: index out of range错误。

error报错信息

Traceback (most recent call last):
 845   File "src/train.py", line 721, in <module>
 846     main()
 847   File "src/train.py", line 683, in main
 848     writer,args.freeze_bn[task_idx])
 849   File "src/train.py", line 338, in train_model
 850     for batch_idx, sample in enumerate(train_loader):
 851   File "/home/zp/miniconda3/envs/pytorch/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 623, in __next__
 852     return self._process_next_batch(batch)
 853   File "/home/zp/miniconda3/envs/pytorch/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 658, in _process_next_batch
 854     raise batch.exc_type(batch.exc_msg)
 855 SyntaxError: Traceback (most recent call last):
 856   File "/home/zp/miniconda3/envs/pytorch/lib/python3.6/site-packages/PIL/ImageFile.py", line 102, in __init__
 857     self._open()
 858   File "/home/zp/miniconda3/envs/pytorch/lib/python3.6/site-packages/PIL/JpegImagePlugin.py", line 325, in _open
 859     i = i8(s)
 860   File "/home/zp/miniconda3/envs/pytorch/lib/python3.6/site-packages/PIL/_binary.py", line 24, in i8
 861     return c if c.__class__ is int else c[0]
 862 IndexError: index out of range
 Traceback (most recent call last):
 867   File "/home/zp/miniconda3/envs/pytorch/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 138, in _worker_loop
 868     samples = collate_fn([dataset[i] for i in batch_indices])
 869   File "/home/zp/miniconda3/envs/pytorch/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 138, in <listcomp>
 870     samples = collate_fn([dataset[i] for i in batch_indices])
 871   File "/home/zp/disk1T/TSNet-LW/src/Read_data.py", line 174, in __getitem__
 872     image = imageio.imread(img_dir[idx])
 873   File "/home/zp/miniconda3/envs/pytorch/lib/python3.6/site-packages/imageio/core/functions.py", line 221, in imread
 874     reader = read(uri, format, "i", **kwargs)
 875   File "/home/zp/miniconda3/envs/pytorch/lib/python3.6/site-packages/imageio/core/functions.py", line 143, in get_reader
 876     return format.get_reader(request)
 877   File "/home/zp/miniconda3/envs/pytorch/lib/python3.6/site-packages/imageio/core/format.py", line 174, in get_reader
 878     return self.Reader(self, request)
 879   File "/home/zp/miniconda3/envs/pytorch/lib/python3.6/site-packages/imageio/core/format.py", line 224, in __init__
 880     self._open(**self.request.kwargs.copy())
 881   File "/home/zp/miniconda3/envs/pytorch/lib/python3.6/site-packages/imageio/plugins/pillow.py", line 406, in _open
 882     return PillowFormat.Reader._open(self, pilmode=pilmode, as_gray=as_gray)
 883   File "/home/zp/miniconda3/envs/pytorch/lib/python3.6/site-packages/imageio/plugins/pillow.py", line 122, in _open
 884     self._im = factory(self._fp, "")
 885   File "/home/zp/miniconda3/envs/pytorch/lib/python3.6/site-packages/PIL/JpegImagePlugin.py", line 779, in jpeg_factory
 886     im = JpegImageFile(fp, filename)
 887   File "/home/zp/miniconda3/envs/pytorch/lib/python3.6/site-packages/PIL/ImageFile.py", line 111, in __init__
 888     raise SyntaxError(v)
 889   File "<string>", line None
 890 SyntaxError: index out of range

最终定位到错误原因时因为图片本身损坏,导致read的时候无法正常读取。

解决方法

from PIL import Image
import imageio
count = 1
with open('./casiasurf/train+++/rgb_train+++.txt', 'r') as f:
    s = f.read().splitlines()
for i in range(len(s)):
    if i > 43875:
        print(s[i])
    imageio.imread(s[i])

我用的方法比较简单粗暴,直接遍历所有图片,把报错的图片名称打印出来,定位到哪一张图片损坏,手动删除就好了。
另外还可以参考其他链接:https://github.com/python-pillow/Pillow/issues/1474,但是对我来说并没用什么用。
简单粗暴方法直接删除就好了。

Error: Segmentation fault (core dumped)

在python环境下运行的时候,出现这种情况。
导入summarywriter出错

>from tensorboardX import SummaryWriter

Error: Segmentation fault (core dumped)

原因:protobuf版本不对,卸载重新安装

修改import torch import torchvision.models as models vgg16_model = models.vgg16(pretrained=True) import torch.nn as nn import torch.nn.functional as F import torchvision.transforms as transforms from PIL import Image # 加载图片 img_path = "pic.jpg" img = Image.open(img_path) # 定义预处理函数 preprocess = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) # 预处理图片,并添加一个维度(batch_size) img_tensor = preprocess(img).unsqueeze(0) # 提取特征 features = vgg16_model.features(img_tensor) import numpy as np import matplotlib.pyplot as plt def deconv_visualization(model, features, layer_idx, iterations=30, lr=1, figsize=(10, 10)): # 获取指定层的输出特征 output = features[layer_idx] # 定义随机输入张量,并启用梯度计算 #input_tensor = torch.randn(output.shape, requires_grad=True) input_tensor = torch.randn(1, 3, output.shape[2], output.shape[3], requires_grad=True) # 定义优化器 optimizer = torch.optim.Adam([input_tensor], lr=lr) for i in range(iterations): # 将随机张量输入到网络中,得到对应的输出 model.zero_grad() #x = model.features(input_tensor) x = model.features:layer_idx # 计算输出与目标特征之间的距离,并进行反向传播 loss = F.mse_loss(x[layer_idx], output) loss.backward() # 更新输入张量 optimizer.step() # 反归一化 input_tensor = (input_tensor - input_tensor.min()) / (input_tensor.max() - input_tensor.min()) # 将张量转化为numpy数组 img = input_tensor.squeeze(0).detach().numpy().transpose((1, 2, 0)) # 绘制图像 plt.figure(figsize=figsize) plt.imshow(img) plt.axis("off") plt.show() # 可视化第一层特征 deconv_visualization(vgg16_model, features, 0)使其不产生报错IndexError: tuple index out of range
05-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值