docstr: Args:
      inputs: the inputs to a COCO model (e.g., GeneralizedRCNN).
          It is a list of dict. Each dict corresponds to an image and
          contains keys like "height", "width", "file_name", "image_id".
      outputs: the outputs of a COCO model. It is a list of dicts with key
          "instances" that contains :class:`Instances`.
          The :class:`Instances` object needs to have `densepose` field.
code: def process(self, inputs, outputs):
      """
      Args:
          inputs: the inputs to a COCO model (e.g., GeneralizedRCNN).
              It is a list of dict. Each dict corresponds to an image and
              contains keys like "height", "width", "file_name", "image_id".
          outputs: the outputs of a COCO model. It is a list of dicts with key
              "instances" that contains :class:`Instances`.
              The :class:`Instances` object needs to have `densepose` field.
      """
      for input, output in zip(inputs, outputs):
          instances = output["instances"].to(self._cpu_device)
          if not instances.has("pred_densepose"):
              continue
          prediction_list = prediction_to_dict(
              instances,
              input["image_id"],
              self._embedder,
              self._metadata.class_to_mesh_name,
              self._storage is not None,
          )
          if self._storage is not None:
              for prediction_dict in prediction_list:
                  dict_to_store = {}
                  for field_name in self._storage.data_schema:
                      dict_to_store[field_name] = prediction_dict[
                          field_name
                      ]
                  record_id = self._storage.put(dict_to_store)
                  prediction_dict["record_id"] = record_id
                  prediction_dict["rank"] = get_rank()
                  for field_name in self._storage.data_schema:
                      del prediction_dict[field_name]
          self._predictions.extend(prediction_list)
  
imports: import contextlib
  import copy
  import io
  import itertools
  import logging
  import numpy
  import os
  from collections import OrderedDict
  from typing import Dict, Iterable, List, Optional
  import pycocotools.mask
  import torch
  from pycocotools.coco import COCO
  from tabulate import tabulate
  from detectron2.config import CfgNode
  from detectron2.data import MetadataCatalog
  from detectron2.evaluation import DatasetEvaluator
  from detectron2.structures import BoxMode
  from detectron2.utils.comm import gather, get_rank, is_main_process, synchronize
  from detectron2.utils.file_io import PathManager
  from detectron2.utils.logger import create_small_table
  from densepose.converters import ToChartResultConverter, ToMaskConverter
  from densepose.data.datasets.coco import maybe_filter_and_map_categories_cocoapi
  from densepose.structures import DensePoseChartPredictorOutput, DensePoseEmbeddingPredictorOutput, quantize_densepose_chart_result
  from .densepose_coco_evaluation import DensePoseCocoEval, DensePoseEvalMode
  from .mesh_alignment_evaluator import MeshAlignmentEvaluator
  from .tensor_storage import SingleProcessFileTensorStorage, SingleProcessRamTensorStorage, SingleProcessTensorStorage, SizeData, storage_gather
label_desc: Use image node_id 3 for calling the DensePoseCOCOEvaluator obj's underlying member method code with example usage: obj.process(inputs, outputs) without return types