code: def post_process(self, head_outs, scale_factor):
      pred_scores, pred_bboxes = head_outs
      # [B, N, 5] -> [B, N, 8]
      pred_bboxes = self._box2corners(pred_bboxes)
      # scale bbox to origin
      scale_y, scale_x = paddle.split(scale_factor, 2, axis=-1)
      scale_factor = paddle.concat(
          [
              scale_x,
              scale_y,
              scale_x,
              scale_y,
              scale_x,
              scale_y,
              scale_x,
              scale_y,
          ],
          axis=-1,
      ).reshape([-1, 1, 8])
      pred_bboxes /= scale_factor
      if self.export_onnx:
          return pred_bboxes, pred_scores, None
      bbox_pred, bbox_num, nms_keep_idx = self.nms(
          pred_bboxes, pred_scores
      )
      return bbox_pred, bbox_num, nms_keep_idx
  
imports: import paddle
  import paddle.nn
  import paddle.nn.functional
  from ppdet.core.workspace import register
  from ..losses import ProbIoULoss
  from ..initializer import bias_init_with_prob, constant_, normal_, vector_
  from ppdet.modeling.backbones.cspresnet import ConvBNLayer
  from ppdet.modeling.ops import get_static_shape, get_act_fn, anchor_generator
  from ppdet.modeling.layers import MultiClassNMS
label_desc: Use image node_id 15 for calling the PPYOLOERHead obj's underlying member method code with example usage: obj.post_process(head_outs, scale_factor) and returns: bbox_pred,  bbox_num,  nms_keep_idx, pred_bboxes,  pred_scores,  None