class_docstr: Front Convolutional Layers
  
  Args:
      dim (`int`):
          Dimension of features
      h (`int`):
          Height of input.
      in_f (`int`):
          Padding parameter.
      in_t (`int`):
          Padding parameter.
      fuller (`bool=False`):
          Whether to use group in conv2 layer.
      activation (`str`):
          Activation layer.
      strides (`list of tuple`):
          A list of stride tuples.
      relu_after_bn (`bool`):
          Whether to add ReLU after batch norm.
class_docstr_tok: ["Front","Convolutional","Layers","Args",":","dim","(","`","int","`",")",":","Dimension","of","features","h","(","`","int","`",")",":","Height","of","input",".","in_f","(","`","int","`",")",":","Padding","parameter",".","in_t","(","`","int","`",")",":","Padding","parameter",".","fuller","(","`","bool=False","`",")",":","Whether","to","use","group","in","conv2","layer",".","activation","(","`","str","`",")",":","Activation","layer",".","strides","(","`","list","of","tuple","`",")",":","A","list","of","stride","tuples",".","relu_after_bn","(","`","bool","`",")",":","Whether","to","add","ReLU","after","batch","norm","."]
code: def __init__(
      self,
      dim,
      h,
      in_f,
      in_t,
      fuller=False,
      activation="relu",
      strides=None,
      relu_after_bn=True,
  ):
      super().__init__()
      channels = [1, dim, dim, 2 * dim, 2 * dim, 4 * dim, 4 * dim, h, h]
      convs = []
      if activation == "relu":
          activation = nn.ReLU()
      elif activation == "elu":
          activation = nn.ELU()
      else:
          raise ValueError(
              f'Invalid activation "{activation}". Accept "relu" or "elu" only.'
          )
      for i in range(8):
          kernel_size = 3
          stride = (2, 2)
          if strides is not None:
              stride = strides[i][0][1], strides[i][1][0]
          sep_conv = SeparableConv2d(
              in_c=channels[i],
              out_c=channels[i + 1],
              kernel_size=kernel_size,
              stride=stride,
              in_f=in_f,
              in_t=in_t,
              fuller=fuller,
              activation=activation,
              relu_after_bn=relu_after_bn,
          )
          convs.append(sep_conv)
          in_f = (in_f - 1) // stride[1] + 1
          in_t = (in_t - 1) // stride[0] + 1
      assert in_f == in_t == 1, "output must be 1x1"
      self.convs = nn.ModuleList(convs)
  
file_path: towhee/towhee/models/nnfp/nnfp.py
imports: import torch
  from torch import nn
  from towhee.models.layers.conv2d_separable import SeparableConv2d
label_desc: Use image node_id 1 to create a new FrontConv object from inherited base classes: nn with example: obj = FrontConv(dim, h, in_f, in_t, fuller, activation, strides, relu_after_bn)