class_docstr: DUsampling module
code: def forward(self, x):
      x = self.conv_w(x)
      n, c, h, w = x.size()
  
      # N, C, H, W --> N, W, H, C
      x = x.permute(0, 3, 2, 1).contiguous()
  
      # N, W, H, C --> N, W, H * scale, C // scale
      x = x.view(n, w, h * self.scale_factor, c // self.scale_factor)
  
      # N, W, H * scale, C // scale --> N, H * scale, W, C // scale
      x = x.permute(0, 2, 1, 3).contiguous()
  
      # N, H * scale, W, C // scale --> N, H * scale, W * scale, C // (scale ** 2)
      x = x.view(
          n,
          h * self.scale_factor,
          w * self.scale_factor,
          c // (self.scale_factor * self.scale_factor),
      )
  
      # N, H * scale, W * scale, C // (scale ** 2) -- > N, C // (scale ** 2), H * scale, W * scale
      x = x.permute(0, 3, 1, 2)
  
      return x
  
imports: import torch
  import torch.nn
  import torch.nn.functional
  from pywick.models.segmentation.da_basenets.segbase import SegBaseModel
  from pywick.models.segmentation.da_basenets.fcn import _FCNHead
label_desc: Use image node_id 2 for calling the DUpsampling obj's underlying member method code with example usage: obj.forward(x) and returns: x