File "/home/vase/software/miniconda3/envs/d2l/lib/python3.8/site-packages/torch/utils/data/_utils/collate.py", line 83, in <listcomp>
return [default_collate(samples) for samples in transposed]
File "/home/vase/software/miniconda3/envs/d2l/lib/python3.8/site-packages/torch/utils/data/_utils/collate.py", line 81, in default_collate
raise RuntimeError(‘each element in list of batch should be of equal size‘)
RuntimeError: each element in list of batch should be of equal size
代码中这部分表示自定义DataLoader的时候再__getitem__() 的时候输出的list长度不一致,
这里如果是bbox本来就输出多个不同数量的结果可以尝试自己自定义collate() 这个方法
collate是输入一个batch,之后对batch进行处理,这要保证batch中的元素都是相同长度的(list的长度)
如果不同的话就需要自己进行处理
我的问题是__getitem__() 输出的是map 而不是list,这样对默认的collate就无法识别了,
有两种简单的解决方法
def __getitem__(self,i):
sample = dict()
# 一堆代码 处理sample这个map
return list(sample)
data_loader = DataLoader(
datasets,
batch_size = dataset_cfg.batch_size,
collate_fn=lambda x:x,
)
原文:https://www.cnblogs.com/vase/p/15354331.html