class_docstr: Residual bottleneck block
class_docstr_tok: ["Residual","bottleneck","block"]
code: def __init__(
      self,
      in_channels: int,
      out_channels: int,
      stride: int,
      shortcut: bool = True,
      if_first: bool = False,
      dilation: int = 1,
      name: str = None,
  ):
      super(BottleneckBlock, self).__init__()
  
      self.conv0 = ConvBNLayer(
          in_channels=in_channels,
          out_channels=out_channels,
          kernel_size=1,
          act="relu",
          name=name + "_branch2a",
      )
  
      self.dilation = dilation
  
      self.conv1 = ConvBNLayer(
          in_channels=out_channels,
          out_channels=out_channels,
          kernel_size=3,
          stride=stride,
          act="relu",
          dilation=dilation,
          name=name + "_branch2b",
      )
      self.conv2 = ConvBNLayer(
          in_channels=out_channels,
          out_channels=out_channels * 4,
          kernel_size=1,
          act=None,
          name=name + "_branch2c",
      )
  
      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,
              name=name + "_branch1",
          )
  
      self.shortcut = shortcut
  
imports: from typing import Tuple
  import paddle
  import paddle.nn
  import paddle.nn.functional
  from paddle.nn.layer import activation
  from paddle.nn import Conv2D, AvgPool2D
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, name)