class_docstr: Bottleneck transformation: 1x1, BN, ReLU, 3x3, BN, ReLU, 1x1, BN.
class_docstr_tok: ["Bottleneck","transformation",":","1x1",",","BN",",","ReLU",",","3x3",",","BN",",","ReLU",",","1x1",",","BN","."]
code: def __init__(self, w_in, w_out, stride, w_b, num_gs):
      super().__init__()
      # MSRA -> stride=2 is on 1x1; TH/C2 -> stride=2 is on 3x3
      (s1, s3) = (stride, 1) if STRIDE_1X1 else (1, stride)
      self.a = nn.Conv2d(w_in, w_b, 1, stride=s1, padding=0, bias=False)
      self.a_bn = nn.BatchNorm2d(w_b, eps=BN_EPS, momentum=BN_MOM)
      self.a_relu = nn.ReLU(inplace=RELU_INPLACE)
      self.b = nn.Conv2d(
          w_b, w_b, 3, stride=s3, padding=1, groups=num_gs, bias=False
      )
      self.b_bn = nn.BatchNorm2d(w_b, eps=BN_EPS, momentum=BN_MOM)
      self.b_relu = nn.ReLU(inplace=RELU_INPLACE)
      self.c = nn.Conv2d(w_b, w_out, 1, stride=1, padding=0, bias=False)
      self.c_bn = nn.BatchNorm2d(w_out, eps=BN_EPS, momentum=BN_MOM)
      self.c_bn.final_bn = True
  
imports: import torch
  from torch import nn
label_desc: Use image node_id 1 to create a new BottleneckTransform object from inherited base classes: nn with example: obj = BottleneckTransform(w_in, w_out, stride, w_b, num_gs)