code: def __init__(
      self,
      in_channels: int,
      out_channels: int,
      stride: int,
      shortcut: bool = True,
      if_first: bool = False,
      dilation: int = 1,
      data_format: str = "NCHW",
  ):
      super(BottleneckBlock, self).__init__()
  
      self.data_format = data_format
      self.conv0 = ConvBNLayer(
          in_channels=in_channels,
          out_channels=out_channels,
          kernel_size=1,
          act="relu",
          data_format=data_format,
      )
  
      self.dilation = dilation
  
      self.conv1 = ConvBNLayer(
          in_channels=out_channels,
          out_channels=out_channels,
          kernel_size=3,
          stride=stride,
          act="relu",
          dilation=dilation,
          data_format=data_format,
      )
      self.conv2 = ConvBNLayer(
          in_channels=out_channels,
          out_channels=out_channels * 4,
          kernel_size=1,
          act=None,
          data_format=data_format,
      )
  
      if not shortcut:
          self.short = ConvBNLayer(
              in_channels=in_channels,
              out_channels=out_channels * 4,
              kernel_size=1,
              stride=1,
              is_vd_mode=False if if_first or stride == 1 else True,
              data_format=data_format,
          )
  
      self.shortcut = shortcut
      # NOTE: Use the wrap layer for quantization training
      self.add = layers.Add()
      self.relu = layers.Activation(act="relu")
  
imports: from typing import Union, List, Tuple
  import paddle
  import paddle.nn
  import paddle.nn.functional
  import ann_resnet50_voc.layers
label_desc: Use image node_id 1 to create a new BottleneckBlock object from inherited base classes: nn with example: obj = BottleneckBlock(in_channels, out_channels, stride, shortcut, if_first, dilation, data_format)