code: def load_df(self):
      dataset_type = self.dataset_type
      imdb_file_index = self.imdb_file_index
      config = self.config
      csv_path = self.get_resource_path(
          config, config.annotations.get(dataset_type)[imdb_file_index]
      )
      video_dir = self.get_resource_path(
          config, config.videos.get(dataset_type)[imdb_file_index]
      )
      classes_file = self.get_resource_path(config, config.classes_file)
      df = make_charades_df(
          csv_path=csv_path,
          video_dir=video_dir,
          classes_file=classes_file,
      )
  
      precomputed_metadata = None
      pkl_path = os.path.join(
          "charades", "defaults", f"metadata_{dataset_type}.pt"
      )
      pkl_path = self.get_resource_path(config, pkl_path)
  
      if PathManager.exists(pkl_path):
          local_path = PathManager.get_local_path(pkl_path)
          with PathManager.open(local_path, "rb") as f:
              precomputed_metadata = torch.load(f)
  
      self.process_df(
          df,
          frames_per_clip=16,
          column_map={
              "labels": "action_labels",
              "video": "path",
              "text": "script",
              "id": "id",
          },
          num_workers=10,
          _precomputed_metadata=precomputed_metadata,
      )
  
      if not PathManager.exists(pkl_path):
          with PathManager.open(pkl_path, "wb") as f:
              torch.save(self.metadata, f)
  
imports: import os
  import PIL
  import torch
  from mmf.common.sample import Sample
  from mmf.datasets.base_dataset import BaseDataset
  from mmf.datasets.builders.charades._utils import CharadesVideoClips, img2gif, make_charades_df
  from mmf.utils.distributed import byte_tensor_to_object, object_to_byte_tensor
  from mmf.utils.file_io import PathManager
label_desc: Use image node_id 3 for calling the CharadesDataset obj's underlying member method code with example usage: obj.load_df() without return types