class_docstr: Do transformation on input data with corresponding pre-processing and augmentation operations.
  The shape of input data to all operations is [height, width, channels].
class_docstr_tok: ["Do","transformation","on","input","data","with","corresponding","pre-processing","and","augmentation","operations",".","The","shape","of","input","data","to","all","operations","is","[","height",",","width",",","channels","]","."]
code: def __call__(self, data: dict) -> dict:
      if "trans_info" not in data:
          data["trans_info"] = []
      for op in self.transforms:
          data = op(data)
          if data is None:
              return None
  
      data["img"] = np.transpose(data["img"], (2, 0, 1))
      for key in data.get("gt_fields", []):
          if len(data[key].shape) == 2:
              continue
          data[key] = np.transpose(data[key], (2, 0, 1))
  
      return data
  
imports: import random
  import base64
  from typing import Callable, Union, List, Tuple
  import cv2
  import numpy
  import paddle
  import paddle.nn.functional
  from paddleseg.transforms import functional
  from PIL import Image
label_desc: Use image node_id 2 for calling the Compose obj's underlying member method code with example usage: obj.__call__(data) and returns: data, None