|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
- import numpy as np
- import unittest
- import torch
-
- from detectron2.structures import Boxes, BoxMode, pairwise_iou
-
-
- class TestBoxMode(unittest.TestCase):
- def _convert_xy_to_wh(self, x):
- return BoxMode.convert(x, BoxMode.XYXY_ABS, BoxMode.XYWH_ABS)
-
- def test_box_convert_list(self):
- for tp in [list, tuple]:
- box = tp([5, 5, 10, 10])
- output = self._convert_xy_to_wh(box)
- self.assertTrue(output == tp([5, 5, 5, 5]))
-
- with self.assertRaises(Exception):
- self._convert_xy_to_wh([box])
-
- def test_box_convert_array(self):
- box = np.asarray([[5, 5, 10, 10], [1, 1, 2, 3]])
- output = self._convert_xy_to_wh(box)
- self.assertTrue((output[0] == [5, 5, 5, 5]).all())
- self.assertTrue((output[1] == [1, 1, 1, 2]).all())
-
- def test_box_convert_tensor(self):
- box = torch.tensor([[5, 5, 10, 10], [1, 1, 2, 3]])
- output = self._convert_xy_to_wh(box).numpy()
- self.assertTrue((output[0] == [5, 5, 5, 5]).all())
- self.assertTrue((output[1] == [1, 1, 1, 2]).all())
-
-
- class TestBoxIOU(unittest.TestCase):
- def test_pairwise_iou(self):
- boxes1 = torch.tensor([[0.0, 0.0, 1.0, 1.0], [0.0, 0.0, 1.0, 1.0]])
-
- boxes2 = torch.tensor(
- [
- [0.0, 0.0, 1.0, 1.0],
- [0.0, 0.0, 0.5, 1.0],
- [0.0, 0.0, 1.0, 0.5],
- [0.0, 0.0, 0.5, 0.5],
- [0.5, 0.5, 1.0, 1.0],
- [0.5, 0.5, 1.5, 1.5],
- ]
- )
-
- expected_ious = torch.tensor(
- [
- [1.0, 0.5, 0.5, 0.25, 0.25, 0.25 / (2 - 0.25)],
- [1.0, 0.5, 0.5, 0.25, 0.25, 0.25 / (2 - 0.25)],
- ]
- )
-
- ious = pairwise_iou(Boxes(boxes1), Boxes(boxes2))
-
- assert torch.allclose(ious, expected_ious)
-
-
- if __name__ == "__main__":
- unittest.main()
|