class_docstr: Convolutional FFN Module.
  
  Args:
      opts: Command line arguments.
      in_channels: Number of input channels.
      hidden_channels: Number of channels after expansion. Default: None
      out_channels: Number of output channels. Default: None
      drop: Dropout rate. Default: ``0.0``.
class_docstr_tok: ["Convolutional","FFN","Module",".","Args",":","opts",":","Command","line","arguments",".","in_channels",":","Number","of","input","channels",".","hidden_channels",":","Number","of","channels","after","expansion",".","Default",":","None","out_channels",":","Number","of","output","channels",".","Default",":","None","drop",":","Dropout","rate",".","Default",":","``","0.0","``","."]
code: def __init__(
      self,
      opts: argparse.Namespace,
      in_channels: int,
      hidden_channels: Optional[int] = None,
      out_channels: Optional[int] = None,
      drop: float = 0.0,
  ):
      super().__init__()
      out_channels = out_channels or in_channels
      hidden_channels = hidden_channels or in_channels
      self.conv = ConvLayer2d(
          opts,
          in_channels=in_channels,
          out_channels=in_channels,
          kernel_size=7,
          padding=3,
          groups=in_channels,
          bias=False,
          use_act=False,
      )
      self.fc1 = ConvLayer2d(
          opts,
          in_channels,
          hidden_channels,
          kernel_size=1,
          use_norm=False,
          bias=True,
      )
      self.fc2 = ConvLayer2d(
          opts,
          hidden_channels,
          out_channels,
          kernel_size=1,
          use_norm=False,
          use_act=False,
          bias=True,
      )
      self.drop = nn.Dropout(drop)
  
imports: import argparse
  from typing import Optional, Tuple, Union
  import torch
  import torch.nn
  from cvnets.layers import ConvLayer2d, MultiHeadAttention, StochasticDepth
  from cvnets.layers.normalization.batch_norm import BatchNorm2d
  from cvnets.modules import BaseModule
  from cvnets.modules.mobileone_block import MobileOneBlock, RepLKBlock
label_desc: Use image node_id 1 to create a new ConvFFN object from inherited base classes: BaseModule with example: obj = ConvFFN(opts, in_channels, hidden_channels, out_channels, drop)