在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)