parameters: (roidb, fg_rois_per_image, rois_per_image, num_classes)
return_statement: return labels, overlaps, rois, bbox_targets, bbox_inside_weights
docstring: Generate a random sample of RoIs comprising foreground and background
      examples.
docstring_summary: Generate a random sample of RoIs comprising foreground and background
      examples.
docstring_tokens: Generate a random sample of RoIs comprising foreground and background examples .
function: def _sample_rois(roidb, fg_rois_per_image, rois_per_image, num_classes):
      """Generate a random sample of RoIs comprising foreground and background
      examples.
      """
      # label = class RoI has max overlap with
      labels = roidb['max_classes']
      overlaps = roidb['max_overlaps']
      rois = roidb['boxes']
  
      # Select foreground RoIs as those with >= FG_THRESH overlap
      fg_inds = np.where(overlaps >= cfg.TRAIN.FG_THRESH)[0]
      # Guard against the case when an image has fewer than fg_rois_per_image
      # foreground RoIs
      fg_rois_per_this_image = np.minimum(fg_rois_per_image, fg_inds.size)
      # Sample foreground regions without replacement
      if fg_inds.size > 0:
          fg_inds = npr.choice(
                  fg_inds, size=fg_rois_per_this_image, replace=False)
  
      # Select background RoIs as those within [BG_THRESH_LO, BG_THRESH_HI)
      bg_inds = np.where((overlaps < cfg.TRAIN.BG_THRESH_HI) &
                         (overlaps >= cfg.TRAIN.BG_THRESH_LO))[0]
      # Compute number of background RoIs to take from this image (guarding
      # against there being fewer than desired)
      bg_rois_per_this_image = rois_per_image - fg_rois_per_this_image
      bg_rois_per_this_image = np.minimum(bg_rois_per_this_image,
                                          bg_inds.size)
      # Sample foreground regions without replacement
      if bg_inds.size > 0:
          bg_inds = npr.choice(
                  bg_inds, size=bg_rois_per_this_image, replace=False)
  
      # The indices that we're selecting (both fg and bg)
      keep_inds = np.append(fg_inds, bg_inds)
      # Select sampled values from various arrays:
      labels = labels[keep_inds]
      # Clamp labels for the background RoIs to 0
      labels[fg_rois_per_this_image:] = 0
      overlaps = overlaps[keep_inds]
      rois = rois[keep_inds]
  
      bbox_targets, bbox_inside_weights = _get_bbox_regression_labels(
              roidb['bbox_targets'][keep_inds, :], num_classes)
  
      return labels, overlaps, rois, bbox_targets, bbox_inside_weights
function_tokens: def _sample_rois ( roidb , fg_rois_per_image , rois_per_image , num_classes ) : # label = class RoI has max overlap with labels = roidb [ 'max_classes' ] overlaps = roidb [ 'max_overlaps' ] rois = roidb [ 'boxes' ] # Select foreground RoIs as those with >= FG_THRESH overlap fg_inds = np . where ( overlaps >= cfg . TRAIN . FG_THRESH ) [ 0 ] # Guard against the case when an image has fewer than fg_rois_per_image # foreground RoIs fg_rois_per_this_image = np . minimum ( fg_rois_per_image , fg_inds . size ) # Sample foreground regions without replacement if fg_inds . size > 0 : fg_inds = npr . choice ( fg_inds , size = fg_rois_per_this_image , replace = False ) # Select background RoIs as those within [BG_THRESH_LO, BG_THRESH_HI) bg_inds = np . where ( ( overlaps < cfg . TRAIN . BG_THRESH_HI ) & ( overlaps >= cfg . TRAIN . BG_THRESH_LO ) ) [ 0 ] # Compute number of background RoIs to take from this image (guarding # against there being fewer than desired) bg_rois_per_this_image = rois_per_image - fg_rois_per_this_image bg_rois_per_this_image = np . minimum ( bg_rois_per_this_image , bg_inds . size ) # Sample foreground regions without replacement if bg_inds . size > 0 : bg_inds = npr . choice ( bg_inds , size = bg_rois_per_this_image , replace = False ) # The indices that we're selecting (both fg and bg) keep_inds = np . append ( fg_inds , bg_inds ) # Select sampled values from various arrays: labels = labels [ keep_inds ] # Clamp labels for the background RoIs to 0 labels [ fg_rois_per_this_image : ] = 0 overlaps = overlaps [ keep_inds ] rois = rois [ keep_inds ] bbox_targets , bbox_inside_weights = _get_bbox_regression_labels ( roidb [ 'bbox_targets' ] [ keep_inds , : ] , num_classes ) return labels , overlaps , rois , bbox_targets , bbox_inside_weights