Hey, I am trying to move a certain point coordinate through the offset output by the network ONet, and then calculate the loss with the moved point map and ground truth. This process backpropagates and updates the ONet parameters.
Here is a brief part of the code.
import torch from torch.autograd import Variable import numpy as np c,w,h = img.shape ori_point = Variable(torch.from_numpy(np.array([10,10], dtype=np.float32)), requires_grad=True) offset = ONet(img) # (b,1,2) point_h = offset[0,0,0] + ori_point point_w = offset[0,0,1] + ori_point point_index = point_h * w + point_w dot_map = torch.zeros(w * h).scatter_add_(0, index=point_index.long(), src=torch.ones(w * h)).view(h, w) loss = criterion(dot_map, gt) loss.backward() ...
I want to use scatter_add_() to map the point coordinates to a dot map, but my point coordinates are in the form of index, so when the loss is backpropagated, it seems that the parameters of Onet will not be updated.
What is the correct way of doing this?