Instructions to use FelixKAI/UHR-BAT2-8B-20K with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use FelixKAI/UHR-BAT2-8B-20K with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="FelixKAI/UHR-BAT2-8B-20K") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("FelixKAI/UHR-BAT2-8B-20K") model = AutoModelForMultimodalLM.from_pretrained("FelixKAI/UHR-BAT2-8B-20K", device_map="auto") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=256) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use FelixKAI/UHR-BAT2-8B-20K with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "FelixKAI/UHR-BAT2-8B-20K" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "FelixKAI/UHR-BAT2-8B-20K", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/FelixKAI/UHR-BAT2-8B-20K
- SGLang
How to use FelixKAI/UHR-BAT2-8B-20K with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "FelixKAI/UHR-BAT2-8B-20K" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "FelixKAI/UHR-BAT2-8B-20K", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "FelixKAI/UHR-BAT2-8B-20K" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "FelixKAI/UHR-BAT2-8B-20K", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use FelixKAI/UHR-BAT2-8B-20K with Docker Model Runner:
docker model run hf.co/FelixKAI/UHR-BAT2-8B-20K
UHR-BAT2-8B-20K
Hugging Face · ModelScope · Evaluation details
A full-weight Qwen3-VL-8B fine-tune for remote-sensing visual question answering.
This checkpoint keeps the native Qwen3-VL architecture and loads directly with Transformers. Training used a 20,000-record GeoLLaVA manifest, with the vision encoder frozen and the merger and LLM trainable. The original final export is qwen3vl-8b-geollava-ft3-quota20k-1gpu.
Model and training
| 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.
| 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.txt
python inference.py --model FelixKAI/UHR-BAT2-8B-20K --image /path/to/image.jpg --question "Describe this remote-sensing image."
from transformers import AutoProcessor, Qwen3VLForConditionalGeneration
model_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:
pip install modelscope
from modelscope import snapshot_download
local_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.
- Downloads last month
- -
Model tree for FelixKAI/UHR-BAT2-8B-20K
Base model
Qwen/Qwen3-VL-8B-Instruct