class_docstr: PicoHead
  Args:
      conv_feat (object): Instance of 'PicoFeat'
      num_classes (int): Number of classes
      fpn_stride (list): The stride of each FPN Layer
      prior_prob (float): Used to set the bias init for the class prediction layer
      loss_class (object): Instance of VariFocalLoss.
      loss_dfl (object): Instance of DistributionFocalLoss.
      loss_bbox (object): Instance of bbox loss.
      assigner (object): Instance of label assigner.
      reg_max: Max value of integral set :math: `{0, ..., reg_max}`
              n QFL setting. Default: 7.
class_docstr_tok: ["PicoHead","Args",":","conv_feat","(","object",")",":","Instance","of","'PicoFeat'","num_classes","(","int",")",":","Number","of","classes","fpn_stride","(","list",")",":","The","stride","of","each","FPN","Layer","prior_prob","(","float",")",":","Used","to","set","the","bias","init","for","the","class","prediction","layer","loss_class","(","object",")",":","Instance","of","VariFocalLoss",".","loss_dfl","(","object",")",":","Instance","of","DistributionFocalLoss",".","loss_bbox","(","object",")",":","Instance","of","bbox","loss",".","assigner","(","object",")",":","Instance","of","label","assigner",".","reg_max",":","Max","value","of","integral","set",":","math",":","`","{","0",",","...",",","reg_max","}","`","n","QFL","setting",".","Default",":","7","."]
code: def forward_eval(self, fpn_feats, export_post_process=True):
      if self.eval_size:
          anchor_points, stride_tensor = (
              self.anchor_points,
              self.stride_tensor,
          )
      else:
          anchor_points, stride_tensor = self._generate_anchors(
              fpn_feats
          )
      cls_logits_list, bboxes_reg_list = [], []
      for i, fpn_feat in enumerate(fpn_feats):
          conv_cls_feat, conv_reg_feat = self.conv_feat(fpn_feat, i)
          if self.conv_feat.share_cls_reg:
              cls_logits = self.head_cls_list[i](conv_cls_feat)
              cls_score, bbox_pred = paddle.split(
                  cls_logits,
                  [self.cls_out_channels, 4 * (self.reg_max + 1)],
                  axis=1,
              )
          else:
              cls_score = self.head_cls_list[i](conv_cls_feat)
              bbox_pred = self.head_reg_list[i](conv_reg_feat)
  
          if self.dgqp_module:
              quality_score = self.dgqp_module(bbox_pred)
              cls_score = F.sigmoid(cls_score) * quality_score
  
          if not export_post_process:
              # Now only supports batch size = 1 in deploy
              # TODO(ygh): support batch size > 1
              cls_score_out = (
                  F.sigmoid(cls_score)
                  .reshape([1, self.cls_out_channels, -1])
                  .transpose([0, 2, 1])
              )
              bbox_pred = bbox_pred.reshape(
                  [1, (self.reg_max + 1) * 4, -1]
              ).transpose([0, 2, 1])
          else:
              _, _, h, w = fpn_feat.shape
              l = h * w
              cls_score_out = F.sigmoid(
                  cls_score.reshape([-1, self.cls_out_channels, l])
              )
              bbox_pred = bbox_pred.transpose([0, 2, 3, 1])
              bbox_pred = self.distribution_project(bbox_pred)
              bbox_pred = bbox_pred.reshape([-1, l, 4])
  
          cls_logits_list.append(cls_score_out)
          bboxes_reg_list.append(bbox_pred)
  
      if export_post_process:
          cls_logits_list = paddle.concat(cls_logits_list, axis=-1)
          bboxes_reg_list = paddle.concat(bboxes_reg_list, axis=1)
          bboxes_reg_list = batch_distance2bbox(
              anchor_points, bboxes_reg_list
          )
          bboxes_reg_list *= stride_tensor
  
      return (cls_logits_list, bboxes_reg_list)
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import math
  import numpy
  import paddle
  import paddle.nn
  import paddle.nn.functional
  from paddle import ParamAttr
  from paddle.nn.initializer import Normal, Constant
  from ppdet.modeling.ops import get_static_shape
  from ..initializer import normal_
  from ..assigners.utils import generate_anchors_for_grid_cell
  from ..bbox_utils import bbox_center, batch_distance2bbox, bbox2distance
  from ppdet.core.workspace import register
  from ppdet.modeling.layers import ConvNormLayer
  from .simota_head import OTAVFLHead
  from .gfl_head import Integral, GFLHead
  from ppdet.modeling.necks.csp_pan import DPModule
label_desc: Use image node_id 4 for calling the PicoHead obj's underlying member method code with example usage: obj.forward_eval(fpn_feats, export_post_process) and returns: cls_logits_list,  bboxes_reg_list