class_docstr: PPYOLOE network, see https://arxiv.org/abs/2203.16250
  
  Args:
      backbone (nn.Layer): backbone instance
      neck (nn.Layer): neck instance
      yolo_head (nn.Layer): anchor_head instance
      post_process (object): `BBoxPostProcess` instance
      ssod_loss (object): 'SSODPPYOLOELoss' instance, only used for semi-det(ssod)
      for_distill (bool): whether for distillation
      feat_distill_place (str): distill which feature for distillation
      for_mot (bool): whether return other features for multi-object tracking
          models, default False in pure object detection models.
code: def _forward(self):
      body_feats = self.backbone(self.inputs)
      neck_feats = self.neck(body_feats, self.for_mot)
  
      self.is_teacher = self.inputs.get(
          "is_teacher", False
      )  # for semi-det
      if self.training or self.is_teacher:
          yolo_losses = self.yolo_head(neck_feats, self.inputs)
  
          if self.for_distill:
              if self.feat_distill_place == "backbone_feats":
                  self.yolo_head.distill_pairs[
                      "backbone_feats"
                  ] = body_feats
              elif self.feat_distill_place == "neck_feats":
                  self.yolo_head.distill_pairs[
                      "neck_feats"
                  ] = neck_feats
              else:
                  raise ValueError
          return yolo_losses
      else:
          yolo_head_outs = self.yolo_head(neck_feats)
  
          if self.post_process is not None:
              bbox, bbox_num, nms_keep_idx = self.post_process(
                  yolo_head_outs,
                  self.yolo_head.mask_anchors,
                  self.inputs["im_shape"],
                  self.inputs["scale_factor"],
              )
  
          else:
              (
                  bbox,
                  bbox_num,
                  nms_keep_idx,
              ) = self.yolo_head.post_process(
                  yolo_head_outs, self.inputs["scale_factor"]
              )
  
          if self.use_extra_data:
              extra_data = (
                  {}
              )  # record the bbox output before nms, such like scores and nms_keep_idx
              """extra_data:{
                              'scores': predict scores,
                              'nms_keep_idx': bbox index before nms,
                             }
                             """
              extra_data["scores"] = yolo_head_outs[
                  0
              ]  # predict scores (probability)
              extra_data["nms_keep_idx"] = nms_keep_idx
              output = {
                  "bbox": bbox,
                  "bbox_num": bbox_num,
                  "extra_data": extra_data,
              }
          else:
              output = {"bbox": bbox, "bbox_num": bbox_num}
  
          return output
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import copy
  import paddle
  from ppdet.core.workspace import register, create
  from .meta_arch import BaseArch
label_desc: Use image node_id 3 for calling the PPYOLOE obj's underlying member method code with example usage: obj._forward() and returns: yolo_losses, output