code: def im_detect_bbox_aug(model, im, box_proposals=None):
      """Performs bbox detection with test-time augmentations.
      Function signature is the same as for im_detect_bbox.
      """
      assert (
          not cfg.TEST.BBOX_AUG.SCALE_SIZE_DEP
      ), "Size dependent scaling not implemented"
      assert (
          not cfg.TEST.BBOX_AUG.SCORE_HEUR == "UNION"
          or cfg.TEST.BBOX_AUG.COORD_HEUR == "UNION"
      ), "Coord heuristic must be union whenever score heuristic is union"
      assert (
          not cfg.TEST.BBOX_AUG.COORD_HEUR == "UNION"
          or cfg.TEST.BBOX_AUG.SCORE_HEUR == "UNION"
      ), "Score heuristic must be union whenever coord heuristic is union"
      assert (
          not cfg.MODEL.FASTER_RCNN
          or cfg.TEST.BBOX_AUG.SCORE_HEUR == "UNION"
      ), "Union heuristic must be used to combine Faster RCNN predictions"
  
      # Collect detections computed under different transformations
      scores_ts = []
      boxes_ts = []
  
      def add_preds_t(scores_t, boxes_t):
          scores_ts.append(scores_t)
          boxes_ts.append(boxes_t)
  
      # Perform detection on the horizontally flipped image
      if cfg.TEST.BBOX_AUG.H_FLIP:
          scores_hf, boxes_hf, _ = im_detect_bbox_hflip(
              model,
              im,
              cfg.TEST.SCALE,
              cfg.TEST.MAX_SIZE,
              box_proposals=box_proposals,
          )
          add_preds_t(scores_hf, boxes_hf)
  
      # Compute detections at different scales
      for scale in cfg.TEST.BBOX_AUG.SCALES:
          max_size = cfg.TEST.BBOX_AUG.MAX_SIZE
          scores_scl, boxes_scl = im_detect_bbox_scale(
              model, im, scale, max_size, box_proposals
          )
          add_preds_t(scores_scl, boxes_scl)
  
          if cfg.TEST.BBOX_AUG.SCALE_H_FLIP:
              scores_scl_hf, boxes_scl_hf = im_detect_bbox_scale(
                  model, im, scale, max_size, box_proposals, hflip=True
              )
              add_preds_t(scores_scl_hf, boxes_scl_hf)
  
      # Perform detection at different aspect ratios
      for aspect_ratio in cfg.TEST.BBOX_AUG.ASPECT_RATIOS:
          scores_ar, boxes_ar = im_detect_bbox_aspect_ratio(
              model, im, aspect_ratio, box_proposals
          )
          add_preds_t(scores_ar, boxes_ar)
  
          if cfg.TEST.BBOX_AUG.ASPECT_RATIO_H_FLIP:
              scores_ar_hf, boxes_ar_hf = im_detect_bbox_aspect_ratio(
                  model, im, aspect_ratio, box_proposals, hflip=True
              )
              add_preds_t(scores_ar_hf, boxes_ar_hf)
  
      # Compute detections for the original image (identity transform) last to
      # ensure that the Caffe2 workspace is populated with blobs corresponding
      # to the original image on return (postcondition of im_detect_bbox)
      scores_i, boxes_i, im_scale_i = im_detect_bbox(
          model,
          im,
          cfg.TEST.SCALE,
          cfg.TEST.MAX_SIZE,
          boxes=box_proposals,
      )
      add_preds_t(scores_i, boxes_i)
  
      # Combine the predicted scores
      if cfg.TEST.BBOX_AUG.SCORE_HEUR == "ID":
          scores_c = scores_i
      elif cfg.TEST.BBOX_AUG.SCORE_HEUR == "AVG":
          scores_c = np.mean(scores_ts, axis=0)
      elif cfg.TEST.BBOX_AUG.SCORE_HEUR == "UNION":
          scores_c = np.vstack(scores_ts)
      else:
          raise NotImplementedError(
              "Score heur {} not supported".format(
                  cfg.TEST.BBOX_AUG.SCORE_HEUR
              )
          )
  
      # Combine the predicted boxes
      if cfg.TEST.BBOX_AUG.COORD_HEUR == "ID":
          boxes_c = boxes_i
      elif cfg.TEST.BBOX_AUG.COORD_HEUR == "AVG":
          boxes_c = np.mean(boxes_ts, axis=0)
      elif cfg.TEST.BBOX_AUG.COORD_HEUR == "UNION":
          boxes_c = np.vstack(boxes_ts)
      else:
          raise NotImplementedError(
              "Coord heur {} not supported".format(
                  cfg.TEST.BBOX_AUG.COORD_HEUR
              )
          )
  
      return scores_c, boxes_c, im_scale_i
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from __future__ import unicode_literals
  from collections import defaultdict
  import cv2
  import logging
  import numpy
  from caffe2.python import core
  from caffe2.python import workspace
  import pycocotools.mask
  from detectron.core.config import cfg
  from detectron.utils.timer import Timer
  import detectron.core.test_retinanet
  import detectron.modeling.FPN
  import detectron.utils.blob
  import detectron.utils.boxes
  import detectron.utils.image
  import detectron.utils.keypoints
label_desc: Use image node_id 4 for calling a global function with example usage: im_detect_bbox_aug(model, im, box_proposals) and returns: scores_c,  boxes_c,  im_scale_i