class_docstr: gnConv: Recursive Gated Convolution
  
  Args:
      dim (`int`): Feature dimension.
      order (`int`): Order to expand dimensions.
      gflayer (`nn.Module`): Global filter.
      h (`int`): Height.
      w (`int`): Width.
      s (`float`): Scale ratio.
class_docstr_tok: ["gnConv",":","Recursive","Gated","Convolution","Args",":","dim","(","`","int","`",")",":","Feature","dimension",".","order","(","`","int","`",")",":","Order","to","expand","dimensions",".","gflayer","(","`","nn.Module","`",")",":","Global","filter",".","h","(","`","int","`",")",":","Height",".","w","(","`","int","`",")",":","Width",".","s","(","`","float","`",")",":","Scale","ratio","."]
code: def forward(self, x):
      # x: BCHW
      fused_x = self.proj_in(x)
      pwa, abc = torch.split(
          fused_x, (self.dims[0], sum(self.dims)), dim=1
      )
  
      dw_abc = self.dwconv(abc) * self.scale
  
      dw_list = torch.split(dw_abc, self.dims, dim=1)
      x = pwa * dw_list[0]
  
      for i in range(self.order - 1):
          x = self.pws[i](x) * dw_list[i + 1]
  
      x = self.proj_out(x)
  
      return x
  
file_path: towhee/towhee/models/hornet/utils.py
imports: import torch
  from torch import nn
  from towhee.models.layers.droppath import DropPath
  from towhee.models.utils.weight_init import trunc_normal_
  from towhee.models.convnext.utils import LayerNorm
label_desc: Use image node_id 2 for calling the GatedConv obj's underlying member method code with example usage: obj.forward(x) and returns: x