docstr: PPYOLO Tiny DetBlock layer
  Args:
      ch_in (list): input channel number
      ch_out (list): output channel number
      name (str): block name
      drop_block: whether user DropBlock
      block_size: drop block size
      keep_prob: probability to keep block in DropBlock
      data_format (str): data format, NCHW or NHWC
docstr_tok: ["PPYOLO","Tiny","DetBlock","layer","Args",":","ch_in","(","list",")",":","input","channel","number","ch_out","(","list",")",":","output","channel","number","name","(","str",")",":","block","name","drop_block",":","whether","user","DropBlock","block_size",":","drop","block","size","keep_prob",":","probability","to","keep","block","in","DropBlock","data_format","(","str",")",":","data","format",",","NCHW","or","NHWC"]
code: def __init__(
      self,
      ch_in,
      ch_out,
      name,
      drop_block=False,
      block_size=3,
      keep_prob=0.9,
      data_format="NCHW",
  ):
      """
      PPYOLO Tiny DetBlock layer
      Args:
          ch_in (list): input channel number
          ch_out (list): output channel number
          name (str): block name
          drop_block: whether user DropBlock
          block_size: drop block size
          keep_prob: probability to keep block in DropBlock
          data_format (str): data format, NCHW or NHWC
      """
      super(PPYOLOTinyDetBlock, self).__init__()
      self.drop_block_ = drop_block
      self.conv_module = nn.Sequential()
  
      cfgs = [
          # name, in channels, out channels, filter_size,
          # stride, padding, groups
          [".0", ch_in, ch_out, 1, 1, 0, 1],
          [".1", ch_out, ch_out, 5, 1, 2, ch_out],
          [".2", ch_out, ch_out, 1, 1, 0, 1],
          [".route", ch_out, ch_out, 5, 1, 2, ch_out],
      ]
      for cfg in cfgs:
          (
              conv_name,
              conv_ch_in,
              conv_ch_out,
              filter_size,
              stride,
              padding,
              groups,
          ) = cfg
          self.conv_module.add_sublayer(
              name + conv_name,
              ConvBNLayer(
                  ch_in=conv_ch_in,
                  ch_out=conv_ch_out,
                  filter_size=filter_size,
                  stride=stride,
                  padding=padding,
                  groups=groups,
                  name=name + conv_name,
              ),
          )
  
      self.tip = ConvBNLayer(
          ch_in=ch_out,
          ch_out=ch_out,
          filter_size=1,
          stride=1,
          padding=0,
          groups=1,
          name=name + conv_name,
      )
  
      if self.drop_block_:
          self.drop_block = DropBlock(
              block_size=block_size,
              keep_prob=keep_prob,
              data_format=data_format,
              name=name + ".dropblock",
          )
  
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 PPYOLOTinyDetBlock object from inherited base classes: nn with example: obj = PPYOLOTinyDetBlock(ch_in, ch_out, name, drop_block, block_size, keep_prob, data_format)