docstr: SPP layer, which consist of four pooling layer follwed by conv layer
  
  Args:
      ch_in (int): input channel of conv layer
      ch_out (int): output channel of conv layer
      k (int): kernel size of conv layer
      norm_type (str): batch norm type
      freeze_norm (bool): whether to freeze norm, default False
      name (str): layer name
      act (str): activation function
      data_format (str): data format, NCHW or NHWC
docstr_tok: ["SPP","layer",",","which","consist","of","four","pooling","layer","follwed","by","conv","layer","Args",":","ch_in","(","int",")",":","input","channel","of","conv","layer","ch_out","(","int",")",":","output","channel","of","conv","layer","k","(","int",")",":","kernel","size","of","conv","layer","norm_type","(","str",")",":","batch","norm","type","freeze_norm","(","bool",")",":","whether","to","freeze","norm",",","default","False","name","(","str",")",":","layer","name","act","(","str",")",":","activation","function","data_format","(","str",")",":","data","format",",","NCHW","or","NHWC"]
code: def __init__(
      self,
      ch_in,
      ch_out,
      k,
      pool_size,
      norm_type="bn",
      freeze_norm=False,
      name="",
      act="leaky",
      data_format="NCHW",
  ):
      """
      SPP layer, which consist of four pooling layer follwed by conv layer
  
      Args:
          ch_in (int): input channel of conv layer
          ch_out (int): output channel of conv layer
          k (int): kernel size of conv layer
          norm_type (str): batch norm type
          freeze_norm (bool): whether to freeze norm, default False
          name (str): layer name
          act (str): activation function
          data_format (str): data format, NCHW or NHWC
      """
      super(SPP, self).__init__()
      self.pool = []
      self.data_format = data_format
      for size in pool_size:
          pool = self.add_sublayer(
              "{}.pool1".format(name),
              nn.MaxPool2D(
                  kernel_size=size,
                  stride=1,
                  padding=size // 2,
                  data_format=data_format,
                  ceil_mode=False,
              ),
          )
          self.pool.append(pool)
      self.conv = ConvBNLayer(
          ch_in,
          ch_out,
          k,
          padding=k // 2,
          norm_type=norm_type,
          freeze_norm=freeze_norm,
          name=name,
          act=act,
          data_format=data_format,
      )
  
imports: import paddle
  import paddle.nn
  import paddle.nn.functional
  from ppdet.core.workspace import register, serializable
  from ppdet.modeling.layers import DropBlock
  from ppdet.modeling.ops import get_act_fn
  from ..backbones.darknet import ConvBNLayer
  from ..shape_spec import ShapeSpec
  from ..backbones.csp_darknet import BaseConv, DWConv, CSPLayer
label_desc: Use image node_id 1 to create a new SPP object from inherited base classes: nn with example: obj = SPP(ch_in, ch_out, k, pool_size, norm_type, freeze_norm, name, act, data_format)