code: def __init__(self, plane, abn=InPlaceABNSync):
      super(SpatialGCN, self).__init__()
      inter_plane = plane // 2
      self.node_k = nn.Conv2d(plane, inter_plane, kernel_size=1)
      self.node_v = nn.Conv2d(plane, inter_plane, kernel_size=1)
      self.node_q = nn.Conv2d(plane, inter_plane, kernel_size=1)
  
      self.conv_wg = nn.Conv1d(
          inter_plane, inter_plane, kernel_size=1, bias=False
      )
      self.bn_wg = nn.BatchNorm1d(inter_plane)
      self.softmax = nn.Softmax(dim=2)
  
      self.out = nn.Sequential(
          nn.Conv2d(inter_plane, plane, kernel_size=1), abn(plane)
      )
  
      self.gamma = nn.Parameter(torch.zeros(1))
  
file_path: insightface/parsing/dml_csr/networks/modules/ddgcn.py
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import torch
  import torch.nn.functional
  import torch.nn
  from inplace_abn import InPlaceABNSync
label_desc: Use image node_id 1 to create a new SpatialGCN object from inherited base classes: nn with example: obj = SpatialGCN(plane, abn)