class_docstr: Basic transformation: 3x3x3 group conv, 3x3x3 group conv
code: def _construct_model(
      self,
      dim_in,
      dim_out,
      temporal_stride,
      spatial_stride,
      groups,
      inplace_relu,
      bn_eps,
      bn_mmt,
  ):
      # Implementation of R(2+1)D operation <https://arxiv.org/abs/1711.11248>.
      # decompose the original 3D conv into one 2D spatial conv and one
      # 1D temporal conv
      branch2a = r2plus1_unit(
          dim_in,
          dim_out,
          temporal_stride,
          spatial_stride,
          groups,
          inplace_relu,
          bn_eps,
          bn_mmt,
      )
      branch2a_bn = nn.BatchNorm3d(dim_out, eps=bn_eps, momentum=bn_mmt)
      branch2a_relu = nn.ReLU(inplace=inplace_relu)
  
      branch2b = r2plus1_unit(
          dim_out,
          dim_out,
          1,  # temporal_stride
          1,  # spatial_stride
          groups,
          inplace_relu,
          bn_eps,
          bn_mmt,
      )
      branch2b_bn = nn.BatchNorm3d(dim_out, eps=bn_eps, momentum=bn_mmt)
      branch2b_bn.final_transform_op = True
  
      self.transform = nn.Sequential(
          branch2a, branch2a_bn, branch2a_relu, branch2b, branch2b_bn
      )
  
imports: import torch.nn
  from .r2plus1_util import r2plus1_unit
label_desc: Use image node_id 2 for calling the BasicR2Plus1DTransformation obj's underlying member method code with example usage: obj._construct_model(dim_in, dim_out, temporal_stride, spatial_stride, groups, inplace_relu, bn_eps, bn_mmt) without return types