Model and training
Table with columns: Item, Value| Item | Value |
|---|
| Base | Qwen/Qwen3-VL-8B-Instruct |
| Data | GeoLLaVA-Data, 20,000 training records |
| Weights | Full BF16 safetensors, 4 file(s) |
| Observed endpoint | 1,250 optimizer steps, epoch 1 |
| Optimizer / learning rate | Adafactor / 1e-05 |
| Per-device batch / accumulation | 1 / 16 |
| Image budget / maximum sequence length | 784–1,310,720 pixels / 8,192 tokens (launcher settings) |
The trainer state records one completed epoch. This is the final checkpoint; no validation-selected best checkpoint was recorded. Details are in training_config.json and training_state_summary.json. The original subset manifest is not included; its historical source path is currently unavailable, so the exact selection recipe has not been reconstructed.
Archived evaluation results
The following results were recounted from existing prediction records on 2026-10-14. They use greedy answer generation and the archived answer parsers. They were not rerun for this release. The existing 8B 10K UHR-BAT2 card uses a different corrected candidate-logit/strict-option scoring protocol, so the tables should not be combined into a controlled comparison.
Table with columns: Dataset, Archived accuracy, Correct / Total| Dataset | Archived accuracy | Correct / Total |
|---|
| RSHR-Bench | 50.10% | 968 / 1,932 |
| MME-RealWorld Remote Sensing | 55.89% | 2,089 / 3,738 |
MME covers the full 3,738-record remote-sensing subset. Legacy XLRS and LRS-VQA results, category counts and source hashes are in EVALUATION.md and evaluation_results.json. The legacy XLRS single-letter parser does not support strict multi-select option-set scoring.
Quick start
Use Python 3.10+ and a CUDA-enabled PyTorch installation.
pip install -r requirements.txtpython inference.py --model FelixKAI/UHR-BAT2-8B-20K --image /path/to/image.jpg --question "Describe this remote-sensing image."
from transformers import AutoProcessor, Qwen3VLForConditionalGenerationmodel_id = "FelixKAI/UHR-BAT2-8B-20K"processor = AutoProcessor.from_pretrained(model_id)model = Qwen3VLForConditionalGeneration.from_pretrained( model_id, dtype="auto", device_map="auto", attn_implementation="sdpa").eval()
For ModelScope, download the same package and use its local path with Transformers or inference.py --model:
from modelscope import snapshot_downloadlocal_path = snapshot_download("KAIWANG/UHR-BAT2-8B-20K")
Loading and short image-generation checks are recorded in validation.json; file hashes and tensor metadata are in release_manifest.json.
Limitations and attribution
Images are resized within the pixel budget. These archived results do not establish native full-resolution performance or geographic-disjoint generalization. The exact training selection and overlap have not been fully reconstructed. There is no controlled improvement claim over the unfine-tuned base model or between the 20K and 10K versions. Counting, small-object recognition and spatial reasoning can fail.
Released under Apache-2.0, following the base model license. See NOTICE. Training and evaluation datasets are not redistributed. We acknowledge the Qwen team, GeoLLaVA contributors and the benchmark authors.