class_docstr: Residual block. Performs a summation between an identity shortcut in branch1 and a
  main block in branch2. When the input and output dimensions are different, a
  convolution followed by a normalization will be performed.
  
  ::
  
  
                                       Input
                                         |-------+
                                         ↓       |
                                       Block     |
                                         ↓       |
                                     Summation ←-+
                                         ↓
                                     Activation
  
  The builder can be found in `create_res_block`.
code: def forward(self, x) -> torch.Tensor:
      if self.branch1_conv is None:
          x = self.branch_fusion(x, self.branch2(x))
      else:
          shortcut = self.branch1_conv(x)
          if self.branch1_norm is not None:
              shortcut = self.branch1_norm(shortcut)
          x = self.branch_fusion(shortcut, self.branch2(x))
      if self.activation is not None:
          x = self.activation(x)
      return x
  
imports: from typing import Callable, List, Tuple, Union
  import numpy
  import torch
  import torch.nn
  from pytorchvideo.layers.utils import set_attributes
  from pytorchvideo.models.head import create_res_basic_head, create_res_roi_pooling_head
  from pytorchvideo.models.net import DetectionBBoxNetwork, Net
  from pytorchvideo.models.stem import create_acoustic_res_basic_stem, create_res_basic_stem
label_desc: Use image node_id 2 for calling the ResBlock obj's underlying member method code with example usage: obj.forward(x) and returns: x