text: #!/usr/bin/env python
  
  """
  Copyright 2017-2018 Fizyr (https://fizyr.com)
  
  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.
  """
  
  import argparse
  import os
  import sys
  
  import keras
  import keras.preprocessing.image
  import tensorflow as tf
  
  # Allow relative imports when being executed as script.
  if __name__ == "__main__" and __package__ is None:
      sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..'))
      import keras_retinanet.bin
      __package__ = "keras_retinanet.bin"
  
  # Change these to absolute imports if you copy this script outside the keras_retinanet package.
  from .. import models
  from ..preprocessing.coco import CocoGenerator
  from ..utils.coco_eval import evaluate_coco
  from ..utils.keras_version import check_keras_version
  
  
  def get_session():
      config = tf.ConfigProto()
      config.gpu_options.allow_growth = True
      return tf.Session(config=config)
  
  
  def parse_args(args):
      parser = argparse.ArgumentParser(description='Simple evaluation script for COCO object detection.')
      parser.add_argument('model',             help='Path to RetinaNet model.')
      parser.add_argument('coco_path',         help='Path to COCO directory (ie. /tmp/COCO).')
      parser.add_argument('--convert-model',   help='Convert the model to an inference model (ie. the input is a training model).', action='store_true')
      parser.add_argument('--backbone',        help='The backbone of the model.', default='resnet50')
      parser.add_argument('--gpu',             help='Id of the GPU to use (as reported by nvidia-smi).')
      parser.add_argument('--set',             help='Name of the set file to evaluate (defaults to val2017).', default='val2017')
      parser.add_argument('--score-threshold', help='Threshold on score to filter detections with (defaults to 0.05).', default=0.05, type=float)
  
      return parser.parse_args(args)
  
  
  def main(args=None):
      # parse arguments
      if args is None:
          args = sys.argv[1:]
      args = parse_args(args)
  
      # make sure keras is the minimum required version
      check_keras_version()
  
      # optionally choose specific GPU
      if args.gpu:
          os.environ['CUDA_VISIBLE_DEVICES'] = args.gpu
      keras.backend.tensorflow_backend.set_session(get_session())
  
      # create the model
      print('Loading model, this may take a second...')
      model = models.load_model(args.model, backbone=args.backbone, convert=args.convert_model)
  
      # create a generator for testing data
      test_generator = CocoGenerator(
          args.coco_path,
          args.set
      )
  
      evaluate_coco(test_generator, model, args.score_threshold)
  
  if __name__ == '__main__':
      main()
  