docstr: Args:
      input_size (Tuple[int, int, int]): the input size in CHW format.
      conv_layers (list): feature dimensions of each Convolution layer
      fc_layers (list): feature dimensions of each FCN layer
      norm_layer (callable, optional): Module specifying the normalization layer to use. Default: None
docstr_tok: ["Args",":","input_size","(","Tuple","[","int",",","int",",","int","]",")",":","the","input","size","in","CHW","format",".","conv_layers","(","list",")",":","feature","dimensions","of","each","Convolution","layer","fc_layers","(","list",")",":","feature","dimensions","of","each","FCN","layer","norm_layer","(","callable",",","optional",")",":","Module","specifying","the","normalization","layer","to","use",".","Default",":","None"]
code: def __init__(
      self,
      input_size: Tuple[int, int, int],
      conv_layers: List[int],
      fc_layers: List[int],
      norm_layer: Optional[Callable[..., nn.Module]] = None,
  ):
      """
      Args:
          input_size (Tuple[int, int, int]): the input size in CHW format.
          conv_layers (list): feature dimensions of each Convolution layer
          fc_layers (list): feature dimensions of each FCN layer
          norm_layer (callable, optional): Module specifying the normalization layer to use. Default: None
      """
      in_channels, in_height, in_width = input_size
  
      blocks = []
      previous_channels = in_channels
      for current_channels in conv_layers:
          blocks.append(
              misc_nn_ops.Conv2dNormActivation(
                  previous_channels,
                  current_channels,
                  norm_layer=norm_layer,
              )
          )
          previous_channels = current_channels
      blocks.append(nn.Flatten())
      previous_channels = previous_channels * in_height * in_width
      for current_channels in fc_layers:
          blocks.append(nn.Linear(previous_channels, current_channels))
          blocks.append(nn.ReLU(inplace=True))
          previous_channels = current_channels
  
      super().__init__(*blocks)
      for layer in self.modules():
          if isinstance(layer, nn.Conv2d):
              nn.init.kaiming_normal_(
                  layer.weight, mode="fan_out", nonlinearity="relu"
              )
              if layer.bias is not None:
                  nn.init.zeros_(layer.bias)
  
imports: from typing import Any, Callable, List, Optional, Tuple, Union
  import torch
  import torch.nn.functional
  from torch import nn
  from torchvision.ops import MultiScaleRoIAlign
  from ...ops import misc
  from ...transforms._presets import ObjectDetection
  from .._api import register_model, Weights, WeightsEnum
  from .._meta import _COCO_CATEGORIES
  from .._utils import _ovewrite_value_param, handle_legacy_interface
  from ..mobilenetv3 import mobilenet_v3_large, MobileNet_V3_Large_Weights
  from ..resnet import resnet50, ResNet50_Weights
  from ._utils import overwrite_eps
  from .anchor_utils import AnchorGenerator
  from .backbone_utils import _mobilenet_extractor, _resnet_fpn_extractor, _validate_trainable_layers
  from .generalized_rcnn import GeneralizedRCNN
  from .roi_heads import RoIHeads
  from .rpn import RegionProposalNetwork, RPNHead
  from .transform import GeneralizedRCNNTransform
label_desc: Use image node_id 1 to create a new FastRCNNConvFCHead object from inherited base classes: nn with example: obj = FastRCNNConvFCHead(input_size, conv_layers, fc_layers, norm_layer)