class_docstr: BlazeFace: Sub-millisecond Neural Face Detection on Mobile GPUs,
             see https://arxiv.org/abs/1907.05047
  
  Args:
      backbone (nn.Layer): backbone instance
      neck (nn.Layer): neck instance
      blaze_head (nn.Layer): `blazeHead` instance
      post_process (object): `BBoxPostProcess` instance
class_docstr_tok: ["BlazeFace",":","Sub-millisecond","Neural","Face","Detection","on","Mobile","GPUs",",","see","https",":","\/\/arxiv.org\/abs\/1907.05047","Args",":","backbone","(","nn.Layer",")",":","backbone","instance","neck","(","nn.Layer",")",":","neck","instance","blaze_head","(","nn.Layer",")",":","`","blazeHead","`","instance","post_process","(","object",")",":","`","BBoxPostProcess","`","instance"]
code: def _forward(self):
      # Backbone
      body_feats = self.backbone(self.inputs)
      # neck
      neck_feats = self.neck(body_feats)
      # blaze Head
      if self.training:
          return self.blaze_head(
              neck_feats,
              self.inputs["image"],
              self.inputs["gt_bbox"],
              self.inputs["gt_class"],
          )
      else:
          preds, anchors = self.blaze_head(
              neck_feats, self.inputs["image"]
          )
          bbox, bbox_num, nms_keep_idx = self.post_process(
              preds,
              anchors,
              self.inputs["im_shape"],
              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,
                             }
                             """
              preds_logits = preds[1]  # [[1xNumBBoxNumClass]]
              extra_data["scores"] = F.softmax(
                  paddle.concat(preds_logits, axis=1)
              ).transpose([0, 2, 1])
              extra_data["logits"] = paddle.concat(
                  preds_logits, axis=1
              ).transpose([0, 2, 1])
              extra_data[
                  "nms_keep_idx"
              ] = nms_keep_idx  # bbox index before nms
              return bbox, bbox_num, extra_data
          else:
              return bbox, bbox_num
  
file_path: PaddleDetection/ppdet/modeling/architectures/blazeface.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
  import paddle
  import paddle.nn.functional
label_desc: Use image node_id 3 for calling the BlazeFace obj's underlying member method code with example usage: obj._forward() and returns: self, bbox,  bbox_num,  extra_data, bbox,  bbox_num