| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| """Tests for coco_tools.""" |
|
|
| from absl.testing import absltest |
| import numpy as np |
| from pycocotools import mask |
|
|
| from deeplab2.utils import coco_tools |
|
|
|
|
| class CocoToolsTest(absltest.TestCase): |
|
|
| def testSingleImageDetectionMaskExport(self): |
| masks = np.array( |
| [[[1, 1,], [1, 1]], |
| [[0, 0], [0, 1]], |
| [[0, 0], [0, 0]]], dtype=np.uint8) |
| classes = np.array([1, 2, 3], dtype=np.int32) |
| scores = np.array([0.8, 0.2, 0.7], dtype=np.float32) |
| coco_annotations = coco_tools.ExportSingleImageDetectionMasksToCoco( |
| image_id='first_image', |
| category_id_set=set([1, 2, 3]), |
| detection_classes=classes, |
| detection_scores=scores, |
| detection_masks=masks) |
| expected_counts = ['04', '31', '4'] |
| for i, mask_annotation in enumerate(coco_annotations): |
| self.assertEqual(mask_annotation['segmentation']['counts'], |
| expected_counts[i]) |
| self.assertTrue(np.all(np.equal(mask.decode( |
| mask_annotation['segmentation']), masks[i]))) |
| self.assertEqual(mask_annotation['image_id'], 'first_image') |
| self.assertEqual(mask_annotation['category_id'], classes[i]) |
| self.assertAlmostEqual(mask_annotation['score'], scores[i]) |
|
|
| def testSingleImageGroundtruthExport(self): |
| masks = np.array( |
| [[[1, 1,], [1, 1]], |
| [[0, 0], [0, 1]], |
| [[0, 0], [0, 0]]], dtype=np.uint8) |
| boxes = np.array([[0, 0, 1, 1], |
| [0, 0, .5, .5], |
| [.5, .5, 1, 1]], dtype=np.float32) |
| coco_boxes = np.array([[0, 0, 1, 1], |
| [0, 0, .5, .5], |
| [.5, .5, .5, .5]], dtype=np.float32) |
| classes = np.array([1, 2, 3], dtype=np.int32) |
| is_crowd = np.array([0, 1, 0], dtype=np.int32) |
| next_annotation_id = 1 |
| expected_counts = ['04', '31', '4'] |
|
|
| |
| coco_annotations = coco_tools.ExportSingleImageGroundtruthToCoco( |
| image_id='first_image', |
| category_id_set=set([1, 2, 3]), |
| next_annotation_id=next_annotation_id, |
| groundtruth_boxes=boxes, |
| groundtruth_classes=classes, |
| groundtruth_masks=masks) |
| for i, annotation in enumerate(coco_annotations): |
| self.assertEqual(annotation['segmentation']['counts'], |
| expected_counts[i]) |
| self.assertTrue(np.all(np.equal(mask.decode( |
| annotation['segmentation']), masks[i]))) |
| self.assertTrue(np.all(np.isclose(annotation['bbox'], coco_boxes[i]))) |
| self.assertEqual(annotation['image_id'], 'first_image') |
| self.assertEqual(annotation['category_id'], classes[i]) |
| self.assertEqual(annotation['id'], i + next_annotation_id) |
|
|
| |
| coco_annotations = coco_tools.ExportSingleImageGroundtruthToCoco( |
| image_id='first_image', |
| category_id_set=set([1, 2, 3]), |
| next_annotation_id=next_annotation_id, |
| groundtruth_boxes=boxes, |
| groundtruth_classes=classes, |
| groundtruth_masks=masks, |
| groundtruth_is_crowd=is_crowd) |
| for i, annotation in enumerate(coco_annotations): |
| self.assertEqual(annotation['segmentation']['counts'], |
| expected_counts[i]) |
| self.assertTrue(np.all(np.equal(mask.decode( |
| annotation['segmentation']), masks[i]))) |
| self.assertTrue(np.all(np.isclose(annotation['bbox'], coco_boxes[i]))) |
| self.assertEqual(annotation['image_id'], 'first_image') |
| self.assertEqual(annotation['category_id'], classes[i]) |
| self.assertEqual(annotation['iscrowd'], is_crowd[i]) |
| self.assertEqual(annotation['id'], i + next_annotation_id) |
|
|
|
|
| if __name__ == '__main__': |
| absltest.main() |
|
|