Evaluation Guide

June 19, 2026 ยท View on GitHub

This guide covers the evaluation of our models on broad Multimodal Benchmarks using a custom VLMEvalKit, as well as granular dense grounded evaluations.

1. Multimodal Benchmark Evaluation (VLMEvalKit)

We utilize a naturally modified VLMEvalKit framework for comprehensive multimodal benchmark evaluations.

Setup

All evaluations require setting up gpt-5.2 as the evaluator/judge. Please follow the VLMEvalKit guide to properly configure your API keys (e.g., setting up OPENAI_API_KEY or custom API bases).

export OPENAI_API_KEY="your_api_key_here"
# If necessary, export your base URL:
# export OPENAI_API_BASE="your_api_base_here"

Running Benchmarks

We use torchrun to distribute the evaluation process across multiple GPUs.

Example command (Evaluating on 8 GPUs):

cd VLMEvalKit
torchrun --nproc-per-node=8 --rdzv-backend=c10d  --rdzv-endpoint=localhost:13501 run.py \
    --data MMVP BLINK RealWorldQA CV-Bench-2D HallusionBench VStarBench \
    --model PerceptionDLM-Base \
    --verbose

Post-processing for Document & Chart Benchmarks

For ChartQA, DocVQA, and InfoVQA, we perform an advanced and stricter post-processing evaluation to guarantee accurate metric reflection. We employ a local Qwen/Qwen3-8B deployed via vLLM as the strict judge.

Step 1: Launch the vLLM server

# Set NUM_GPUS according to your environment
vllm serve Qwen/Qwen3-8B --tensor-parallel-size 8

Step 2: Run the Judge Evaluator

After VLMEvalKit generates the .xlsx prediction outputs, modify the input_xlsx and output_xlsx paths within evaluation/judge.py to point to the freshly generated logs, and run:

cd ../ # Return to project root
python evaluation/judge.py

2. Dense Grounded Evaluation (ParaDLC-Bench)

Evaluation consists of a two-step process: running inference to generate captions, followed by calling a judge model (e.g., GPT) for evaluation.

1. Inference

Run the inference script to generate mask captions:

python evaluation/ParaDLC-Bench/infer_mask_captions_paradlc.py \
    --model-path /path/to/PerceptionDLM \
    --image-root annotations/images \
    --anno-json annotations/annotations.json \
    --qa-json annotations/qa.json \
    --prompt "Describe the masked region in detail." \
    --gen-length 32 --steps 32 --temperature 0.0 --top-p 1.0 \
    --cache-name-override paradlc_outputs

2. Judge Evaluation

Run the GPT evaluation script on the generated outputs:

python evaluation/ParaDLC-Bench/eval_gpt_with_image.py \
    --pred parallel_model_outputs_cache/paradlc_outputs.json \
    --qa annotations/qa.json \
    --class-names annotations/class_names.json \
    --anno-json annotations/annotations.json