code: def _concat_dataset(cfg, default_args=None):
      from .dataset_wrappers import ConcatDataset
  
      ann_files = cfg["ann_file"]
      img_prefixes = cfg.get("img_prefix", None)
      seg_prefixes = cfg.get("seg_prefix", None)
      proposal_files = cfg.get("proposal_file", None)
      separate_eval = cfg.get("separate_eval", True)
  
      datasets = []
      num_dset = len(ann_files)
      for i in range(num_dset):
          data_cfg = copy.deepcopy(cfg)
          # pop 'separate_eval' since it is not a valid key for common datasets.
          if "separate_eval" in data_cfg:
              data_cfg.pop("separate_eval")
          data_cfg["ann_file"] = ann_files[i]
          if isinstance(img_prefixes, (list, tuple)):
              data_cfg["img_prefix"] = img_prefixes[i]
          if isinstance(seg_prefixes, (list, tuple)):
              data_cfg["seg_prefix"] = seg_prefixes[i]
          if isinstance(proposal_files, (list, tuple)):
              data_cfg["proposal_file"] = proposal_files[i]
          datasets.append(build_dataset(data_cfg, default_args))
  
      return ConcatDataset(datasets, separate_eval)
  
file_path: insightface/detection/scrfd/mmdet/datasets/builder.py
imports: import copy
  import platform
  import random
  from functools import partial
  import numpy
  from mmcv.parallel import collate
  from mmcv.runner import get_dist_info
  from mmcv.utils import Registry, build_from_cfg
  from torch.utils.data import DataLoader
  from .samplers import DistributedGroupSampler, DistributedSampler, GroupSampler
label_desc: Use image node_id 1 for calling a global function with example usage: _concat_dataset(cfg, default_args) and returns: ConcatDataset