总说
大家都知道,默认的DataLoader每次返回的Tensor的尺寸都是固定的,因为batchsize>1时,默认需要stack一下,比如__getitem__()
返回的图片return img
,其中img
是 CHW, 你在外面拿到就是 N*C*H*W
了。因为,默认return torch.stack(batch, 0, out=out)
了一下。如果每次img
图片不一样,就会出错。
有些人会说,我直接设置一个数据集最大的H
和W
呗,这样我们不管图片多大,全部pad成那么大,然后记录一下每张图片的h
和w
,再返回return padded_img, h, w
。再在外面进行相应的处理。
但是有些情况,就是有时候每次返回的tensor通道很大,上千上万的吧,有时候通道就很小。类似这样的情况,即每次返回的tensor的size相差很大!这时候,你肯定不愿意直接pad成最大的吧。我们希望,当拿到batch所有数据后,不是默认的直接stack,而是自己处理一些size不匹配的tensor
。
我们希望可以这样写:
class TrainDataset