code: def get_train_dataset(
      cfg, root_dataset_path, train_dataset_name, eval_binary_path
  ):
      # We only create the train dataset if we need PCA or whitening training.
      # Otherwise not.
      if cfg.IMG_RETRIEVAL.TRAIN_PCA_WHITENING:
          train_data_path = f"{root_dataset_path}/{train_dataset_name}"
  
          assert g_pathmgr.exists(
              train_data_path
          ), f"Unknown path: {train_data_path}"
  
          num_samples = (
              None
              if cfg.IMG_RETRIEVAL.NUM_TRAINING_SAMPLES == -1
              else cfg.IMG_RETRIEVAL.NUM_TRAINING_SAMPLES
          )
  
          if is_revisited_dataset(train_dataset_name):
              train_dataset = RevisitedInstanceRetrievalDataset(
                  train_dataset_name,
                  root_dataset_path,
                  num_samples=num_samples,
              )
          elif is_whiten_dataset(train_dataset_name):
              train_dataset = WhiteningTrainingImageDataset(
                  train_data_path,
                  cfg.IMG_RETRIEVAL.WHITEN_IMG_LIST,
                  num_samples=num_samples,
              )
          elif is_copdays_dataset(train_dataset_name):
              train_dataset = CopyDaysDataset(
                  data_path=train_data_path,
                  num_samples=num_samples,
                  use_distractors=cfg.IMG_RETRIEVAL.USE_DISTRACTORS,
              )
          elif is_oxford_paris_dataset(train_dataset_name):
              train_dataset = InstanceRetrievalDataset(
                  train_data_path,
                  eval_binary_path,
                  num_samples=num_samples,
              )
          else:
              train_dataset = GenericInstanceRetrievalDataset(
                  train_data_path, num_samples=num_samples
              )
      else:
          train_dataset = None
      return train_dataset
  
imports: import logging
  import os
  import sys
  from argparse import Namespace
  from typing import Any, List
  import numpy
  import torch
  import torchvision
  from classy_vision.generic.util import copy_model_to_gpu, load_checkpoint
  from iopath.common.file_io import g_pathmgr
  from vissl.config import AttrDict
  from vissl.hooks import default_hook_generator
  from vissl.models import build_model
  from vissl.utils.checkpoint import get_checkpoint_folder, init_model_from_consolidated_weights
  from vissl.utils.distributed_launcher import launch_distributed
  from vissl.utils.env import set_env_vars, setup_path_manager
  from vissl.utils.extract_features_utils import ExtractedFeaturesLoader
  from vissl.utils.hydra_config import compose_hydra_configuration, convert_to_attrdict, print_cfg
  from vissl.utils.instance_retrieval_utils.data_util import CopyDaysDataset, GenericInstanceRetrievalDataset, get_average_gem, InstanceRetrievalDataset, InstanceRetrievalImageLoader, InstreDataset, is_copdays_dataset, is_instre_dataset, is_oxford_paris_dataset, is_revisited_dataset, is_whiten_dataset, l2n, MultigrainResize, RevisitedInstanceRetrievalDataset, WhiteningTrainingImageDataset
  from vissl.utils.instance_retrieval_utils.rmac import get_rmac_descriptors
  from vissl.utils.io import load_file, makedir, save_file
  from vissl.utils.logger import setup_logging, shutdown_logging
  from vissl.utils.pca import load_pca, train_and_save_pca
  from vissl.utils.perf_stats import PerfStats, PerfTimer
label_desc: Use image node_id 9 for calling a global function with example usage: get_train_dataset(cfg, root_dataset_path, train_dataset_name, eval_binary_path) and returns: train_dataset