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","``","."]
docstr: Forward pass
  
  Args:
      x: Input tensor of shape :math:`(B, C, H, W)`.
  
  Returns:
      torch.Tensor of shape :math:`(B, C, H, W)`.
docstr_tok: ["Forward","pass","Args",":","x",":","Input","tensor","of","shape",":","math",":","`","(","B",",","C",",","H",",","W",")","`",".","Returns",":","torch.Tensor","of","shape",":","math",":","`","(","B",",","C",",","H",",","W",")","`","."]
code: def forward(self, x: torch.Tensor, *args, **kwargs) -> torch.Tensor:
      """
      Forward pass
  
      Args:
          x: Input tensor of shape :math:`(B, C, H, W)`.
  
      Returns:
          torch.Tensor of shape :math:`(B, C, H, W)`.
      """
      x = self.conv(x)
      x = self.fc1(x)
      x = self.drop(x)
      x = self.fc2(x)
      x = self.drop(x)
      return x
  
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 2 for calling the ConvFFN obj's underlying member method code with example usage: obj.forward(x) and returns: x