README.md

July 1, 2026 Β· View on GitHub

πŸ›°οΈ GeoMMBench & GeoMMAgent: A Multimodal Benchmark and Multi-Agent Framework for GeoScience and Remote Sensing

πŸ’» Code | πŸ“„ Paper | πŸ€— Dataset | 🌐 Project Page |

CVPR 2026 License Python


News

  • 2026/04/09: ⭐ GeoMMBench & GeoMMAgent is selected as a CVPR 2026 Highlight!
  • 2026/03/23: πŸŽ‰ GeoMMBench & GeoMMAgent is accepted by CVPR 2026!
  • 2026/03/23: We release the GeoMMBench dataset on πŸ€— Hugging Face, containing 1,053 expert-level multiple-choice questions.
  • 2026/03/23: Code for GeoMMAgent (coordinator, exec_agents, toolkit) is publicly available.

Introduction

GeoMMBench is a comprehensive multimodal question-answering benchmark for geoscience and remote sensing (RS), featuring 1,053 expert-level, image-based multiple-choice questions covering:

  • 🌍 4 disciplines: Remote Sensing, Photogrammetry, GIS, GNSS
  • πŸ“‘ 6 sensor modalities: Optical, SAR, Hyperspectral, LiDAR, DEM, Thermal
  • πŸ”¬ Diverse task spectrums: Scene classification, object detection, change detection, spectral analysis, spatial reasoning, and more

GeoMMBench Overview

GeoMMAgent is a multi-agent framework following a plan–execute–evaluate paradigm, integrating toolkits and agent roles below.

ToolkitCapability (this repo)
πŸ”§GeneralFormat conversion, filtering, scaling, neural super-resolution (Real-ESRGAN optional), etc. (toolkit/general.py)
πŸ”KnowledgeWeb search (short-circuit: DuckDuckGo β†’ Google β†’ Bing β†’ Wikipedia text); optional image search + downloaded evidence images; GME text–image similarity to rank/filter candidates (toolkit/gme_filter.py, weights in config)
πŸ‘οΈPerceptionScene classification & object detection (YOLO11); semantic segmentation (DeepLabV3+ with Xception, bundled under toolkit/deeplabv3plus_xception/, weights in config)
🧠ReasoningReasoning & matching agents (multimodal LLM); option alignment in-agent
AgentRole
CoordinatorTask planning, decomposition, and orchestration (coordinator/)
Perception (Cls / Det / Seg)Classification, detection, DeepLab segmentation
SearchRetrieval + evidence images for downstream VLMs
Reasoning / MatchingMulti-step inference and MCQ alignment
Self-EvaluationOptional quality check (exec_agents/evaluation/)

GeoMMAgent Framework


Benchmark Results

GeoMMBench evaluates 36+ vision-language models under zero-shot conditions. GeoMMAgent achieves strong performance.

Benchmark Results

See the paper for full results and analysis.


GeoMMAgent Architecture

coordinator/
  β”œβ”€β”€ coordinator.py        ← Dispatch β†’ sequential execution, multi-image context
  └── prompts.py

exec_agents/
  β”œβ”€β”€ general/              ← Preprocess agents
  β”œβ”€β”€ perception/           ← ClsAgent, DetAgent, SegAgent (DeepLab)
  β”œβ”€β”€ knowledge/            ← SearchAgent (+ evidence images)
  β”œβ”€β”€ reasoning/            ← ReasoningAgent, MatchingAgent
  └── evaluation/           ← SelfEvaluationAgent (optional)

configs/
  └── GeoMMBench.yaml       ← Coordinator & agents; gme: & SegAgent.deeplab_weights

toolkit/
  β”œβ”€β”€ general.py
  β”œβ”€β”€ classification_toolkit.py   ← YOLO11 classification
  β”œβ”€β”€ detection_toolkit.py        ← YOLO11 OBB detection
  β”œβ”€β”€ segmentation_toolkit.py   ← DeepLabV3+ Xception inference
  β”œβ”€β”€ deeplabv3plus_xception/   ← Minimal DeepLab code (from DeepLabV3Plus-Pytorch)
  β”œβ”€β”€ gme_filter.py             ← GME-style embedding filter (see env / yaml)
  β”œβ”€β”€ knowledge.py              ← Retrieval hook (optional)
  β”œβ”€β”€ reasoning.py              ← Placeholder exports (logic in agents)
  β”œβ”€β”€ super_resolution.py
  └── data_loader.py            ← GeoMMBench parquet loader

Quick Start

Installation

Official repository: github.com/Shihao-Cheng/GeoMMAgent.

git clone https://github.com/Shihao-Cheng/GeoMMAgent.git
cd GeoMMAgent
pip install -r requirements.txt

For GPU, install a matching PyTorch build from pytorch.org before or after the step above. Segmentation and GME may need transformers with versions compatible with your stack (see paper / model cards).

Environment & configuration

cp .env_template .env

Edit .env for API keys. Typical entries:

  • QWEN_API_KEY: Multimodal / text models (Model Studio).
  • Search (optional): GOOGLE_API_KEY + SEARCH_ENGINE_ID for Google Programmable Search; otherwise other engines in the pipeline are used.
  • GME / DeepLab (optional overrides): defaults are set from configs/GeoMMBench.yaml (gme: and SegAgent.deeplab_weights). Use .env only when you need to override.

Run

From the GeoMMAgent project root (paths in configs/GeoMMBench.yaml are relative to this root unless absolute):

pip install -r requirements.txt
cp .env_template .env   # then set API keys

# Single query (plan β†’ execute β†’ trace)
python run/run_geomm.py --single "θΏ™εΌ ι₯ζ„Ÿε›ΎεƒδΈ­ζœ‰ε‡ ζžΆι£žζœΊοΌŸ" --image /path/to/image.png

# Benchmark on GeoMMBench parquet (place or symlink file at datasets/validation.parquet, or pass a path)
python run/run_geomm.py --bench datasets/validation.parquet

python run/run_geomm.py --bench datasets/validation.parquet --limit 5

Parallel benchmark: python run/run_benchmark_parallel.py --parquet datasets/validation.parquet (see run/run_benchmark_parallel.py docstring). Optional: bash run_benchmark.sh with PARQUET / WORKERS env vars.

Layout: put model weights under weights/; for neural super-resolution, clone the Real-ESRGAN inference repo into Real-ESRGAN-master/ at the repo root (see SuperResolutionAgent in configs/GeoMMBench.yaml). YOLO debug outputs go to yolo_out/ (gitignored).

Model configuration

Default coordinator and per-agent models are defined in configs/GeoMMBench.yaml (coordinator.model, agents.*.model). Entry point run/run_geomm.py loads this file via load_config() and create_model_from_config().


Dataset

GeoMMBench is on πŸ€— Hugging Face:

from datasets import load_dataset
ds = load_dataset("GeoMM/GeoMMBench")

Each sample contains: image, question, options (A/B/C/D), answer.

For run/run_geomm.py --bench and run/run_benchmark_parallel.py, export or symlink a Parquet file to datasets/validation.parquet (default in configs/GeoMMBench.yaml) or pass --parquet /your/path.parquet.


Model weights

ComponentNotesWeights
YOLO11-clsScene classificationshihaocheng/GeoMMAgent Β· yolo11s-cls-sft.pt
YOLO11-obbDOTA-style detectionshihaocheng/GeoMMAgent Β· yolo11s-obb.pt
DeepLabV3+ (LoveDA)Semantic segmentation (Xception backbone, same family as toolkit/deeplabv3plus_xception)open-mmlab/mmsegmentation Β· deeplabv3plus
GMEMultimodal embedding filter for search candidatesLocal path in configs/GeoMMBench.yaml β†’ gme.model_path (e.g. weights/gme-Qwen2-VL-2B-Instruct)

Place downloaded files under weights/ (or use absolute paths) and align SegAgent.deeplab_weights (path, num_classes, output_stride) with how each checkpoint was trained. Classification/detection paths are set in configs/GeoMMBench.yaml under each agent.


Extending GeoMMAgent

Training-free extension:

  1. Add tools under toolkit/ and bind them in exec_agents/ (BaseExecAgent, get_tools()).
  2. Register agents in configs/GeoMMBench.yaml (agents.<Name>.enabled) and ensure configs/loader.py AGENT_REGISTRY includes your class.
  3. Run via run/run_geomm.py which calls build_agents_from_config().

License

The GeoMMBench dataset is distributed under the CC BY 4.0 License. The code is released under the Apache License 2.0.


Citation

@inproceedings{xiao2026geomm,
  title={GeoMMBench and GeoMMAgent: Toward Expert-Level Multimodal Intelligence in Geoscience and Remote Sensing},
  author={Xiao, Aoran and Cheng, Shihao and Xu, Yonghao and Ren, Yexian and Chen, Hongruixuan and Yokoya, Naoto},
  booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
  year={2026}
}