class_docstr: S2Anet head
  Args:
      stacked_convs (int): number of stacked_convs
      feat_in (int): input channels of feat
      feat_out (int): output channels of feat
      num_classes (int): num_classes
      anchor_strides (list): stride of anchors
      anchor_scales (list): scale of anchors
      anchor_ratios (list): ratios of anchors
      target_means (list): target_means
      target_stds (list): target_stds
      align_conv_type (str): align_conv_type ['Conv', 'AlignConv']
      align_conv_size (int): kernel size of align_conv
      use_sigmoid_cls (bool): use sigmoid_cls or not
      reg_loss_weight (list): loss weight for regression
class_docstr_tok: ["S2Anet","head","Args",":","stacked_convs","(","int",")",":","number","of","stacked_convs","feat_in","(","int",")",":","input","channels","of","feat","feat_out","(","int",")",":","output","channels","of","feat","num_classes","(","int",")",":","num_classes","anchor_strides","(","list",")",":","stride","of","anchors","anchor_scales","(","list",")",":","scale","of","anchors","anchor_ratios","(","list",")",":","ratios","of","anchors","target_means","(","list",")",":","target_means","target_stds","(","list",")",":","target_stds","align_conv_type","(","str",")",":","align_conv_type","[","'Conv","'",",","'AlignConv","'","]","align_conv_size","(","int",")",":","kernel","size","of","align_conv","use_sigmoid_cls","(","bool",")",":","use","sigmoid_cls","or","not","reg_loss_weight","(","list",")",":","loss","weight","for","regression"]
code: def get_bboxes_single(self, cls_score_list, bbox_pred_list):
      mlvl_bboxes = []
      mlvl_scores = []
  
      for cls_score, bbox_pred in zip(cls_score_list, bbox_pred_list):
          if self.use_sigmoid_cls:
              scores = F.sigmoid(cls_score)
          else:
              scores = F.softmax(cls_score, axis=-1)
  
          if scores.shape[0] > self.nms_pre:
              # Get maximum scores for foreground classes.
              if self.use_sigmoid_cls:
                  max_scores = paddle.max(scores, axis=1)
              else:
                  max_scores = paddle.max(scores[:, :-1], axis=1)
  
              topk_val, topk_inds = paddle.topk(
                  max_scores, self.nms_pre
              )
              bbox_pred = paddle.gather(bbox_pred, topk_inds)
              scores = paddle.gather(scores, topk_inds)
  
          mlvl_bboxes.append(bbox_pred)
          mlvl_scores.append(scores)
  
      mlvl_bboxes = paddle.concat(mlvl_bboxes)
      mlvl_scores = paddle.concat(mlvl_scores)
  
      mlvl_polys = self.rbox2poly(mlvl_bboxes).unsqueeze(0)
      mlvl_scores = paddle.transpose(mlvl_scores, [1, 0]).unsqueeze(0)
  
      bbox, bbox_num, _ = self.nms(mlvl_polys, mlvl_scores)
      if bbox.shape[0] <= 0:
          bbox = self.fake_bbox
          bbox_num = self.fake_bbox_num
  
      return bbox, bbox_num
  
imports: import paddle
  from paddle import ParamAttr
  import paddle.nn
  import paddle.nn.functional
  from paddle.nn.initializer import Normal, Constant
  from ppdet.core.workspace import register
  from ppdet.modeling.proposal_generator.target_layer import RBoxAssigner
  from ppdet.modeling.proposal_generator.anchor_generator import S2ANetAnchorGenerator
  from ppdet.modeling.layers import AlignConv
  from ..cls_utils import _get_class_default_kwargs
  import numpy
label_desc: Use image node_id 5 for calling the S2ANetHead obj's underlying member method code with example usage: obj.get_bboxes_single(cls_score_list, bbox_pred_list) and returns: bbox,  bbox_num