Official code for the paper Self-Evolving Visual Questioner.
🔄 Fully Autonomous Self-Evolution: A novel framework where the VLM acts as both the proposer and filter. It continuously bootstraps harder, more visually grounded questions entirely from unlabeled images.
🚫 Zero External Reliance: Achieves state-of-the-art visual questioning capabilities without requiring expensive human annotations or proprietary external teacher models (like GPT-4V).
📏 New Agentic Evaluation Protocol: Introduces a comprehensive evaluation paradigm to assess visual question generation (VQG) across distinct cognitive dimensions: visual search difficulty, evidence coverage, context reasoning, spatial reasoning, and diversity.
SelfEvolvingVQ provides a complete, end-to-end pipeline for autonomously proposing, refining, and evaluating visually grounded questions. The repository is structured around two core workflows:
-
Self-Evolving Proposing & Filtering: A fully automated loop that generates seed visual questions from unlabeled images, iteratively rewrites them to demand deeper cognitive reasoning, and rigorously filters them using the VLM itself as a judge.
-
Agentic Quality Evaluation: A comprehensive evaluation suite designed to assess VQG capabilities. It uses an image-capable OpenAI evaluator to score questions across four critical cognitive dimensions (visual search, evidence coverage, context, and spatial reasoning), alongside Qwen embedding models to measure dataset-level diversity.
SeeQ/
|-- config/
| |-- key.conf.example
| `-- task_definition.json
|-- gen/
| |-- run_cmd_sat_3b.sh
| `-- scripts/generation_pipeline.py
|-- eval/
| |-- run_qs_gene.sh
| |-- run_qs_eval.sh
| |-- run_qs_diversity.sh
| `-- question/
`-- utils/
Local secrets can be provided through environment variables or
config/key.conf.
cp config/key.conf.example config/key.conf
export OPENAI_API_KEY=...Set JSON_FILE to the external input JSON before running generation scripts.
export JSON_FILE=/path/to/questions.jsonModel checkpoints, datasets, caches, and generated outputs are intentionally not included in this repository.
Run the main self-evolving generation pipeline:
bash gen/run_cmd_sat_3b.shUseful environment variables:
export JSON_FILE=/path/to/questions.json
export MODEL_TYPE=qwen25_3b
export MODEL_PATH=/path/to/local/checkpoint # optional
export FILTER_MODEL_TYPE=qwen25_3b
export OUTPUT_FOLDER=pipeline_rag_sat_2nd_3b_part
export RAG_BANK=output/rag/sample_questions_2nd.jsonl
export FACT_CACHE=output/rag/facts
export FILTER_MODE=filtered
export EVOLUTION_MODE=evolved
export NUM_TURN=1The Slurm launcher partitions the input into5 array jobs by default. For a
single local test run, set SLURM_ARRAY_TASK_ID manually:
SLURM_ARRAY_TASK_ID=0 bash gen/run_cmd_sat_3b.shGenerate image-grounded question-answer pairs with Qwen models:
bash eval/run_qs_gene.shUseful environment variables:
export JSON_FILE=/path/to/questions.json
export MODEL_TYPE=qwen25_3b # qwen25_3b, qwen25_7b, qwen3_4b
export MODEL_PATH=/path/to/model # optional alternative to MODEL_TYPEOutputs are written under output/eval/question_gene/ by default.
Submit OpenAI batch evaluation jobs:
MODEL_NAME=<model_name> RUN_NAME=<run_name> bash eval/run_qs_eval.sh submitCheck job status:
MODEL_NAME=<model_name> RUN_NAME=<run_name> bash eval/run_qs_eval.sh statusCollect completed results:
MODEL_NAME=<model_name> RUN_NAME=<run_name> bash eval/run_qs_eval.sh collectNormalize generated questions without API submission:
MODEL_NAME=<model_name> RUN_NAME=<run_name> bash eval/run_qs_eval.sh normalizeUseful environment variables:
export INPUT_DIR=output/eval/question_gene
export OUTPUT_DIR=output/question_eval/valid_difficulty
export JUDGE_MODEL=gpt-5-mini
export NUM_IMAGES=100Compute embedding-based diversity for generated questions:
MODEL_NAME=<model_name> bash eval/run_qs_diversity.shUseful environment variables:
export INPUT_JSON=output/eval/question_gene/<model_name>.json
export OUTPUT_DIR=output/eval/question_embedding_diversity
export EMBEDDING_MODEL=Qwen/Qwen3-Embedding-4B
export BATCH_SIZE=8@misc{liang2026selfevolvingvisualquestioner,
title={Self-Evolving Visual Questioner},
author={Yijun Liang and Hengguang Zhou and Ming Li and Lichen Li and Cho-Jui Hsieh and Tianyi Zhou},
year={2026},
eprint={2606.13929},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2606.13929},
}