Hello all,
I am experimenting with a custom IoU and trying to propagate the sum of IoU backward and the implementation is as follows -
def sumIoU(anchors, gt):
num_anchors = anchors.shape[1]
num_gts = gt.shape[1]
net_IoU = 0
for i in range(num_anchors):
anchor = anchors[:, i, :]
for j in range(num_gts):
j_gt = gt[:, j, :]
xi = torch.max(anchor[:, 0],j_gt[:, 0])
yi = torch.max(anchor[:, 1], j_gt[:, 1])
wi = torch.clamp(torch.min(anchor[:,2], j_gt[:, 2])-xi, min=0)
hi = torch.clamp(torch.min(anchor[:,3], j_gt[:, 3])-yi, min=0)
area_i = wi*hi
area_u = ((anchor[:,2]-anchor[:,0])*(anchor[:,3]-anchor[:,1])) + \
((j_gt[:,2]-j_gt[:,0])*(j_gt[:,3]-j_gt[:,1])) - area_i
IoU = torch.clamp(area_i, 1e-5)/torch.clamp(area_u, 1e-7)
net_IoU+=IoU
return net_IoU
and Propagating it as -
IoU = sumIoU(anchors=anchors, gt=gt)
loss.backward()
I run into the following error -
RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn
The Returned value i.e IoU
is tensor([[466.2932]], device='cuda:0')
I had once read that till we use torch functions we would be fine, but I dont know what is going wrong since I am not understanding the error properly. Could someone please tell what I should do to get rid of it
Sorry for the noob question…
TIA