code: def _compute_targets(ex_rois, gt_rois, labels):
      """Compute bounding-box regression targets for an image."""
  
      assert ex_rois.shape[0] == gt_rois.shape[0]
      assert ex_rois.shape[1] == 4
      assert gt_rois.shape[1] == 4
  
      targets = bbox_transform(ex_rois, gt_rois)
      if cfg.TRAIN.BBOX_NORMALIZE_TARGETS_PRECOMPUTED:
          # Optionally normalize targets by a precomputed mean and stdev
          targets = (
              targets - np.array(cfg.TRAIN.BBOX_NORMALIZE_MEANS)
          ) / np.array(cfg.TRAIN.BBOX_NORMALIZE_STDS)
      return np.hstack((labels[:, np.newaxis], targets)).astype(
          np.float32, copy=False
      )
  
file_path: CNTK/Examples/Image/Detection/utils/caffe_layers/proposal_target_layer.py
imports: import yaml
  import numpy
  import numpy.random
  from utils.caffe_layers.default_config import cfg
  from utils.rpn.bbox_transform import bbox_transform
  from utils.cython_modules.cython_bbox import bbox_overlaps
label_desc: Use image node_id 2 for calling a global function with example usage: _compute_targets(ex_rois, gt_rois, labels) and returns: np