Spaces:
Runtime error
Runtime error
| # Lint as: python2, python3 | |
| # Copyright 2018 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 DeepLab model and some helper functions.""" | |
| import tensorflow as tf | |
| from deeplab import common | |
| from deeplab import model | |
| class DeeplabModelTest(tf.test.TestCase): | |
| def testWrongDeepLabVariant(self): | |
| model_options = common.ModelOptions([])._replace( | |
| model_variant='no_such_variant') | |
| with self.assertRaises(ValueError): | |
| model._get_logits(images=[], model_options=model_options) | |
| def testBuildDeepLabv2(self): | |
| batch_size = 2 | |
| crop_size = [41, 41] | |
| # Test with two image_pyramids. | |
| image_pyramids = [[1], [0.5, 1]] | |
| # Test two model variants. | |
| model_variants = ['xception_65', 'mobilenet_v2'] | |
| # Test with two output_types. | |
| outputs_to_num_classes = {'semantic': 3, | |
| 'direction': 2} | |
| expected_endpoints = [['merged_logits'], | |
| ['merged_logits', | |
| 'logits_0.50', | |
| 'logits_1.00']] | |
| expected_num_logits = [1, 3] | |
| for model_variant in model_variants: | |
| model_options = common.ModelOptions(outputs_to_num_classes)._replace( | |
| add_image_level_feature=False, | |
| aspp_with_batch_norm=False, | |
| aspp_with_separable_conv=False, | |
| model_variant=model_variant) | |
| for i, image_pyramid in enumerate(image_pyramids): | |
| g = tf.Graph() | |
| with g.as_default(): | |
| with self.test_session(graph=g): | |
| inputs = tf.random_uniform( | |
| (batch_size, crop_size[0], crop_size[1], 3)) | |
| outputs_to_scales_to_logits = model.multi_scale_logits( | |
| inputs, model_options, image_pyramid=image_pyramid) | |
| # Check computed results for each output type. | |
| for output in outputs_to_num_classes: | |
| scales_to_logits = outputs_to_scales_to_logits[output] | |
| self.assertListEqual(sorted(scales_to_logits.keys()), | |
| sorted(expected_endpoints[i])) | |
| # Expected number of logits = len(image_pyramid) + 1, since the | |
| # last logits is merged from all the scales. | |
| self.assertEqual(len(scales_to_logits), expected_num_logits[i]) | |
| def testForwardpassDeepLabv3plus(self): | |
| crop_size = [33, 33] | |
| outputs_to_num_classes = {'semantic': 3} | |
| model_options = common.ModelOptions( | |
| outputs_to_num_classes, | |
| crop_size, | |
| output_stride=16 | |
| )._replace( | |
| add_image_level_feature=True, | |
| aspp_with_batch_norm=True, | |
| logits_kernel_size=1, | |
| decoder_output_stride=[4], | |
| model_variant='mobilenet_v2') # Employ MobileNetv2 for fast test. | |
| g = tf.Graph() | |
| with g.as_default(): | |
| with self.test_session(graph=g) as sess: | |
| inputs = tf.random_uniform( | |
| (1, crop_size[0], crop_size[1], 3)) | |
| outputs_to_scales_to_logits = model.multi_scale_logits( | |
| inputs, | |
| model_options, | |
| image_pyramid=[1.0]) | |
| sess.run(tf.global_variables_initializer()) | |
| outputs_to_scales_to_logits = sess.run(outputs_to_scales_to_logits) | |
| # Check computed results for each output type. | |
| for output in outputs_to_num_classes: | |
| scales_to_logits = outputs_to_scales_to_logits[output] | |
| # Expect only one output. | |
| self.assertEqual(len(scales_to_logits), 1) | |
| for logits in scales_to_logits.values(): | |
| self.assertTrue(logits.any()) | |
| def testBuildDeepLabWithDensePredictionCell(self): | |
| batch_size = 1 | |
| crop_size = [33, 33] | |
| outputs_to_num_classes = {'semantic': 2} | |
| expected_endpoints = ['merged_logits'] | |
| dense_prediction_cell_config = [ | |
| {'kernel': 3, 'rate': [1, 6], 'op': 'conv', 'input': -1}, | |
| {'kernel': 3, 'rate': [18, 15], 'op': 'conv', 'input': 0}, | |
| ] | |
| model_options = common.ModelOptions( | |
| outputs_to_num_classes, | |
| crop_size, | |
| output_stride=16)._replace( | |
| aspp_with_batch_norm=True, | |
| model_variant='mobilenet_v2', | |
| dense_prediction_cell_config=dense_prediction_cell_config) | |
| g = tf.Graph() | |
| with g.as_default(): | |
| with self.test_session(graph=g): | |
| inputs = tf.random_uniform( | |
| (batch_size, crop_size[0], crop_size[1], 3)) | |
| outputs_to_scales_to_model_results = model.multi_scale_logits( | |
| inputs, | |
| model_options, | |
| image_pyramid=[1.0]) | |
| for output in outputs_to_num_classes: | |
| scales_to_model_results = outputs_to_scales_to_model_results[output] | |
| self.assertListEqual( | |
| list(scales_to_model_results), expected_endpoints) | |
| self.assertEqual(len(scales_to_model_results), 1) | |
| if __name__ == '__main__': | |
| tf.test.main() | |