## 🔥🔥🔥 ZoomEarth
**ZoomEarth** is a vision language model designed to solve visual reasoning and question answering tasks on **ultra-high-resolution remote sensing imagery**.  
Our model, **ZoomEarth**, is built upon Qwen2.5-VL-3B, a powerful VLM that  
It supports fine-grained reasoning, spatial context interpretation, and multi-level object understanding.

## 🛰️ Dataset

**LRS-GRO** contains high-resolution satellite images annotated with:
- Multi-level question types (global, regional, object)
- Bounding boxes and spatial relations
- Reasoning-based and factual QAs  

| Split | #Images | #Questions | Avg. Resolution |
|:------|---------:|------------:|----------------:|
| SFT | 88 | 1011 | 5000 |
| RL  | 228 | 2500 | 5000 |
| Test| 908 | 9734 | 5000 |

**Some examples are shown in** ./**LRS-GRO-examples** 
## ⚙️ Installation
Step 1. Create a conda environment and activate it.
```
conda create -n zoom-earth python=3.10 -y
conda activate zoom-earth
```
Step 2. Install PyTorch (We use PyTorch 2.4.1 / CUDA 12.1)
```
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
```
Step 3. Install other depencencies 
```
pip install -r requirements.txt
```
Step 4. Configure NLTK local corpora (for WordNet)
```
# (1) Download WordNet data to a local directory (optional if already exists)
python -m nltk.downloader wordnet -d ./nltk_data

# (2) In your code, add the following before importing WordNet
import nltk

local_corpora = "./nltk_data"
nltk.data.path.insert(0, local_corpora)

from nltk.corpus import wordnet as wn
```
and then replace `local_corpora` with actual path in [`src/eval/eval.py`](src/eval/eval.py), [`src/train/RL/src/open-r1-multimodal/src/open_r1/custom/customized_funcs.py`](src/train/RL/src/open-r1-multimodal/src/open_r1/custom/customized_funcs.py)

## 🚂 Train
To train ZoomEarth, first run `bash ./run_scripts/train_sft.sh` to start SFT training phase.

After that, run `bash ./run_scripts/train_rl.sh` to start RL training phase.

## 📋 Test
To evaluate model on LRS-GRO, first run `bash ./run_scripts/infer.sh` to generate inference file.

After that, run `bash ./run_scripts/eval.sh` to get detailed evaluation result.


