code: def build_datasets(self):
      # download, split, etc...
      # only called on 1 GPU/TPU in distributed
  
      if is_main_process():
          self._download_data()
  
      if is_dist_avail_and_initialized():
          dist.barrier()
  
      # at this point, all the annotations and image/videos should be all downloaded to the specified locations.
      logging.info("Building datasets...")
      datasets = self.build()  # dataset['train'/'val'/'test']
  
      return datasets
  
imports: import logging
  import os
  import shutil
  import warnings
  import lavis.common.utils
  import torch.distributed
  from lavis.common.dist_utils import is_dist_avail_and_initialized, is_main_process
  from lavis.common.registry import registry
  from lavis.datasets.data_utils import extract_archive
  from lavis.processors.base_processor import BaseProcessor
  from omegaconf import OmegaConf
  from torchvision.datasets.utils import download_url
label_desc: Use image node_id 2 for calling the BaseDatasetBuilder obj's underlying member method code with example usage: obj.build_datasets() and returns: datasets