code: def __call__(self, data):
      raw_label = data["label"]
      segments_info = data["ann"]
      thing_ids = set(data["thing_ids"])
  
      ins_label = np.zeros_like(raw_label, dtype="int64")
      sem_label = np.full_like(
          raw_label, self.ignore_index, dtype="int64"
      )
      pan_label = np.zeros_like(raw_label, dtype="int64")
      ins_id = 0
      class_id_tracker = Counter()
  
      for seg in segments_info:
          id_ = seg["id"]
          mask = raw_label == id_
          cat_id = seg["category_id"]
          sem_label[mask] = cat_id
          if cat_id in thing_ids:
              if seg["iscrowd"] == 0:
                  # Do not include crowded instances in `ins_label`
                  ins_id += 1
                  ins_label[mask] = ins_id
              # Re-encode `pan_id` using `cat_id` and tracked class instance id
              class_id_tracker[cat_id] += 1
              pan_id = encode_pan_id(
                  cat_id,
                  self.label_divisor,
                  ins_id=class_id_tracker[cat_id],
              )
              pan_label[mask] = pan_id
          else:
              pan_id = encode_pan_id(cat_id, self.label_divisor)
              pan_label[mask] = pan_id
          # Update annotation
          seg["id"] = pan_id
  
      data["ins_label"] = ins_label
      data["sem_label"] = sem_label
      data["pan_label"] = pan_label
  
      return data
  
imports: from collections import Counter
  import numpy
  import paddleseg
  import paddlepanseg.transforms.functional
  from paddlepanseg.cvlibs import manager
  from paddlepanseg.cvlibs.info_dicts import InfoDict
  from paddlepanseg.utils import encode_pan_id
  from .test_transforms import trim_for_test
label_desc: Use image node_id 2 for calling the DecodeLabels obj's underlying member method code with example usage: obj.__call__(data) and returns: data