code: def process_eval_image(
      cfg,
      fname_in,
      roi,
      fname_out,
      spatial_levels,
      image_helper,
      model,
      pca,
      eval_dataset_name,
      verbose=False,
  ):
      with PerfTimer("read_sample", PERF_STATS):
          if is_revisited_dataset(eval_dataset_name):
              img = image_helper.load_and_prepare_revisited_image(
                  fname_in, roi=roi
              )
          elif is_instre_dataset(eval_dataset_name):
              img = image_helper.load_and_prepare_instre_image(fname_in)
          else:
              img = image_helper.load_and_prepare_image(
                  fname_in, roi=roi
              )
  
      with PerfTimer("extract_features", PERF_STATS):
          # the model output is a list always.
          img_scalings = cfg.IMG_RETRIEVAL.IMG_SCALINGS or [1]
          activation_maps = extract_activation_maps(
              img, model, img_scalings
          )
  
      if verbose:
          print(
              f"Example eval image raw activation map shape: { activation_maps[0].shape }"  # NOQA
          )
      with PerfTimer("post_process_features", PERF_STATS):
          # process the features: rmac | l2 norm
          if cfg.IMG_RETRIEVAL.FEATS_PROCESSING_TYPE == "rmac":
              descriptors = get_rmac_descriptors(
                  activation_maps[0],
                  spatial_levels,
                  pca=pca,
                  normalize=cfg.IMG_RETRIEVAL.NORMALIZE_FEATURES,
              )
          elif cfg.IMG_RETRIEVAL.FEATS_PROCESSING_TYPE == "gem":
              descriptors = get_average_gem(
                  activation_maps,
                  p=cfg.IMG_RETRIEVAL.GEM_POOL_POWER,
                  add_bias=True,
              )
          else:
              descriptors = torch.mean(
                  torch.stack(activation_maps), dim=0
              )
              descriptors = descriptors.reshape(
                  descriptors.shape[0], -1
              )
  
          # Optionally l2 normalize the features.
          if (
              cfg.IMG_RETRIEVAL.NORMALIZE_FEATURES
              and cfg.IMG_RETRIEVAL.FEATS_PROCESSING_TYPE != "rmac"
          ):
              # RMAC performs normalization within the algorithm, hence we skip it here.
              descriptors = l2n(descriptors, dim=1)
  
          # Optionally apply pca.
          if pca and cfg.IMG_RETRIEVAL.FEATS_PROCESSING_TYPE != "rmac":
              # RMAC performs pca within the algorithm, hence we skip it here.
              descriptors = pca.apply(descriptors)
  
      if fname_out:
          save_file(descriptors.data.numpy(), fname_out, verbose=False)
  
      return descriptors.data.numpy()
  
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 5 for calling a global function with example usage: process_eval_image(cfg, fname_in, roi, fname_out, spatial_levels, image_helper, model, pca, eval_dataset_name, verbose) and returns: descriptors