code: def __init__(
      self,
      config,
      path,
      annotation_db=None,
      feature_key=None,
      *args,
      **kwargs,
  ):
      super().__init__(config, path, annotation_db, *args, **kwargs)
      self.feature_readers = []
      self.feature_dict = {}
      self.feature_key = config.get("feature_key", "feature_path")
      self.feature_key = (
          feature_key if feature_key else self.feature_key
      )
      self._fast_read = config.get("fast_read", False)
  
      path = path.split(",")
  
      for image_feature_dir in path:
          feature_reader = FeatureReader(
              base_path=get_absolute_path(image_feature_dir),
              depth_first=config.get("depth_first", False),
              max_features=config.get("max_features", 100),
          )
          self.feature_readers.append(feature_reader)
  
      self.paths = path
      self.annotation_db = annotation_db
      self._should_return_info = config.get(
          "return_features_info", True
      )
  
      if self._fast_read:
          path = ", ".join(path)
          logger.info(f"Fast reading features from {path}")
          logger.info("Hold tight, this may take a while...")
          self._threaded_read()
  
file_path: mmf/mmf/datasets/databases/features_database.py
imports: import logging
  from multiprocessing.pool import ThreadPool
  import tqdm
  from mmf.datasets.databases.image_database import ImageDatabase
  from mmf.datasets.databases.readers.feature_readers import FeatureReader
  from mmf.utils.distributed import is_main
  from mmf.utils.general import get_absolute_path
label_desc: Use image node_id 1 to create a new FeaturesDatabase object from inherited base classes: ImageDatabase with example: obj = FeaturesDatabase(config, path, annotation_db, feature_key)