|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| """Tests for coco_utils."""
|
|
|
| import os
|
|
|
| import numpy as np
|
| import tensorflow as tf, tf_keras
|
|
|
| from official.vision.dataloaders import tfexample_utils
|
| from official.vision.evaluation import coco_utils
|
|
|
|
|
| class CocoUtilsTest(tf.test.TestCase):
|
|
|
| def test_scan_and_generator_annotation_file(self):
|
| num_samples = 10
|
| example = tfexample_utils.create_detection_test_example(
|
| image_height=512, image_width=512, image_channel=3, num_instances=10
|
| )
|
| tf_examples = [example] * num_samples
|
| data_file = os.path.join(self.create_tempdir(), 'test.tfrecord')
|
| tfexample_utils.dump_to_tfrecord(
|
| record_file=data_file, tf_examples=tf_examples
|
| )
|
| annotation_file = os.path.join(self.create_tempdir(), 'annotation.json')
|
|
|
| coco_utils.scan_and_generator_annotation_file(
|
| file_pattern=data_file,
|
| file_type='tfrecord',
|
| num_samples=num_samples,
|
| include_mask=True,
|
| annotation_file=annotation_file,
|
| )
|
| self.assertTrue(
|
| tf.io.gfile.exists(annotation_file),
|
| msg='Annotation file {annotation_file} does not exist.',
|
| )
|
|
|
| def test_convert_keypoint_predictions_to_coco_annotations(self):
|
| batch_size = 1
|
| max_num_detections = 3
|
| num_keypoints = 3
|
| image_size = 512
|
|
|
| source_id = [np.array([[1]], dtype=int)]
|
| detection_boxes = [
|
| np.random.random([batch_size, max_num_detections, 4]) * image_size
|
| ]
|
| detection_class = [
|
| np.random.randint(1, 5, [batch_size, max_num_detections])
|
| ]
|
| detection_scores = [np.random.random([batch_size, max_num_detections])]
|
|
|
| detection_keypoints = [
|
| np.random.random([batch_size, max_num_detections, num_keypoints, 2])
|
| * image_size
|
| ]
|
|
|
| predictions = {
|
| 'source_id': source_id,
|
| 'detection_boxes': detection_boxes,
|
| 'detection_classes': detection_class,
|
| 'detection_scores': detection_scores,
|
| 'detection_keypoints': detection_keypoints,
|
| }
|
| anns = coco_utils.convert_predictions_to_coco_annotations(predictions)
|
|
|
| for i in range(max_num_detections):
|
| expected_keypoint_ann = np.concatenate(
|
| [
|
| np.expand_dims(detection_keypoints[0][0, i, :, 1], axis=-1),
|
| np.expand_dims(detection_keypoints[0][0, i, :, 0], axis=-1),
|
| np.expand_dims(np.ones(num_keypoints), axis=1),
|
| ],
|
| axis=1,
|
| ).astype(int)
|
| expected_keypoint_ann = expected_keypoint_ann.flatten().tolist()
|
| self.assertAllEqual(anns[i]['keypoints'], expected_keypoint_ann)
|
|
|
|
|
| if __name__ == '__main__':
|
| tf.test.main()
|
|
|