class_docstr: assigner of rbox
  Args:
      pos_iou_thr (float): threshold of pos samples
      neg_iou_thr (float): threshold of neg samples
      min_iou_thr (float): the min threshold of samples
      ignore_iof_thr (int): the ignored threshold
class_docstr_tok: ["assigner","of","rbox","Args",":","pos_iou_thr","(","float",")",":","threshold","of","pos","samples","neg_iou_thr","(","float",")",":","threshold","of","neg","samples","min_iou_thr","(","float",")",":","the","min","threshold","of","samples","ignore_iof_thr","(","int",")",":","the","ignored","threshold"]
code: def __call__(self, anchors, gt_bboxes, gt_labels, is_crowd):
      assert anchors.ndim == 2
      assert anchors.shape[1] == 5
      assert gt_bboxes.ndim == 2
      assert gt_bboxes.shape[1] == 5
  
      pos_iou_thr = self.pos_iou_thr
      neg_iou_thr = self.neg_iou_thr
      min_iou_thr = self.min_iou_thr
      ignore_iof_thr = self.ignore_iof_thr
  
      anchor_num = anchors.shape[0]
  
      gt_bboxes = gt_bboxes
      is_crowd_slice = is_crowd
      not_crowd_inds = np.where(is_crowd_slice == 0)
  
      # Step1: match anchor and gt_bbox
      (
          anchor_gt_bbox_inds,
          anchor_gt_bbox_iou,
          labels,
      ) = self.assign_anchor(
          anchors,
          gt_bboxes,
          gt_labels.reshape(-1),
          pos_iou_thr,
          neg_iou_thr,
          min_iou_thr,
          ignore_iof_thr,
      )
  
      # Step2: sample anchor
      pos_inds = np.where(labels >= 0)[0]
      neg_inds = np.where(labels == -1)[0]
  
      # Step3: make output
      anchors_num = anchors.shape[0]
      bbox_targets = np.zeros_like(anchors)
      bbox_weights = np.zeros_like(anchors)
      bbox_gt_bboxes = np.zeros_like(anchors)
      pos_labels = np.zeros(anchors_num, dtype=np.int32)
      pos_labels_weights = np.zeros(anchors_num, dtype=np.float32)
  
      pos_sampled_anchors = anchors[pos_inds]
      pos_sampled_gt_boxes = gt_bboxes[anchor_gt_bbox_inds[pos_inds]]
      if len(pos_inds) > 0:
          pos_bbox_targets = self.rbox2delta(
              pos_sampled_anchors, pos_sampled_gt_boxes
          )
          bbox_targets[pos_inds, :] = pos_bbox_targets
          bbox_gt_bboxes[pos_inds, :] = pos_sampled_gt_boxes
          bbox_weights[pos_inds, :] = 1.0
  
          pos_labels[pos_inds] = labels[pos_inds]
          pos_labels_weights[pos_inds] = 1.0
  
      if len(neg_inds) > 0:
          pos_labels_weights[neg_inds] = 1.0
      return (
          pos_labels,
          pos_labels_weights,
          bbox_targets,
          bbox_weights,
          bbox_gt_bboxes,
          pos_inds,
          neg_inds,
      )
  
imports: import sys
  import paddle
  from ppdet.core.workspace import register, serializable
  from .target import rpn_anchor_target, generate_proposal_target, generate_mask_target, libra_generate_proposal_target
  import numpy
label_desc: Use image node_id 5 for calling the RBoxAssigner obj's underlying member method code with example usage: obj.__call__(anchors, gt_bboxes, gt_labels, is_crowd) and returns: pos_labels,  pos_labels_weights,  bbox_targets,  bbox_weights,  bbox_gt_bboxes,  pos_inds,  neg_inds