class_docstr: Bottleneck transformation: 1x1, 3x3 [+SE], 1x1.
class_docstr_tok: ["Bottleneck","transformation",":","1x1",",","3x3","[","+SE","]",",","1x1","."]
code: def __init__(
      self, w_in, w_out, stride, norm, activation_class, params
  ):
      super().__init__()
      w_b = int(round(w_out * params["bot_mul"]))
      w_se = int(round(w_in * params["se_r"]))
      groups = w_b // params["group_w"]
      self.a = conv2d(w_in, w_b, 1)
      self.a_bn = get_norm(norm, w_b)
      self.a_af = activation_class()
      self.b = conv2d(w_b, w_b, 3, stride=stride, groups=groups)
      self.b_bn = get_norm(norm, w_b)
      self.b_af = activation_class()
      self.se = SE(w_b, w_se, activation_class) if w_se else None
      self.c = conv2d(w_b, w_out, 1)
      self.c_bn = get_norm(norm, w_out)
      self.c_bn.final_bn = True
  
imports: import numpy
  from torch import nn
  from detectron2.layers import CNNBlockBase, ShapeSpec, get_norm
  from .backbone import Backbone
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, norm, activation_class, params)