class_docstr: Inverted Residual Block for MobileNetV3.
  
  Args:
      in_channels (int): The input channels of this Module.
      out_channels (int): The output channels of this Module.
      mid_channels (int): The input channels of the depthwise convolution.
      kernel_size (int): The kernel size of the depthwise convolution.
          Default: 3.
      stride (int): The stride of the depthwise convolution. Default: 1.
      se_cfg (dict): Config dict for se layer. Default: None, which means no
          se layer.
      with_expand_conv (bool): Use expand conv or not. If set False,
          mid_channels must be the same with in_channels. Default: True.
      conv_cfg (dict): Config dict for convolution layer. Default: None,
          which means using conv2d.
      norm_cfg (dict): Config dict for normalization layer.
          Default: dict(type='BN').
      act_cfg (dict): Config dict for activation layer.
          Default: dict(type='ReLU').
      with_cp (bool): Use checkpoint or not. Using checkpoint will save some
          memory while slowing down the training speed. Default: False.
  
  Returns:
      Tensor: The output tensor.
class_docstr_tok: ["Inverted","Residual","Block","for","MobileNetV3",".","Args",":","in_channels","(","int",")",":","The","input","channels","of","this","Module",".","out_channels","(","int",")",":","The","output","channels","of","this","Module",".","mid_channels","(","int",")",":","The","input","channels","of","the","depthwise","convolution",".","kernel_size","(","int",")",":","The","kernel","size","of","the","depthwise","convolution",".","Default",":","3.","stride","(","int",")",":","The","stride","of","the","depthwise","convolution",".","Default",":","1.","se_cfg","(","dict",")",":","Config","dict","for","se","layer",".","Default",":","None",",","which","means","no","se","layer",".","with_expand_conv","(","bool",")",":","Use","expand","conv","or","not",".","If","set","False",",","mid_channels","must","be","the","same","with","in_channels",".","Default",":","True",".","conv_cfg","(","dict",")",":","Config","dict","for","convolution","layer",".","Default",":","None",",","which","means","using","conv2d",".","norm_cfg","(","dict",")",":","Config","dict","for","normalization","layer",".","Default",":","dict","(","type='BN","'",")",".","act_cfg","(","dict",")",":","Config","dict","for","activation","layer",".","Default",":","dict","(","type='ReLU","'",")",".","with_cp","(","bool",")",":","Use","checkpoint","or","not",".","Using","checkpoint","will","save","some","memory","while","slowing","down","the","training","speed",".","Default",":","False",".","Returns",":","Tensor",":","The","output","tensor","."]
code: def __init__(
      self,
      in_channels,
      out_channels,
      mid_channels,
      kernel_size=3,
      stride=1,
      se_cfg=None,
      with_expand_conv=True,
      conv_cfg=None,
      norm_cfg=dict(type="BN"),
      act_cfg=dict(type="ReLU"),
      with_cp=False,
  ):
      super(InvertedResidualV3, self).__init__()
      self.with_res_shortcut = (
          stride == 1 and in_channels == out_channels
      )
      assert stride in [1, 2]
      self.with_cp = with_cp
      self.with_se = se_cfg is not None
      self.with_expand_conv = with_expand_conv
  
      if self.with_se:
          assert isinstance(se_cfg, dict)
      if not self.with_expand_conv:
          assert mid_channels == in_channels
  
      if self.with_expand_conv:
          self.expand_conv = ConvModule(
              in_channels=in_channels,
              out_channels=mid_channels,
              kernel_size=1,
              stride=1,
              padding=0,
              conv_cfg=conv_cfg,
              norm_cfg=norm_cfg,
              act_cfg=act_cfg,
          )
      self.depthwise_conv = ConvModule(
          in_channels=mid_channels,
          out_channels=mid_channels,
          kernel_size=kernel_size,
          stride=stride,
          padding=kernel_size // 2,
          groups=mid_channels,
          conv_cfg=dict(type="Conv2dAdaptivePadding")
          if stride == 2
          else conv_cfg,
          norm_cfg=norm_cfg,
          act_cfg=act_cfg,
      )
  
      if self.with_se:
          self.se = SELayer(**se_cfg)
  
      self.linear_conv = ConvModule(
          in_channels=mid_channels,
          out_channels=out_channels,
          kernel_size=1,
          stride=1,
          padding=0,
          conv_cfg=conv_cfg,
          norm_cfg=norm_cfg,
          act_cfg=None,
      )
  
file_path: lavis/lavis/common/annotator/uniformer/mmseg/models/utils/inverted_residual.py
imports: from annotator.uniformer.mmcv.cnn import ConvModule
  from torch import nn
  from torch.utils import checkpoint
  from .se_layer import SELayer
label_desc: Use image node_id 1 to create a new InvertedResidualV3 object from inherited base classes: nn with example: obj = InvertedResidualV3(in_channels, out_channels, mid_channels, kernel_size, stride, se_cfg, with_expand_conv, conv_cfg, norm_cfg, act_cfg, with_cp)