deanna-emery's picture
updates
93528c6
raw
history blame
3.2 kB
# Copyright 2023 The TensorFlow Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""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()