lilanxiao/Rotated_IoU

Different number of labels and Prediction?

zobeirraisi opened this issue · 2 comments

I saw your code only calculate the giou when the number of label and GT boxes are equal what about a Different number of labels and Prediction?

I saw your code only calculate the giou when the number of label and GT boxes are equal what about a Different number of labels and Prediction?

Hi! It's only possible to calculate IoU of paired bounding boxes (unless one changes the definition). If you have different numbers or GT and predictions, you have to somehow match them to get pairs of boxes first.

If you want to calculate IoU between each GT box and each prediction, you have to duplicate them. Let's say we have two labels (GT1 and GT2) and three predictions (PR1, PR2, PR3). We have to duplicate them to get all six combinations:

[GT1, GT1, GT1, GT2, GT2, GT2]  # duplicated labels
[PR1, PR2, PR3, PR1, PR2, PR3]  # duplicated predictions

Hello! I've done it this way.

box1 = torch.tensor([[1, 1, 2, 2, 0.0], [1, 1, 2, 2, 0.0]], device="cuda:0")
box2 = torch.tensor([[3, 3, 2, 2, 0.0], [2, 2, 2, 2, 0.0]], device="cuda:0")
box1_new = box1.view([box1.shape[0], 1, 5]).repeat([1, box2.shape[0], 1])
box2_new = box2.view([1, box2.shape[0], 5]).repeat([box1.shape[0], 1, 1])
print(box1_new.shape, box2_new.shape)
cal_iou(box1_new, box2_new)[0]

P.S.
Thank you very much for this repo