class_docstr: The ANN implementation based on PaddlePaddle.
  
  The original article refers to
  Zhen, Zhu, et al. "Asymmetric Non-local Neural Networks for Semantic Segmentation"
  (https://arxiv.org/pdf/1908.07678.pdf).
  
  Args:
      num_classes (int): The unique number of target classes.
      backbone_indices (tuple, optional): Two values in the tuple indicate the indices of output of backbone.
      key_value_channels (int, optional): The key and value channels of self-attention map in both AFNB and APNB modules.
          Default: 256.
      inter_channels (int, optional): Both input and output channels of APNB modules. Default: 512.
      psp_size (tuple, optional): The out size of pooled feature maps. Default: (1, 3, 6, 8).
      enable_auxiliary_loss (bool, optional): A bool value indicates whether adding auxiliary loss. Default: True.
      align_corners (bool, optional): An argument of F.interpolate. It should be set to False when the feature size is even,
          e.g. 1024x512, otherwise it is True, e.g. 769x769. Default: False.
      pretrained (str, optional): The path or url of pretrained model. Default: None.
code: def __init__(
      self,
      num_classes: int = 19,
      backbone_indices: Tuple[int] = (2, 3),
      key_value_channels: int = 256,
      inter_channels: int = 512,
      psp_size: Tuple[int] = (1, 3, 6, 8),
      align_corners: bool = False,
      pretrained: str = None,
  ):
      super(ANN, self).__init__()
  
      self.backbone = ResNet50_vd()
      backbone_channels = [
          self.backbone.feat_channels[i] for i in backbone_indices
      ]
  
      self.head = ANNHead(
          num_classes,
          backbone_indices,
          backbone_channels,
          key_value_channels,
          inter_channels,
          psp_size,
      )
      self.align_corners = align_corners
      self.transforms = T.Compose([T.Normalize()])
  
      if pretrained is not None:
          model_dict = paddle.load(pretrained)
          self.set_dict(model_dict)
          print("load custom parameters success")
  
      else:
          checkpoint = os.path.join(self.directory, "model.pdparams")
          model_dict = paddle.load(checkpoint)
          self.set_dict(model_dict)
          print("load pretrained parameters success")
  
imports: import os
  from typing import Union, List, Tuple
  import numpy
  import paddle
  import paddle.nn
  import paddle.nn.functional
  from paddlehub.module.module import moduleinfo
  import paddlehub.vision.segmentation_transforms
  from paddlehub.module.cv_module import ImageSegmentationModule
  from ann_resnet50_cityscapes.resnet import ResNet50_vd
  import ann_resnet50_cityscapes.layers
label_desc: Use image node_id 1 to create a new ANN object from inherited base classes: nn with example: obj = ANN(num_classes, backbone_indices, key_value_channels, inter_channels, psp_size, align_corners, pretrained)