Feb 2018
Need to get image sizes using torchvision datasets?
If you try to load images with torchvision you may get an error like this:
May throw and give you an error like this at the bottom of the stack trace:
RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0. Got 256 and 519 in dimension 2 at /opt/conda/conda-bld/pytorch_1518243271935/work/torch/lib/TH/generic/THTensorMath.c:2897
Each batch is a single tensor (matrix), and pytorch says that all the images in a batch need to be the same size. This makes sense. If you had a 2D matrix row, 1 could not have 5 columns if row 2 has 7 columns. Every row in a matrix has to have the same number of columns. If you want to get the sizes using pytorch, you can just set a batch_size of 1. That way, each image will be its tensor, and you can record/store the sizes. Like so:
I find this useful because pytorch’s image loader seems to load things in a slightly different order than if I just read the files off disk (not to mention it's helpful if you are shuffling via a fixed random seed), and this helps me keep my data for when I want to check my predictions. It will output something like this:
torch.Size([1, 3, 256, 256])
torch.Size([1, 3, 519, 253])
torch.Size([1, 3, 256, 256])
torch.Size([1, 3, 256, 256])
torch.Size([1, 3, 256, 256])
torch.Size([1, 3, 512, 680])
As you can see, images of many sizes using a pytorch dataset!
If you enjoyed this post, be sure to signup for more.