TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found <class 'PIL.PngImagePlugin.PngImageFile'>

trans = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) # imagenet
])

data = datasets.VOCSegmentation(root=‘data’, year=‘2012’, image_set=‘train’, download=True, transform=trans)
data_loader = DataLoader(data, batch_size=8, shuffle=True)
for x, y in data_loader:
print(x.shape)
print(y.shape)
break


TypeError Traceback (most recent call last)
in <cell line: 1>()
----> 1 for x, y in data_loader:
2 print(x.shape)
3 print(y.shape)
4 break

6 frames
/usr/local/lib/python3.10/dist-packages/torch/utils/data/_utils/collate.py in collate(batch, collate_fn_map)
150 return [collate(samples, collate_fn_map=collate_fn_map) for samples in transposed]
151
→ 152 raise TypeError(default_collate_err_msg_format.format(elem_type))
153
154

TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found <class ‘PIL.PngImagePlugin.PngImageFile’>

I am using ToTensor but still getting error

Found it , The problem is because of target_transform. here is the sample code which works

trans = transforms.Compose([
transforms.ToTensor(),
transforms.Resize((572, 572))
])

trans_target = transforms.Compose([
transforms.ToTensor(),
transforms.Resize((388, 388))
])

data = datasets.VOCSegmentation(root=‘data’, year=‘2012’, image_set=‘train’, transform=trans, target_transform= trans_target)