Hello everybody,
I have a dataloader, with a __getitem__
function, that reads as follows:
def __getitem__(self, index):
# pre-processing annotation
with torch.no_grad():
annotation = torch.zeros((self.image_size[0], self.image_size[1]))
points = np.loadtxt(os.path.join(self.annotation_root, self.annotations[index]), delimiter=",")
image = Image.open(os.path.join(self.image_root, self.images[index]))
img_size = image.size
# converting relative coordinates to absolute ones
if len(points.shape) < 2:
points = np.expand_dims(points, axis = 0)
points = points[:,0:2]
points[:,0] = np.rint(points[:,0]*img_size[0])
points[:,1] = np.rint(points[:,1]*img_size[1])
annotation[points[:,0], points[:,1]] = 1.0
count = points.shape[0]
# annotation is padded by receptive field size by default
annotation = annotation.view((1,1,*annotation.size()))
sum_annotation = F.conv2d(input = annotation,
weight = self.weights,
stride = self.stride,
padding = self.patch_size)
print("sum_annotation.size(): {}".format(sum_annotation.size()))
return self.make_tensor(image), sum_annotation, count
nothing special about it, just some pre-processing for my annotations. Here, the print returns sum_annotation.size(): torch.Size([1, 1, 921, 1041])
. However, doing
for epoch in range(args.epochs):
loss = 0
for idx, elt in enumerate(train_dataloader):
input, target, _ = elt
print("target.size(): {}".format(target.size()))
gets me a strange print output: target.size(): torch.Size([1, 1, 1, 921, 1041])
. Somewhere, an unwanted dimension gets added. I could do something ugly using tensor.view
to fix this, but I would like to know if anybody has ever encountered this issue before.
Any help would be much appreciated