Download mmdetection/tests/test_structures/test_bbox/test_base_boxes.py from Saurabh1105/MMDet: direct link, hf CLI and curl.
- Browser
- Download file 10.8 kB
-
https://huggingface.co/Saurabh1105/MMDet/resolve/main/mmdetection/tests/test_structures/test_bbox/test_base_boxes.py
- Command line
-
hf download hf://Saurabh1105/MMDet/mmdetection/tests/test_structures/test_bbox/test_base_boxes.py
-
curl -L -o test_base_boxes.py https://huggingface.co/Saurabh1105/MMDet/resolve/main/mmdetection/tests/test_structures/test_bbox/test_base_boxes.py
10.8 kB
| from unittest import TestCase | |
| import numpy as np | |
| import torch | |
| from mmengine.testing import assert_allclose | |
| from .utils import ToyBaseBoxes | |
| class TestBaseBoxes(TestCase): | |
| def test_init(self): | |
| box_tensor = torch.rand((3, 4, 4)) | |
| boxes = ToyBaseBoxes(box_tensor) | |
| boxes = ToyBaseBoxes(box_tensor, dtype=torch.float64) | |
| self.assertEqual(boxes.tensor.dtype, torch.float64) | |
| if torch.cuda.is_available(): | |
| boxes = ToyBaseBoxes(box_tensor, device='cuda') | |
| self.assertTrue(boxes.tensor.is_cuda) | |
| with self.assertRaises(AssertionError): | |
| box_tensor = torch.rand((4, )) | |
| boxes = ToyBaseBoxes(box_tensor) | |
| with self.assertRaises(AssertionError): | |
| box_tensor = torch.rand((3, 4, 3)) | |
| boxes = ToyBaseBoxes(box_tensor) | |
| def test_getitem(self): | |
| boxes = ToyBaseBoxes(torch.rand(3, 4, 4)) | |
| # test single dimension index | |
| # int | |
| new_boxes = boxes[0] | |
| self.assertIsInstance(new_boxes, ToyBaseBoxes) | |
| self.assertEqual(new_boxes.tensor.shape, (4, 4)) | |
| # list | |
| new_boxes = boxes[[0, 2]] | |
| self.assertIsInstance(new_boxes, ToyBaseBoxes) | |
| self.assertEqual(new_boxes.tensor.shape, (2, 4, 4)) | |
| # slice | |
| new_boxes = boxes[0:2] | |
| self.assertIsInstance(new_boxes, ToyBaseBoxes) | |
| self.assertEqual(new_boxes.tensor.shape, (2, 4, 4)) | |
| # torch.LongTensor | |
| new_boxes = boxes[torch.LongTensor([0, 1])] | |
| self.assertIsInstance(new_boxes, ToyBaseBoxes) | |
| self.assertEqual(new_boxes.tensor.shape, (2, 4, 4)) | |
| # torch.BoolTensor | |
| new_boxes = boxes[torch.BoolTensor([True, False, True])] | |
| self.assertIsInstance(new_boxes, ToyBaseBoxes) | |
| self.assertEqual(new_boxes.tensor.shape, (2, 4, 4)) | |
| with self.assertRaises(AssertionError): | |
| index = torch.rand((2, 4, 4)) > 0 | |
| new_boxes = boxes[index] | |
| # test multiple dimension index | |
| # select single box | |
| new_boxes = boxes[1, 2] | |
| self.assertIsInstance(new_boxes, ToyBaseBoxes) | |
| self.assertEqual(new_boxes.tensor.shape, (1, 4)) | |
| # select the last dimension | |
| with self.assertRaises(AssertionError): | |
| new_boxes = boxes[1, 2, 1] | |
| # has Ellipsis | |
| new_boxes = boxes[None, ...] | |
| self.assertIsInstance(new_boxes, ToyBaseBoxes) | |
| self.assertEqual(new_boxes.tensor.shape, (1, 3, 4, 4)) | |
| with self.assertRaises(AssertionError): | |
| new_boxes = boxes[..., None] | |
| def test_setitem(self): | |
| values = ToyBaseBoxes(torch.rand(3, 4, 4)) | |
| tensor = torch.rand(3, 4, 4) | |
| # only support BaseBoxes type | |
| with self.assertRaises(AssertionError): | |
| boxes = ToyBaseBoxes(torch.rand(3, 4, 4)) | |
| boxes[0:2] = tensor[0:2] | |
| # test single dimension index | |
| # int | |
| boxes = ToyBaseBoxes(torch.rand(3, 4, 4)) | |
| boxes[1] = values[1] | |
| assert_allclose(boxes.tensor[1], values.tensor[1]) | |
| # list | |
| boxes = ToyBaseBoxes(torch.rand(3, 4, 4)) | |
| boxes[[1, 2]] = values[[1, 2]] | |
| assert_allclose(boxes.tensor[[1, 2]], values.tensor[[1, 2]]) | |
| # slice | |
| boxes = ToyBaseBoxes(torch.rand(3, 4, 4)) | |
| boxes[0:2] = values[0:2] | |
| assert_allclose(boxes.tensor[0:2], values.tensor[0:2]) | |
| # torch.BoolTensor | |
| boxes = ToyBaseBoxes(torch.rand(3, 4, 4)) | |
| index = torch.rand(3, 4) > 0.5 | |
| boxes[index] = values[index] | |
| assert_allclose(boxes.tensor[index], values.tensor[index]) | |
| # multiple dimension index | |
| boxes = ToyBaseBoxes(torch.rand(3, 4, 4)) | |
| boxes[0:2, 0:2] = values[0:2, 0:2] | |
| assert_allclose(boxes.tensor[0:2, 0:2], values.tensor[0:2, 0:2]) | |
| # select single box | |
| boxes = ToyBaseBoxes(torch.rand(3, 4, 4)) | |
| boxes[1, 1] = values[1, 1] | |
| assert_allclose(boxes.tensor[1, 1], values.tensor[1, 1]) | |
| # select the last dimension | |
| with self.assertRaises(AssertionError): | |
| boxes = ToyBaseBoxes(torch.rand(3, 4, 4)) | |
| boxes[1, 1, 1] = values[1, 1, 1] | |
| # has Ellipsis | |
| boxes = ToyBaseBoxes(torch.rand(3, 4, 4)) | |
| boxes[0:2, ...] = values[0:2, ...] | |
| assert_allclose(boxes.tensor[0:2, ...], values.tensor[0:2, ...]) | |
| def test_tensor_like_functions(self): | |
| boxes = ToyBaseBoxes(torch.rand(3, 4, 4)) | |
| # new_tensor | |
| boxes.new_tensor([1, 2, 3]) | |
| # new_full | |
| boxes.new_full((3, 4), 0) | |
| # new_empty | |
| boxes.new_empty((3, 4)) | |
| # new_ones | |
| boxes.new_ones((3, 4)) | |
| # new_zeros | |
| boxes.new_zeros((3, 4)) | |
| # size | |
| self.assertEqual(boxes.size(0), 3) | |
| self.assertEqual(tuple(boxes.size()), (3, 4, 4)) | |
| # dim | |
| self.assertEqual(boxes.dim(), 3) | |
| # device | |
| self.assertIsInstance(boxes.device, torch.device) | |
| # dtype | |
| self.assertIsInstance(boxes.dtype, torch.dtype) | |
| # numpy | |
| np_boxes = boxes.numpy() | |
| self.assertIsInstance(np_boxes, np.ndarray) | |
| self.assertTrue((np_boxes == np_boxes).all()) | |
| # to | |
| new_boxes = boxes.to(torch.uint8) | |
| self.assertEqual(new_boxes.tensor.dtype, torch.uint8) | |
| if torch.cuda.is_available(): | |
| new_boxes = boxes.to(device='cuda') | |
| self.assertTrue(new_boxes.tensor.is_cuda) | |
| # cpu | |
| if torch.cuda.is_available(): | |
| new_boxes = boxes.to(device='cuda') | |
| new_boxes = new_boxes.cpu() | |
| self.assertFalse(new_boxes.tensor.is_cuda) | |
| # cuda | |
| if torch.cuda.is_available(): | |
| new_boxes = boxes.cuda() | |
| self.assertTrue(new_boxes.tensor.is_cuda) | |
| # clone | |
| boxes.clone() | |
| # detach | |
| boxes.detach() | |
| # view | |
| new_boxes = boxes.view(12, 4) | |
| self.assertEqual(tuple(new_boxes.size()), (12, 4)) | |
| new_boxes = boxes.view(-1, 4) | |
| self.assertEqual(tuple(new_boxes.size()), (12, 4)) | |
| with self.assertRaises(AssertionError): | |
| new_boxes = boxes.view(-1) | |
| # reshape | |
| new_boxes = boxes.reshape(12, 4) | |
| self.assertEqual(tuple(new_boxes.size()), (12, 4)) | |
| new_boxes = boxes.reshape(-1, 4) | |
| self.assertEqual(tuple(new_boxes.size()), (12, 4)) | |
| with self.assertRaises(AssertionError): | |
| new_boxes = boxes.reshape(-1) | |
| # expand | |
| new_boxes = boxes[None, ...].expand(4, -1, -1, -1) | |
| self.assertEqual(tuple(new_boxes.size()), (4, 3, 4, 4)) | |
| # repeat | |
| new_boxes = boxes.repeat(2, 2, 1) | |
| self.assertEqual(tuple(new_boxes.size()), (6, 8, 4)) | |
| with self.assertRaises(AssertionError): | |
| new_boxes = boxes.repeat(2, 2, 2) | |
| # transpose | |
| new_boxes = boxes.transpose(0, 1) | |
| self.assertEqual(tuple(new_boxes.size()), (4, 3, 4)) | |
| with self.assertRaises(AssertionError): | |
| new_boxes = boxes.transpose(1, 2) | |
| # permute | |
| new_boxes = boxes.permute(1, 0, 2) | |
| self.assertEqual(tuple(new_boxes.size()), (4, 3, 4)) | |
| with self.assertRaises(AssertionError): | |
| new_boxes = boxes.permute(2, 1, 0) | |
| # split | |
| boxes_list = boxes.split(1, dim=0) | |
| for box in boxes_list: | |
| self.assertIsInstance(box, ToyBaseBoxes) | |
| self.assertEqual(tuple(box.size()), (1, 4, 4)) | |
| boxes_list = boxes.split([1, 2], dim=0) | |
| with self.assertRaises(AssertionError): | |
| boxes_list = boxes.split(1, dim=2) | |
| # chunk | |
| boxes_list = boxes.split(3, dim=1) | |
| self.assertEqual(len(boxes_list), 2) | |
| for box in boxes_list: | |
| self.assertIsInstance(box, ToyBaseBoxes) | |
| with self.assertRaises(AssertionError): | |
| boxes_list = boxes.split(3, dim=2) | |
| # unbind | |
| boxes_list = boxes.unbind(dim=1) | |
| self.assertEqual(len(boxes_list), 4) | |
| for box in boxes_list: | |
| self.assertIsInstance(box, ToyBaseBoxes) | |
| self.assertEqual(tuple(box.size()), (3, 4)) | |
| with self.assertRaises(AssertionError): | |
| boxes_list = boxes.unbind(dim=2) | |
| # flatten | |
| new_boxes = boxes.flatten() | |
| self.assertEqual(tuple(new_boxes.size()), (12, 4)) | |
| with self.assertRaises(AssertionError): | |
| new_boxes = boxes.flatten(end_dim=2) | |
| # squeeze | |
| boxes = ToyBaseBoxes(torch.rand(1, 3, 1, 4, 4)) | |
| new_boxes = boxes.squeeze() | |
| self.assertEqual(tuple(new_boxes.size()), (3, 4, 4)) | |
| new_boxes = boxes.squeeze(dim=2) | |
| self.assertEqual(tuple(new_boxes.size()), (1, 3, 4, 4)) | |
| # unsqueeze | |
| boxes = ToyBaseBoxes(torch.rand(3, 4, 4)) | |
| new_boxes = boxes.unsqueeze(0) | |
| self.assertEqual(tuple(new_boxes.size()), (1, 3, 4, 4)) | |
| with self.assertRaises(AssertionError): | |
| new_boxes = boxes.unsqueeze(3) | |
| # cat | |
| with self.assertRaises(ValueError): | |
| ToyBaseBoxes.cat([]) | |
| box_list = [] | |
| box_list.append(ToyBaseBoxes(torch.rand(3, 4, 4))) | |
| box_list.append(ToyBaseBoxes(torch.rand(1, 4, 4))) | |
| with self.assertRaises(AssertionError): | |
| ToyBaseBoxes.cat(box_list, dim=2) | |
| cat_boxes = ToyBaseBoxes.cat(box_list, dim=0) | |
| self.assertIsInstance(cat_boxes, ToyBaseBoxes) | |
| self.assertEqual((cat_boxes.size()), (4, 4, 4)) | |
| # stack | |
| with self.assertRaises(ValueError): | |
| ToyBaseBoxes.stack([]) | |
| box_list = [] | |
| box_list.append(ToyBaseBoxes(torch.rand(3, 4, 4))) | |
| box_list.append(ToyBaseBoxes(torch.rand(3, 4, 4))) | |
| with self.assertRaises(AssertionError): | |
| ToyBaseBoxes.stack(box_list, dim=3) | |
| stack_boxes = ToyBaseBoxes.stack(box_list, dim=1) | |
| self.assertIsInstance(stack_boxes, ToyBaseBoxes) | |
| self.assertEqual((stack_boxes.size()), (3, 2, 4, 4)) | |
| def test_misc(self): | |
| boxes = ToyBaseBoxes(torch.rand(3, 4, 4)) | |
| # __len__ | |
| self.assertEqual(len(boxes), 3) | |
| # __repr__ | |
| repr(boxes) | |
| # fake_boxes | |
| new_boxes = boxes.fake_boxes((3, 4, 4), 1) | |
| self.assertEqual(tuple(new_boxes.size()), (3, 4, 4)) | |
| self.assertEqual(boxes.dtype, new_boxes.dtype) | |
| self.assertEqual(boxes.device, new_boxes.device) | |
| self.assertTrue((new_boxes.tensor == 1).all()) | |
| with self.assertRaises(AssertionError): | |
| new_boxes = boxes.fake_boxes((3, 4, 1)) | |
| new_boxes = boxes.fake_boxes((3, 4, 4), dtype=torch.uint8) | |
| self.assertEqual(new_boxes.dtype, torch.uint8) | |
| if torch.cuda.is_available(): | |
| new_boxes = boxes.fake_boxes((3, 4, 4), device='cuda') | |
| self.assertTrue(new_boxes.tensor.is_cuda) | |