class_docstr: Proposal generation module
  
  For more details, please refer to the document of generate_proposals 
  in ppdet/modeing/ops.py
  
  Args:
      pre_nms_top_n (int): Number of total bboxes to be kept per
          image before NMS. default 6000
      post_nms_top_n (int): Number of total bboxes to be kept per
          image after NMS. default 1000
      nms_thresh (float): Threshold in NMS. default 0.5
      min_size (flaot): Remove predicted boxes with either height or
           width < min_size. default 0.1
      eta (float): Apply in adaptive NMS, if adaptive `threshold > 0.5`,
           `adaptive_threshold = adaptive_threshold * eta` in each iteration.
           default 1.
      topk_after_collect (bool): whether to adopt topk after batch 
           collection. If topk_after_collect is true, box filter will not be 
           used after NMS at each image in proposal generation. default false
class_docstr_tok: ["Proposal","generation","module","For","more","details",",","please","refer","to","the","document","of","generate_proposals","in","ppdet\/modeing\/ops.py","Args",":","pre_nms_top_n","(","int",")",":","Number","of","total","bboxes","to","be","kept","per","image","before","NMS",".","default","6000","post_nms_top_n","(","int",")",":","Number","of","total","bboxes","to","be","kept","per","image","after","NMS",".","default","1000","nms_thresh","(","float",")",":","Threshold","in","NMS",".","default","0.5","min_size","(","flaot",")",":","Remove","predicted","boxes","with","either","height","or","width","<","min_size",".","default","0.1","eta","(","float",")",":","Apply","in","adaptive","NMS",",","if","adaptive","`","threshold",">","0.5","`",",","`","adaptive_threshold","=","adaptive_threshold","*","eta","`","in","each","iteration",".","default","1.","topk_after_collect","(","bool",")",":","whether","to","adopt","topk","after","batch","collection",".","If","topk_after_collect","is","true",",","box","filter","will","not","be","used","after","NMS","at","each","image","in","proposal","generation",".","default","false"]
code: def __call__(self, scores, bbox_deltas, anchors, im_shape):
      top_n = (
          self.pre_nms_top_n
          if self.topk_after_collect
          else self.post_nms_top_n
      )
      variances = paddle.ones_like(anchors)
      if hasattr(paddle.vision.ops, "generate_proposals"):
          generate_proposals = getattr(
              paddle.vision.ops, "generate_proposals"
          )
      else:
          generate_proposals = ops.generate_proposals
      rpn_rois, rpn_rois_prob, rpn_rois_num = generate_proposals(
          scores,
          bbox_deltas,
          im_shape,
          anchors,
          variances,
          pre_nms_top_n=self.pre_nms_top_n,
          post_nms_top_n=top_n,
          nms_thresh=self.nms_thresh,
          min_size=self.min_size,
          eta=self.eta,
          return_rois_num=True,
      )
  
      return rpn_rois, rpn_rois_prob, rpn_rois_num, self.post_nms_top_n
  
imports: import paddle
  from ppdet.core.workspace import register, serializable
  from ..None import ops
label_desc: Use image node_id 2 for calling the ProposalGenerator obj's underlying member method code with example usage: obj.__call__(scores, bbox_deltas, anchors, im_shape) and returns: rpn_rois,  rpn_rois_prob,  rpn_rois_num,  self