class_docstr: Bottleneck block for DilatedEncoder used in `YOLOF.
  
  <https://arxiv.org/abs/2103.09460>`.
  
  The Bottleneck contains three ConvLayers and one residual connection.
  
  Args:
      in_channels (int): The number of input channels.
      mid_channels (int): The number of middle output channels.
      dilation (int): Dilation rate.
      norm_cfg (dict): Dictionary to construct and config norm layer.
class_docstr_tok: ["Bottleneck","block","for","DilatedEncoder","used","in","`","YOLOF",".","<","https",":","\/\/arxiv.org\/abs\/2103.09460",">","`",".","The","Bottleneck","contains","three","ConvLayers","and","one","residual","connection",".","Args",":","in_channels","(","int",")",":","The","number","of","input","channels",".","mid_channels","(","int",")",":","The","number","of","middle","output","channels",".","dilation","(","int",")",":","Dilation","rate",".","norm_cfg","(","dict",")",":","Dictionary","to","construct","and","config","norm","layer","."]
code: def __init__(
      self,
      in_channels,
      mid_channels,
      dilation,
      norm_cfg=dict(type="BN", requires_grad=True),
  ):
      super(Bottleneck, self).__init__()
      self.conv1 = ConvModule(
          in_channels, mid_channels, 1, norm_cfg=norm_cfg
      )
      self.conv2 = ConvModule(
          mid_channels,
          mid_channels,
          3,
          padding=dilation,
          dilation=dilation,
          norm_cfg=norm_cfg,
      )
      self.conv3 = ConvModule(
          mid_channels, in_channels, 1, norm_cfg=norm_cfg
      )
  
file_path: mmdetection/mmdet/models/necks/dilated_encoder.py
imports: import torch.nn
  from mmcv.cnn import ConvModule, is_norm
  from mmengine.model import caffe2_xavier_init, constant_init, normal_init
  from torch.nn import BatchNorm2d
  from mmdet.registry import MODELS
label_desc: Use image node_id 1 to create a new Bottleneck object from inherited base classes: nn with example: obj = Bottleneck(in_channels, mid_channels, dilation, norm_cfg)