class_docstr: Implement ResNet backbone for text recognition, modified from
    `ResNet <https://arxiv.org/pdf/1512.03385.pdf>`_
  Args:
      base_channels (int): Number of channels of input image tensor.
      layers (list[int]): List of BasicBlock number for each stage.
      channels (list[int]): List of out_channels of Conv2d layer.
      out_indices (None | Sequence[int]): Indices of output stages.
      stage4_pool_cfg (dict): Dictionary to construct and configure
          pooling layer in stage 4.
      last_stage_pool (bool): If True, add `MaxPool2d` layer to last stage.
code: def _make_layer(self, input_channels, output_channels, blocks):
      layers = []
      for _ in range(blocks):
          downsample = None
          if input_channels != output_channels:
              downsample = Sequential(
                  nn.Conv2d(
                      input_channels,
                      output_channels,
                      kernel_size=1,
                      stride=1,
                      bias=False,
                  ),
                  nn.BatchNorm2d(output_channels),
              )
          layers.append(
              BasicBlock(
                  input_channels, output_channels, downsample=downsample
              )
          )
          input_channels = output_channels
  
      return Sequential(*layers)
  
file_path: mmocr/mmocr/models/textrecog/backbones/resnet31_ocr.py
imports: import torch.nn
  from mmengine.model import BaseModule, Sequential
  import mmocr.utils
  from mmocr.models.textrecog.layers import BasicBlock
  from mmocr.registry import MODELS
label_desc: Use image node_id 2 for calling the ResNet31OCR obj's underlying member method code with example usage: obj._make_layer(input_channels, output_channels, blocks) and returns: Sequential