class_docstr: Apply a list of transforms on multi-crop input. The transforms
  are Randomly applied to each crop using the specified probability.
  This is used in BYOL https://arxiv.org/pdf/2006.07733.pdf
  
  Multi-crops are several crops of a given image. This is most commonly
  used in contrastive learning. For example SimCLR, SwAV approaches use
  multi-crop input.
code: def __call__(self, image_list: List[Image.Image]):
      assert isinstance(image_list, list), "image_list must be a list"
      assert len(image_list) == len(self.prob)
      assert len(image_list) == len(self.transforms)
  
      output = []
      for idx in range(len(image_list)):
          output.append(self.transforms[idx](image_list[idx]))
      return output
  
file_path: vissl/vissl/data/ssl_transforms/img_pil_multicrop_random_apply.py
imports: import logging
  from typing import Any, Dict, List
  import torchvision.transforms
  from classy_vision.dataset.transforms import build_transform, register_transform
  from classy_vision.dataset.transforms.classy_transform import ClassyTransform
  from PIL import Image
label_desc: Use image node_id 3 for calling the ImgPilMultiCropRandomApply obj's underlying member method code with example usage: obj.__call__(image_list) and returns: output