lilanxiao / Rotated_IoU

Differentiable IoU of rotated bounding boxes using Pytorch
MIT License
415 stars 64 forks source link

Different number of labels and Prediction? #12

Closed zobeirraisi closed 3 years ago

zobeirraisi commented 3 years ago

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?

lilanxiao commented 3 years ago

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
botinock commented 3 years ago

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