class_docstr: Pyramid pooling module originally in PSPNet.
  
  Args:
      in_channels (int): The number of intput channels to pyramid pooling module.
      out_channels (int): The number of output channels after pyramid pooling module.
      bin_sizes (tuple, optional): The out size of pooled feature maps. Default: (1, 2, 3, 6).
      dim_reduction (bool, optional): A bool value represents if reducing dimension after pooling. Default: True.
      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 __init__(
      self,
      in_channels: int,
      out_channels: int,
      bin_sizes: tuple,
      dim_reduction: bool,
      align_corners: bool,
  ):
      super().__init__()
  
      self.bin_sizes = bin_sizes
  
      inter_channels = in_channels
      if dim_reduction:
          inter_channels = in_channels // len(bin_sizes)
  
      # we use dimension reduction after pooling mentioned in original implementation.
      self.stages = nn.LayerList(
          [
              self._make_stage(in_channels, inter_channels, size)
              for size in bin_sizes
          ]
      )
  
      self.conv_bn_relu2 = ConvBNReLU(
          in_channels=in_channels + inter_channels * len(bin_sizes),
          out_channels=out_channels,
          kernel_size=3,
          padding=1,
      )
  
      self.align_corners = align_corners
  
imports: import paddle
  import paddle.nn
  import paddle.nn.functional
  from paddle.nn.layer import activation
  from paddle.nn import Conv2D, AvgPool2D
label_desc: Use image node_id 1 to create a new PPModule object from inherited base classes: nn with example: obj = PPModule(in_channels, out_channels, bin_sizes, dim_reduction, align_corners)