class_docstr: Decoder module of DeepLabV3P model
  
  Args:
      num_classes (int): The number of classes.
      in_channels (int): The number of input channels in decoder module.
      align_corners (bool): An argument of F.interpolate. It should be set to False when the output size of feature is even, e.g. 1024x512, otherwise it is True, e.g. 769x769.
class_docstr_tok: ["Decoder","module","of","DeepLabV3P","model","Args",":","num_classes","(","int",")",":","The","number","of","classes",".","in_channels","(","int",")",":","The","number","of","input","channels","in","decoder","module",".","align_corners","(","bool",")",":","An","argument","of","F.interpolate",".","It","should","be","set","to","False","when","the","output","size","of","feature","is","even",",","e.g",".","1024x512",",","otherwise","it","is","True",",","e.g",".","769x769","."]
code: def forward(
      self, x: paddle.Tensor, low_level_feat: paddle.Tensor
  ) -> paddle.Tensor:
      low_level_feat = self.conv_bn_relu1(low_level_feat)
      x = F.interpolate(
          x,
          low_level_feat.shape[2:],
          mode="bilinear",
          align_corners=self.align_corners,
      )
      x = paddle.concat([x, low_level_feat], axis=1)
      x = self.conv_bn_relu2(x)
      x = self.conv_bn_relu3(x)
      x = self.conv(x)
      return x
  
imports: import os
  from typing import Union, List, Tuple
  import paddle
  from paddle import nn
  import paddle.nn.functional
  import numpy
  from paddlehub.module.module import moduleinfo
  import paddlehub.vision.segmentation_transforms
  from paddlehub.module.cv_module import ImageSegmentationModule
  from deeplabv3p_resnet50_cityscapes.resnet import ResNet50_vd
  import deeplabv3p_resnet50_cityscapes.layers
label_desc: Use image node_id 2 for calling the Decoder obj's underlying member method code with example usage: obj.forward(x, low_level_feat) and returns: x