code: def _forward(self):
      body_feats = self.backbone(self.inputs)
      if self.for_mot:
          neck_feats = self.neck(body_feats, self.for_mot)
      else:
          neck_feats = self.neck(body_feats)
  
      if isinstance(neck_feats, dict):
          assert self.for_mot == True
          emb_feats = neck_feats["emb_feats"]
          neck_feats = neck_feats["yolo_feats"]
  
      if self.training:
          yolo_losses = self.yolo_head(neck_feats, self.inputs)
  
          if self.for_mot:
              return {"det_losses": yolo_losses, "emb_feats": emb_feats}
          else:
              return yolo_losses
  
      else:
          yolo_head_outs = self.yolo_head(neck_feats)
  
          if self.for_mot:
              # the detection part of JDE MOT model
              (
                  boxes_idx,
                  bbox,
                  bbox_num,
                  nms_keep_idx,
              ) = self.post_process(
                  yolo_head_outs, self.yolo_head.mask_anchors
              )
              output = {
                  "bbox": bbox,
                  "bbox_num": bbox_num,
                  "boxes_idx": boxes_idx,
                  "nms_keep_idx": nms_keep_idx,
                  "emb_feats": emb_feats,
              }
          else:
              if self.return_idx:
                  # the detection part of JDE MOT model
                  _, bbox, bbox_num, nms_keep_idx = self.post_process(
                      yolo_head_outs, self.yolo_head.mask_anchors
                  )
              elif self.post_process is not None:
                  # anchor based YOLOs: YOLOv3,PP-YOLO,PP-YOLOv2 use mask_anchors
                  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:
                  # anchor free YOLOs: PP-YOLOE, PP-YOLOE+
                  (
                      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)
                  # Todo: get logits output
                  extra_data["nms_keep_idx"] = nms_keep_idx
                  # Todo support for mask_anchors yolo
                  output = {
                      "bbox": bbox,
                      "bbox_num": bbox_num,
                      "extra_data": extra_data,
                  }
              else:
                  output = {"bbox": bbox, "bbox_num": bbox_num}
  
          return output
  
file_path: PaddleDetection/ppdet/modeling/architectures/yolo.py
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from ppdet.core.workspace import register, create
  from .meta_arch import BaseArch
  from ..post_process import JDEBBoxPostProcess
label_desc: Use image node_id 3 for calling the YOLOv3 obj's underlying member method code with example usage: obj._forward() and returns: output, dict, yolo_losses