class_docstr: This class defines the Basic block in the `ResNet model <https://arxiv.org/abs/1512.03385>`_
  Args:
      opts: command-line arguments
      in_channels (int): :math:`C_{in}` from an expected input of size :math:`(N, C_{in}, H_{in}, W_{in})`
      mid_channels (int): :math:`C_{mid}` from an expected tensor of size :math:`(N, C_{mid}, H_{out}, W_{out})`
      out_channels (int): :math:`C_{out}` from an expected output of size :math:`(N, C_{out}, H_{out}, W_{out})`
      stride (Optional[int]): Stride for convolution. Default: 1
      dilation (Optional[int]): Dilation for convolution. Default: 1
      dropout (Optional[float]): Dropout after second convolution. Default: 0.0
      stochastic_depth_prob (Optional[float]): Stochastic depth drop probability (1 - survival_prob). Default: 0.0
      squeeze_channels (Optional[int]): The number of channels to use in the Squeeze-Excitation block for SE-ResNet.
          Default: None.
  
  Shape:
      - Input: :math:`(N, C_{in}, H_{in}, W_{in})`
      - Output: :math:`(N, C_{out}, H_{out}, W_{out})`
code: def forward(self, x: Tensor, *args, **kwargs) -> Tensor:
      out = self.block(x)
      out = self.se_block(out)
      res = self.down_sample(x)
      out = self.stochastic_depth(out)
      out = out + res
      return self.final_act(out)
  
file_path: ml-cvnets/cvnets/modules/resnet_modules.py
imports: import argparse
  from typing import Optional
  from torch import Tensor, nn
  from cvnets.layers import ConvLayer2d, Dropout, Identity, StochasticDepth
  from cvnets.layers.activation import build_activation_layer
  from cvnets.modules import BaseModule, SqueezeExcitation
label_desc: Use image node_id 2 for calling the BasicResNetBlock obj's underlying member method code with example usage: obj.forward(x) and returns: self